인프라

7. 도커 이미지

오늘의 나1 2021. 3. 3. 23:02

도커 이미지와 도커 허브

도커 이미지는 클라우드 저장소에 저장되어 있다. 도커의 기본 클라우드 저장소는 도커 허브이다. 도커 이미지명에 저장소를 명시하지 않으면 도커 엔진은 도커 허브에서 도커 이미지를 찾는다.

도커 이미지는 도커 허브 웹사이트에서도 찾을 수 있고, 도커 엔진이 설치된 터미널에 docker search를 입력하여 찾을 수도 있다.

> docker search ubuntu # docker search docker.io/ubuntu
NAME                                                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   11889     [OK]       
dorowu/ubuntu-desktop-lxde-vnc                            Docker image to provide HTML5 VNC interface …   499                  [OK]
websphere-liberty                                         WebSphere Liberty multi-architecture images …   268       [OK]       

도커 이미지 생성

명령어

도커 이미지 생성 명령어
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

실습

  • ubuntu:14.04 컨테이너 commit_test 생성 후, 컨테이너 안에 새 파일 추가
  • commit_test로 새 이미지 commit_test:first 생성
  • commit_test:first로 컨테이너 commit_test2 생성 후, 컨테이너 안에 새 파일 추가
  • commit_test2로 새 이미지 commit_test:second 생성
# docker run -i -t --name commit_test ubuntu:14.04
root@03f4a8ab2aad:/# echo test_first! >> first
root@03f4a8ab2aad:/# exit

# docker commit -a "alicek106" -m "my first commit" commit_test commit_test
# docker commit -a "alicek106" -m "my first commit" commit_test commit_test:first
# docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
commit_test   first     83b913e1a974   5 seconds ago    197MB
commit_test   latest    62b8a6ef5071   21 seconds ago   197MB
ubuntu        14.04     df043b4f0cf1   5 months ago     197MB

# docker run -i -t --name commit_test2 commit_test:first
root@bd571592d242:/# echo test_second! >> second
root@bd571592d242:/# exit

# docker commit -a "alicek106" -m "my first commit" commit_test commit_test:first
# docker images
REPOSITORY    TAG       IMAGE ID       CREATED              SIZE
commit_test   second    4ae82a4082fd   4 seconds ago        197MB
commit_test   first     83b913e1a974   About a minute ago   197MB
commit_test   latest    62b8a6ef5071   2 minutes ago        197MB
ubuntu        14.04     df043b4f0cf1   5 months ago         197MB

도커 이미지 구조

도커 이미지 구조 이해하기

생성된 도커 이미지는 Git 리포지토리처럼 관리된다.

docker commit 명령어는 현재 컨테이너의 변경점에 관한 도커 이미지 레이어를 생성하는 명령어이다. 이 명령어를 사용하여 도커 이미지 레이어를 생성하고, 태그와 커밋 메시지를 남기는 것으로 생각하면 이해하기 쉽다.

실습 후 생성된 도커 이미지와 도커 컨테이너

도커 이미지 히스토리 확인

docker history 명령어로 해당 이미지에 대한 커밋 히스토리를 확인할 수 있다.

# docker history commit_test:second

IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
4cdf33f895f1   7 hours ago     /bin/bash                                       86B       my second commit
cc1b1cbb270d   7 hours ago     /bin/bash                                       51B       my first commit
df043b4f0cf1   5 months ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      5 months ago    /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B 

도커 이미지 삭제

docker rmi 명령어를 사용하여 도커 이미지 레이어를 삭제할 수 있다.

단, 컨테이너가 이미지를 참조하고 있는 경우 도커 이미지 레이어를 삭제할 수 없다.

# docker rmi commit_test:first
Error response from daemon: conflict: unable to remove repository reference "commit_test:first" (must force) - container bd571592d242 is using its referenced image 83b913e1a974

-f 옵션을 사용하여 이미지 레이어를 삭제하거나, 이미지 레이어가 마지막 커밋이 아닌 경우, 이미지 레이어에 대한 태그만 삭제(Untag)하고 도커 이미지 레이어 자체는 삭제(Delete)하지 않는다. 태그가 없는 이미지 레이어를 dangling 이미지라고 한다.

# docker stop commit_test2 && docker rm commit_test2
# docker rmi commit_test:first
Untagged: commit_test:first

도커 이미지 레이어를 완전히 삭제하기 위해서는 관련된 컨테이너가 없고, 마지막 이미지 레이어어야 한다. 이 경우 이미지 레이어에 대한 태그도 삭제(Untag)하고 도커 이미지 레이어 자체(Delete)도 삭제한다.

# docker rmi commit_test:second
Untagged: commit_test:second
Deleted: sha256:4cdf33f895f1...
Deleted: sha256:ff15f72bfaf1...
Deleted: sha256:cc1b1cbb270d...
Deleted: sha256:2c282b555799...

도커 이미지 추출

도커 이미지를 압축 파일 한 개로 추출할 수 있다. save/load 또는 export/import 명령어를 사용하면 된다. 도커 이미지를 압축 파일 형식으로 관리하면, 이미지별로 파일이 생성되기 때문에 commit 명령어로 이미지를 관리하는 방식에 비해 비효율적이다.

# docker save -o ubuntu_14_04.tar ubuntu:14.04
# docker load -i ubuntu_14_04.tar

# docker export -o rootFS.tar mycontainer
# docker import rootFS.tar myimage:0.0

도커 이미지 배포

도커 허브 또는 사설 레지스트리를 구축하여 도커 이미지를 배포할 수 있다. 
도커 허브에 자신의 계정 또는 기관(Organization)을 만들어 리포지토리를 추가할 수 있다. 
도커 허브에 이미지를 푸시하기 위해서는 도커 로그인이 필요하다. 

# docker login

# docker push alicek107/my-image-name:0.0

# docker pull alicek107/my-image-name:0.0

 

'인프라' 카테고리의 다른 글

8. 도커 이미지 배포  (0) 2021.03.30
9. DockerFile  (0) 2021.03.14
4. 도커 네트워킹  (0) 2021.03.02
3. 도커 볼륨  (0) 2021.03.02
2. 도커 기본 명령어  (0) 2021.03.02