Docker CLI 명령 정리
≡ 목차 (Table of Contents)
이 글은 Docker를 CLI로 다룰 때 사용하는 명령어를 일부 정리한다.
imges: 이미지 리스트
현재 로컬에 다운로드 받거나 생성한 이미지 리스트를 볼 수 있다.
docker images
pull: 이미지 다운로드
이미지를 다운로드 받는다. 로컬에서 돌리려면 반드시 필요한 과정이다.
docker pull IMAGE_NAME[:TAG]
하지만 이 명령 없이도 다른 명령으로 필요할 때 자동으로 이미지를 다운로드를 받기 때문에 이 명령을 수동으로 사용할 일이 과연 얼마나 있을지는 잘 모르겠다.
build: 이미지 만들기
현재 디렉터리에 있는 Dockerfile
을 이용해 이미지를 빌드한다.
docker build .
마지막의 .
은 빌드하는 디렉터리가 현재 디렉터리임을 의미한다. 즉 현재 디렉터리에 있는 자원을 이용한다는 의미다.
별도로 태그를 붙이거나 이름을 짓고 싶다면 -t
옵션을 붙일 수 있다.
docker build -t myimage .
이미지 스펙 파일은 Dockerfile
이라는 이름을 써야하지만 물론 마음대로 이름을 지을 수도 있다. 대신 이름을 마음대로 지었다면 -f
옵션으로 이름을 알려주어야 한다.
docker build -f /foo/bar/some/docker-file-name .
옵션 순서에 주의하자.
run: 컨테이너 실행시키기
이미지를 실행시켜서 컨테이너를 띄운다.
docker run IMAGE_NAME
정확하게 말해서 run
명령은 create
와 start
명령이 결합된 형태이지만, 아무래도 이렇게 나눠서 쓰기 보다는 그냥 run
커맨드가 편한 것 같다.
백그라운드 잡으로 돌리기 위해 -d
옵션을 줄 수 있다.
docker run -d IMAGE_NAME
이 외에 실행 시에 엄청난 옵션을 다룰 일이 많다. 특히 개발 단계에서는 아래와 같은 옵션들을 쓸 수도 있다.
docker run \ --rm \ -it \ --name "container-name" --net NETWORK_NAME \ -p 8000:8000 \ -v /foo/bar:/tmp/foo/bar \ -e ENV_NAME="value" \ IMAGE_NAME:TAG_NAME
--rm
- 컨테이너가 종료되면 자동으로 컨테이너를 삭제한다.
-it
-i
와-t
옵션을 한 번에 적은 것으로 커맨드를 터미널 인터랙티브로 실행시킨다. 셸을 띄우려면 필수다.--name NAME
- 컨테이너 이름을 지을 수 있다.
--net NETWORK
- 네트워크를 별도로 선택할 수 있다.
-p HOST:CONTAINER
- 호스트 포트와 컨테이너 내부 포트를 연결한다.
-v HOST:CONTAINER
- 호스트 파일 시스템과 컨테이너 내부 파일 시스템을 연결한다.
-e NAME=VALUE
- 환경변수를 전달한다.
exec: 컨테이너에서 명령 실행
log: 로그 보기
-d
옵션 없이 포그라운드로 돌렸다면 바로 터미널에서 로그가 보이겠지만 그렇지 않고 백그라운드 잡으로 돌려놓은 상태라면 로그를 보기위해 이 명령을 사용할 수 있다.
docker logs -f CONTAINER
-f
옵션은 tail
의 그것과 비슷하게 업데이트되는 것을 지속적으로 볼 수 있는 옵션이다. 나머지 컨테이너는 ID나 혹은 이름을 넣을 수도 있다.
ps: 컨테이너 상태 보기
아래 명령은 실행 중인 컨테이너 목록을 보여준다.
docker ps
추가로 여기에 아래 옵션을 더 쓸 수도 있다.
-a
- 실행 중이던 아니던 모든 컨테이너 리스트를 조회
-q
- 주변의 꾸미는 내용은 다 생략하고 컨테이너 고유 번호 만을 출력한다. 셸 스크립팅 시 다른 커맨드에 인자로 넘겨야 할 때 유용하다.
stop: 컨테이너 종료
docker stop CONTAINER
종료만 하지 삭제하지는 않는다.
kill: 컨테이너 강제 종료
docker kill CONTAINER
이름처럼 좀 세게(?) 죽인다.
만약 모든 컨테이너를 kill 하고 싶다면 아래처럼 스크립팅 할 수 있다.
docker kill $(docker ps -q)
rm: 컨테이너 삭제
docker rm CONTAINER
컨테이너 목록에서 해당 중지된 컨테이너를 삭제한다. create
명령의 상반된 용도다.
만약 모든 컨테이너를 삭제하고 싶다면 아래와 같이 스크립팅 할 수 있다.
docker rm $(docker ps -a -q)
network: 커스텀 네트워크
이 명령은 별도의 네트워크를 관리하고 싶을 때 사용한다.
ls
명령으로 현재 네트워크 목록을 만들 수 있다.
docker network ls
create
명령으로 별도의 네트워크를 생성할 수 있다.
docker network create NAME
rm
명령으로 생성한 네트워크를 삭제할 수 있다.
docker network rm NAME
rm
대신 prune
으로 모든 커스텀 네트워크를 삭제할 수 있다. 기본 네트워크는 삭제되지 않으니 걱정없이 사용할 수 있다.
docker network prune
rmi: 이미지 삭제하기
자주 쓸 일은 없지만 rmi
명령으로 다운로드 받은 이미지를 삭제할 수 있다. 주로 시스템 공간을 비울 때 사용된다.
docker rmi IMAGE_NAME
history: 도커 이미지 업데이트 내역
제목대로 이미지의 히스토리를 볼 수 있다.
docker history IMAGE_NAME