Logo

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 8bae72379b48test, 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 레퍼런스를 참고바라겠습니다.