Docker 이미지 관련 커맨드 사용법
Docker CLI 도구는 Docker 이미지(image)의 효과적인 관리를 위해서 다양한 커맨드(command)를 제공합니다. 이번 포스팅에서는 자주 쓰이는 커맨드 위주로 어떻게 Docker 이미지를 제어할 수 있는지 알아보도록 하겠습니다.
이미지 조회
docker images
커맨드는 이미지를 조회할 때 사용됩니다.
인자를 넘기지 않고 이 커맨드를 호출하면 전체 이미지 목록을 출력해줍니다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daleseo/test latest 8bae72379b48 About a minute ago 5.6MB
node current-slim 6d9a17519d40 12 days ago 140MB
node latest c31fbeb964cc 12 days ago 943MB
node 10-alpine 34a10d47f150 2 weeks ago 83.5MB
node 12-alpine f77abbe89ac1 2 weeks ago 88.1MB
buntu latest 4e5021d210f6 3 weeks ago 64.2MB
mysql 5.7 84164b03fa2e 5 weeks ago 456MB
redis latest 44d36d2c2374 2 months ago 98.2MB
python 3.8-alpine a0ee0c90a0db 2 months ago 109MB
postgres 11 d3d96b1e5d48 3 months ago 332MB
특정 리파지토리(repository)에 해당하는 이미지만 필터링해서 보고 싶을 때는, 리파지토리를 인자로 넘겨주면 됩니다.
$ docker images node
REPOSITORY TAG IMAGE ID CREATED SIZE
node current-slim 6d9a17519d40 12 days ago 140MB
node latest c31fbeb964cc 12 days ago 943MB
node 10-alpine 34a10d47f150 2 weeks ago 83.5MB
node 12-alpine f77abbe89ac1 2 weeks ago 88.1MB
태그까지 인자로 넘기면 특정 이미지가 조회됩니다.
$ docker images node:12-alpine
REPOSITORY TAG IMAGE ID CREATED SIZE
node 12-alpine f77abbe89ac1 2 weeks ago 88.1MB
이미지 빌드
docker build
커맨드는 Docker 이미지를 빌드(build)할 때 사용됩니다.
Docker 데몬이 이미지를 빌드하려면 소위 컨텍스트(context)라고도 불리는 Dockerfile을 담고 있는 디렉터리가 필요한데요. Dockerfile은 보통 같은 디렉터리 안에 있는 설정 파일이나 소스 코드를 이용해서 이미지의 빌드 절차를 정의하기 때문입니다.
예를 들어, 현재 작업 디렉터리를 기준으로 이미지를 빌드하려면 다음과 같이 커맨드를 실행합니다.
$ docker build .
여기서 컨텍스트의 경로는 반드시 로컬 디렉터리일 필요는 없으며, 네트워크 상의 Git repository 주소나 압축 파일이 될 수 있습니다.
$ docker build github.com/creack/docker-firefox
-t
옵션을 사용하여 Docker 이미지에 태그(tag)를 설정해줄 수 있습니다.
이미지에 태그를 설정하면 랜덤으로 결정되는 이미지 ID 대신에 태그를 이용해서 이미지를 제어할 수 있기 때문에 편리합니다.
또한, 이미지를 Docker Hub와 같은 Docker repository에 올릴 때도 태그가 해당 이미지의 고유 식별자로 사용되기 때문에 중요합니다.
태그는 리파지토리(repository):태그(tag)
형태로 지정이 가능하며, 태그
부분을 생략하면 latest
가 태그가 됩니다.
$ docker build -t test:1.0 .
$ docker build -t daleseo/test .
-f
옵션을 사용하면 디폴트인 Dockerfile
대신에 다른 파일로 부터 Docker 이미지를 빌드할 수 있습니다.
예를 들어, 개발 환경에서 Docker 이미지의 빌드 절차가 상용 환경과 상이한 경우, 개발 환경 전용으로 Dockerfile.dev
을 생성하고 다음과 같이 해당 파일을 바라보도록 해줄 수 있습니다.
$ docker build -f Dockerfile.dev .
이미지 태깅
이미지 태깅은 이미지를 빌드 한 후에 별도로 해줄 수도 있는데, 이 때 docker tag
커맨드를 사용합니다.
첫번째 인자로 이미지ID, 두번째 인자로 리파지토리 또는 태그까지 넘겨주면 됩니다.
docker tag 8bae72379b48 test
docker tag 8bae72379b48 test:2.0
이미지 삭제
docker rmi
커맨드는 Docker 이미지를 삭제할 때 사용됩니다.
삭제하려는 이미지의 ID나 태그를 인자로 넘겨주면 해당 이미지가 삭제가 됩니다.
$ docker rmi f77abbe89ac1
$ docker rmi node:12-alpine
종종, 하나의 이미지에 여러 개의 태그가 설정되어 있는 경우가 있는데요.
예를 들어, 다음과 같이 이미지 ID 8bae72379b48
에 test
, test2
, test3
이라는 3개의 태그가 설정되어 있다면,
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test2 latest 8bae72379b48 56 minutes ago 5.6MB
test3 latest 8bae72379b48 56 minutes ago 5.6MB
test latest 8bae72379b48 56 minutes ago 5.6MB
이럴 때 태그를 인자로 넘기면 태그만 삭제되고 이미지는 삭제되지 않습니다.
$ docker rmi test3
Untagged: test3:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test2 latest 8bae72379b48 56 minutes ago 5.6MB
test latest 8bae72379b48 56 minutes ago 5.6MB
이럴 때는 -f
옵션을 주고 이미지 ID를 인자로 넘기면 됩니다.
$ docker rmi -f 8bae72379b48
Untagged: test2:latest
Untagged: test:latest
Deleted: sha256:8bae72379b48f8b03aac00811832f4e19c8b1027750301f3a4dd056704652afc
마치면서
지금까지 Docker 이미지 관리를 위해서 자주 쓰이는 CLI 커맨드에서 대해서 알아보았습니다. 각 커맨드에 대한 좀 더 자세한 내용은 아래 Docekr CLI 레퍼런스를 참고바라겠습니다.