최근에 쿠버네티스를 공부할 일이 있어서 보고 있는데, 쿠버네티스 자체가 도커(Docker) 오케스트레이션을 해주는 툴이라 도커에 대한 개념이 없으니, 공부하기가 힘들었습니다. 그래서 이렇게 급하게 책을 사서 공부하면서 내용을 정리하고자 합니다.

해당 내용은 위키북스에서 나온 시작하세요! 도커 책을 보면서 정리한 내용입니다. 책의 내용이 매우 좋아서 강추합니다.

이번에는 도커의 이미지를 다루는 방법을 보도록 하겠습니다.


도커 이미지

출처 : Google

도커는 기본적으로 도커 허브라고 하는 중앙 이미지 저장소에서 이미지를 내려받습니다. 도커 허브는 도커가 공식적으로 제공하고 있는 이미지 저장소로 쉽게 올리고 내려받을 수 있습니다.


도커 이미지 생성

먼저 commit_test라는 ubuntu 컨테이너를 하나 만들도록 하겠습니다.

$ docker run -i -t --name commit_test ubuntu:14.04
root@30cdf0bc0e38:/# exit

기존에 있는 이미지로 새로운 이미지를 만들기 위해서는 docker commit 명령어를 사용하면 됩니다.

$ docker commit \      
> -a "jungwoon" \               # -a: author, 이미지의 작성자
> -m "my first commit" \        # -m: messages, 커밋 메시지
> commit_test \                 # 복사하고자 하는 이미지
> commit_test:first             # 새로 만드는 이미지:[태그], 태그 생략시 'latest'로 붙음

이제 이미지가 잘 만들어졌는지 확인해보도록 하겠습니다.

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED              SIZE
commit_test             first               750b35824fd8        About a minute ago   188MB
wordpress               latest              a1dc25194151        8 days ago           420MB
nginx                   latest              7042885a156a        3 weeks ago          109MB
mysql                   5.7                 ba7a93aae2a8        3 weeks ago          372MB
mongo                   latest              7177e01e8c01        3 weeks ago          393MB
ubuntu                  14.04               7e4b16ae8b23        3 weeks ago          188MB
centos                  7                   1e1148e4cc2c        6 weeks ago          202MB

도커 이미지 삭제

도커의 이미지를 삭제하기 위해서는 docker rmi를 사용하면 됩니다.

$ docker rmi commit_test:first
Untagged: commit_test:first
Deleted: sha256:750b35824fd85a8b7a47f2b0a7325cd74ff4490e8c125ca3abd157c7573bac36
Deleted: sha256:d5a73b4614eb1324ca1b0bb845453afab56f0955ce8e177b7ced58c7ee5e60d3

만약 이미지 삭제시 해당 이미지를 사용하고 있는 컨테이너가 있으면 아래와 같은 순서로 삭제하여야 합니다.

컨테이너 종료 -> 컨테이너 삭제 -> 이미지 삭제

이미지 추출

도커 이미지를 별도로 저장하거나 옮기는 등 이미지를 단일 바이너리 파일로 저장해야 할 때가 있습니다. 그때는 docker save 명령어를 사용합니다.

  • -o : 추출할 파일명
$ docker save -o ubuntu_14_04.tar ubuntu:14.04

확인해보면 아래와 같이 이미지 파일이 생긴걸 확인할 수 있습니다.

$ ls -al ubuntu_14_04.tar 
-rw-------  1 jungwoon  staff  197235712 Jan 19 14:06 ubuntu_14_04.tar

이미지 로드

위에서 만들어진 바이너리 파일을 읽어서 docker 엔진으로 가져오기 위해서는 docker load 명령어를 사용합니다.

  • -i : 로드할 파일명
$ docker load -i ubuntu_14_04.tar 
Loaded image: ubuntu:14.04

아래 명령어로 확인해보면 생긴걸 확인할 수 있습니다.

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
wordpress               latest              a1dc25194151        8 days ago          420MB
nginx                   latest              7042885a156a        3 weeks ago         109MB
mysql                   5.7                 ba7a93aae2a8        3 weeks ago         372MB
mongo                   latest              7177e01e8c01        3 weeks ago         393MB
ubuntu                  14.04               7e4b16ae8b23        3 weeks ago         188MB
centos                  7                   1e1148e4cc2c        6 weeks ago         202MB

이미지 배포

만들어진 이미지를 배포하는 방법 중 도커 허브 이미지 저장소를 사용하는 방법이 있습니다.

일단 https://hub.docker.com로 들어가서 로그인을 합니다.

그 다음 ‘Create a Repository’를 클릭합니다.

그럼 아래와 같이 이미지를 저장할 수 있는 Repository를 만들 수 있습니다. 이름과 설명을 적당히 넣도록 합니다.

다 되었으면 스크롤을 내려서 Create를 누릅니다.

다 되면 아래와 같은 화면을 볼 수 있습니다.

일단 배포를 위한 이미지(=commit_container)를 하나 만들도록 하겠습니다.

그 다음 my_image:0.0이란 이름으로 commit을 하도록 하겠습니다.

그 다음은 tag를 이용해서 이미지가 저장되는 저장소 이름으로 설정을 합니다.

$ docker tag [원래 이름] [저장소 이름]/[이미지 이름]:[버전]

여기서는 jungwoon/my_image:0.0으로 이미지 이름을 변경했습니다.

그 다음 배포를 하기전에 아래 명령어로 도커 허브에 로그인을 합니다.

$ docker login

그 다음 아래 명령을 통해 배포를 합니다.

$ docker push [이미지 이름]

작업이 끝난 후에 도커 허브에 가보면 업로드 된걸 확인할 수 있습니다.