티스토리 뷰
Docker Images
docker registry에서 필요한 docker image를 검색할 수 있다.
[root@cent154 ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5620 [OK]
ansible/centos7-ansible Ansible on Centos7 125 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 114 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 99 [OK]
docker registry는 다양한 image들이 등록되어 있으므로, official 한 이미지를 찾기 어려울 수도 있다.
-- filter 옵션을 통해서 official 이미지를 검색할 수 있다.
[root@cent154 ~]# docker search --filter "is-official=true" centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5620 [OK]
docker pull은 local, Docker Hub등에서 docker image를 가져오는 역할을 수행한다.
이미지 고유의 ID가 존재하며, 이것은 이름과 태그 기반으로 Annotation 된다.
[root@cent154 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
729ec3a6ada3: Pull complete
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
신규 다운로드된 CentOS 이미지는 아래와 같이 Local Repo 이름과 Tag, Image ID 등으로 식별 및 기타 정보들을 확인 할 수 있다.
[root@cent154 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0f3e07c0138f 3 weeks ago 220MB
해당 이미지를 통해서 새롭게 Docker를 생성할 수 있다.
기본 이미지를 기반으로 docker를 생성하고, docker를 구동하고 접속한다.
여기에 새로운 tool을 설치하게 되면 , 기본 이미지 레이어에 새로운 레이어가 추가하게 된다.
하지만 이것은 이미지가 새로 생성되는 개념은 아니며, 기존 레이어를 참조하는 방식이다.
[root@cent154 ~]# docker run --name centos01 -it centos:latest
[root@467e3d5acf71 /]# yum -y install net-tools
만약 신규 패키지가 설치된 컨테이너를 새로운 이미지로 만든다면, 현재 구동 중인 컨테이너 ID를 기반으로 Image를 신규 생성한다.
[root@cent154 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
467e3d5acf71 centos:latest "/bin/bash" About a minute ago Up About a minute centos01
새로운 image생성은 commit 명령을 통해 수행하며, docker 컨테이너 ID와 신규 생성된 이미지의 이름과 Tag를 추가해서 생성할 수 있다.
[root@cent154 ~]# docker commit -a “by whchoi" 467e3d5acf71 centos01:v0.1
sha256:15266765308270bbf11cddfb89593d3c7070fc0616c6cbc93e24ce30d6cd25bb
신규 생성된 이미지는 기존 기본 이미지에 40MB가 추가된 형태로 이미지가 생성된 것을 확인 할 수 있다.
[root@cent154 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos01 v0.1 152667653082 6 seconds ago 260MB
centos latest 0f3e07c0138f 3 weeks ago 220MB
신규 생성된 이미지가 어떤 이미지 레이어로 구성되었는지를 확인하기 위해서는 “history” 명령을 통해 확인 할 수 있다.
[root@cent154 ~]# docker history centos01:v0.1
IMAGE CREATED CREATED BY SIZE COMMENT
152667653082 About a minute ago /bin/bash 40.8MB
0f3e07c0138f 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:d6fdacc1972df524a… 220MB
신규 생성된 이미지를 통해 , 컨테이너를 생성하고 새로운 패키지를 추가 설치해서 이미지의 참조 과정을 살펴보면 조금 더 깊은 이해를 할 수 있다.
[root@cent154 ~]# docker run --name centos02 -it centos01:v0.1
[root@fe742ebc24ef /]# yum -y install bind-utils
[root@cent154 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe742ebc24ef centos01:v0.1 "/bin/bash" About a minute ago Up About a minute centos02
467e3d5acf71 centos:latest "/bin/bash" 9 minutes ago Up 9 minutes centos01
기본 이미지가 아닌 새롭게 생성된 이미지를 기반으로 다른 이미지를 생성한다.
[root@cent154 ~]# docker commit -a “by whchoi" fe742ebc24ef centos02:v0.1
sha256:b887edfb932b5a7c82f112979af2acfc457c2cce2dedf411486fe9375f63b3aa
이제 생성된 이미지의 내역을 살펴보자.
신규 생성된 이미지는 이미 생생되었던 이미지의 구조를 그대로 승계하므로, CentOS 기본이미지 - 신규생성 이미지(CentOS01 이미지) - 신규생성 이미지 (CentOS02 이미지)로 연계가 되어 있는 것을 확인할 수 있다.
[root@cent154 ~]# docker history centos02:v0.1
IMAGE CREATED CREATED BY SIZE COMMENT
b887edfb932b 2 minutes ago /bin/bash 33.6MB
152667653082 8 minutes ago /bin/bash 40.8MB
0f3e07c0138f 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:d6fdacc1972df524a… 220MB
CentOS 기본이미지 - 신규생성 이미지(CentOS01 이미지) - 신규생성 이미지 (CentOS02 이미지) 로 연계된 이미지 구조에서 만약 CentOS01 이미지를 삭제하면 에러가 발생한다.
이미 다른 컨테이너들이 참조하기 때문에 삭제가 불가능하기 때문이다.
[root@cent154 ~]# docker rmi centos01:v0.1
Error response from daemon: conflict: unable to remove repository reference "centos01:v0.1" (must force) - container fe742ebc24ef is using its referenced image 152667653082
[root@cent154 ~]# docker rmi centos02:v0.1
[root@cent154 ~]# docker rmi centos01:v0.1
위의 내용들을 전체적으로 도식화 하면 아래와 같은 플로우로 이해할 수 있다.
docker 이미지 추출/로딩/배포
도커의 이미지는 “Save” 명령을 통해 압축하여 별도로 저장할 수 있다.
[root@cent154 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cisko_centos v0.1 8f77c6412d84 7 minutes ago 293MB
centos latest 0f3e07c0138f 3 weeks ago 220MB
[root@cent154 ~]# docker save -o whchoi.tar cisko_centos:v0.1
[root@cent154 ~]# ls -al
-rw-------. 1 root root 302731264 Oct 25 21:49 whchoi.tar
기존에 있던 이미지를 삭제하고 추출한 이미지를 로딩한다.
[root@cent154 ~]# docker rmi cisko_centos:v0.1
[root@cent154 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0f3e07c0138f 3 weeks ago 220MB
[root@cent154 ~]# docker load -i whchoi.tar
[root@cent154 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cisko_centos v0.1 8f77c6412d84 20 minutes ago 293MB
centos latest 0f3e07c0138f 3 weeks ago 220MB
추출한 이미지를 기반으로 컨테이너를 생성하여 정상적으로 동작하는지 확인해 본다.
[root@cent154 ~]# docker run -it --name whchoi-os cisko_centos
Unable to find image 'cisko_centos:latest' locally
docker: Error response from daemon: pull access denied for cisko_centos, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
[root@cent154 ~]# docker run -it --name whchoi-os cisko_centos:v0.1
Docker 이미지는 로컬에 저장할 수도 있지만 , Docker Hub Repository에 넣어두고 활용할 수도 있다.
아래는 docker Hub에 미리 계정을 만들어 두고, 해당 계정에 docker image를 넣는 방법을 예제로 만든 것이다.
우선 새로운 Repo를 만들거나, 또는 직접 업로딩 할 수도 있다.
직접 업로딩 하는 방법은 아래와 같다.
우선 docker machine/host에서 docker hub 계정에 로그인 한다.
[root@cent154 ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: whchoi98
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
현재 도커 이미지는 2개가 있는 것을 아래에서 확인 할 수 있다.
[root@cent154 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cisko_centos v0.1 8f77c6412d84 20 hours ago 293MB
centos latest 0f3e07c0138f 3 weeks ago 220MB
기존 있는 이미지에 새로운 Tag를 부여해서 , Docker Hub에 로딩 시킬 준비를 한다.
이미지를 확인해 보면 기존 로컬에 만들어진 Docker Image를 복제해서 Docker Hub 계정에 로그인 할 이미지를 생성하였다.
[root@cent154 ~]# docker tag cisko_centos:v0.1 whchoi98/cisko_centos:v0.1
[root@cent154 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cisko_centos v0.1 8f77c6412d84 20 hours ago 293MB
whchoi98/cisko_centos v0.1 8f77c6412d84 20 hours ago 293MB
centos latest 0f3e07c0138f 3 weeks ago 220MB
만들어진 도커 이미지를 Docker Hub에 업로드 한다.
[root@cent154 ~]# docker push whchoi98/cisko_centos
The push refers to repository [docker.io/whchoi98/cisko_centos]
15947f00fe32: Pushed
9e607bb861a7: Mounted from library/centos
v0.1: digest: sha256:1d569a806e2ae7d706a6d6ebbe5a4a6255bd32bed617493e412f74a59b7e64bd size: 741
Docker Hub에 로그인해서 자신의 계정에서 확인해 보면 정상적으로 Repo에 등록되어 있는 것을 확인 할 수 있다.
해당 이미지는 다른 도커 호스트/머신에서 실행 시킬 수 있다.
아래는 CentOS 호스트에서 만들어서 업로드한 도커 허브 이미지를 맥북에서 실행시킨 내용이다.
docker pull whchoi98/cisko_centos:v0.1
❯ docker pull whchoi98/cisko_centos:v0.1
v0.1: Pulling from whchoi98/cisko_centos
729ec3a6ada3: Already exists
af0fff5f8285: Pull complete
Digest: sha256:1d569a806e2ae7d706a6d6ebbe5a4a6255bd32bed617493e412f74a59b7e64bd
Status: Downloaded newer image for whchoi98/cisko_centos:v0.1
docker.io/whchoi98/cisko_centos:v0.1
docker images | grep "cisko"
whchoi98/cisko_centos v0.1 8f77c6412d84 21 hours ago 293MB
도커허브에는 official 하게 안전한 이미지들이 상당히 많이 존재하므로, offical한 이미지 외에 다른 파일을 받는 것은 보안성 그렇게 좋은 것은 아니다.
다음 포스팅에서는 이러한 위험을 제거하기 위해 , Dockerfile을 이용해서 Docker Image를 만드는 방법을 알아보겠다.
'가상화 > Docker_K8s' 카테고리의 다른 글
Docker 강좌 - 4. 도커이미지2 - Dockerfile 기반 이미지 만들기 (0) | 2019.10.29 |
---|---|
Docker 강좌 - 3. Docker 네트워크 2 (macvlan) (1) | 2019.07.22 |
Docker 강좌 - 3. Docker 네트워크 1 - 소개 및 Bridge (1) | 2019.07.02 |
Docker 명령어 cheatsheet (0) | 2019.06.25 |
Docker 강좌 - 2. Docker 기본동작 (1) | 2019.06.24 |
공지사항