Docker 터미널 관련 명령어 정리
[ docker ]
- docker build . : 도커를 빌드
- docker run <이미지아이디> : 도커 실행
- docker stop <컨테이너아이디> : 실행되고 있는 컨테이너를 멈춤
- docker ps : 실행중인 컨테이너 상태 확인
- docker ps -a : 꺼져있는 전체 컨테이너 상태 확인
- docker images : 생성된 image들의 목록
- docker exec -it <컨테이너아이디> sh: 화면이 bash 쉘로 바뀌게 됨, -it 은 수정할 수 있게 해달라는 뜻
( 쉽게 얘기하면 도커에서 돌아가고 있는 가상 컴퓨터의 터미널로 들어온 것)
명령어 입력 후 /#로 바뀌면 도커 컴퓨터 안에 들어왔다는 뜻 - exit : 가상컴퓨터 쉘 종료
[ docker-compose ]
- docker-compose build : docker image 생성
- docker-compose up : container를 실행
/ 해당 터미널내에서만 서버가 열리게 되는 Foreground Process - docker-compose up -d : container를 실행
/ 화면 뒤에서 서버가 실행되는 Background Process, 서버가 올라가는 로그가 눈에 보이지 않음 - docker-compose logs -f : 로그 보기 , f는 계속 보겠다는 뜻
yaml 파일 개발 환경별로 바꾸고 Docker-compose 빌드 하는 법 예시
도커빌드
$ docker-compose -f docker-compose.prod.yaml build
도커 시작
$ docker-compose -f docker-compose.prod.yaml up -d
도커 정지
$ docker-compose -f docker-compose.prod.yaml stop
로그보기
$ docker-compose -f docker-compose.prod.yaml logs -f
* docker-compose -f docker-compose.yaml 을 줄인 것이 docker-compose 명령어
삭제관련명령어
- docker rm <이미지ID>: 컨테이너 삭제
종료된 컨테이너는 가지고 있을 필요가 없기 때문에 삭제 명령을 통해 지워줄 수 있습니다.
컨테이너는 종료, 삭제되었지만 이미지까지 삭제된 것은 아닙니다.
만들어진 이미지로 언제든 컨테이너를 생성할 수 있습니다. - docker ps -a -q: 컨테이너 아이디만보여줌
- docker rm `docker ps -a -q` : 컨테이너전체 삭제
- docker images -a -q : 이미지 아이디만 나오게 하는명령어
- docker rmi `docker images -a -q` : 이미지 전체삭제 명령어
도커 전체이미지를 보여주고 삭제해야하므로 벡틱을 넣어 먼저 뒤의 내용이 실행될 수 있게 한다. - docker system prune -a :사용하지 않는 Docker 오브젝트 전부 삭제 ( 켜진 Docker 제외하고 삭제)
*docker는 삭제한 파일들을 docker 별도의 공간에 보내기 때문에 완전 삭제하기 위해서는 아래의 작업들이 필요하다.
docker container prune : 중지된 모든 컨테이너 삭제
docker image prune : 사용하지 않는 이미지 삭제(dangling images)
docker volume prune : 컨테이너와 연결되지 않은 모든 볼륨 삭제
docker network prune : 컨테이너와 연결되지 않은 모든 네트워크 삭제
docker system prune -a : 위에 명령어를 통합해서 한번에 실행. 사용하지 않는 모든 오브젝트를 삭제
도커 빌드/업 중 자주 생기는 오류
[ 도커 이미지 삭제 오류 ]
> Error response from daemon: conflict: unable to delete cb4186e00429 (must be forced) - image is referenced in multiple repositories.. 가 뜨면 강제 삭제한다.
- docker rmi -f <삭제할이미지이름>
[ 포트관련 ]
> Ports are not available :listen tcp 0.0.0.0:3306: bind: address already in use
이미 로컬 mysql로 포트번호3306을 사용중이어서 발생하는 에러이므로 로컬 mysql을 중단
- sudo systemctl stop mysql
> address already in use..
포트가 이미 할당되어 있어서 발생한 에러로, 해당 포트를 사용 중인지 확인 -> 포트 죽이기
$ sudo lsof -i :포트번호
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 989 root 9u IPv4 21377 0t0 TCP *:2224 (LISTEN)
nginx 990 www-data 9u IPv4 21377 0t0 TCP *:2224 (LISTEN)
nginx 991 www-data 9u IPv4 21377 0t0 TCP *:2224 (LISTEN)
할당되어 있는 포트를 죽인 후 다시 docker 컨테이너를 재시작하면 문제 해결
$ sudo kill -9 989
$ sudo kill -9 990
$ sudo kill -9 991