모든 컨테이너는 이미지를 기반으로 생성됩니다.
레드햇 기반 OS에서 yum install을 실행하면 yum repository 에서 패키지를 내려받듯이 도커는 도커허브(Docker Hub)라는 중앙 이미지 저장소에서 이미지를 내려받습니다.
도커 허브는 도커의 공식적인 이미지저장소로서 도커 계정을 가지고 있다면 누구든지 이미지를 올리고 내려받을 수 있기 때문에 다른 사람들에게 이미지를 쉽게 공유할 수 있습니다.
대부분의 이미지는 도커 허브에서 공식적으로 제공하거나 사용자들이 미리 올려놓은 경우가 대부분이라서 애플리케이션 이미지를 직접 만들지 않아도 손쉽게 사용할 수 있다는 장점이 있습니다.
하지만 누구든지 올려놓을 수 있기 때문에 공식라벨(Official)이 없는 이미지는 제대로 동작하지 않을 수 있습니다.
도커허브에 어떤 이미지가 있는지 확인하기 위해 도커 허브 사이트를 직접 접속해서 찾을수도 있지만 도커엔진에서 docker search 명령어를 사용해서 찾을수도 있습니다.
[root@localhost /]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6564 [OK]
ansible/centos7-ansible Ansible on Centos7 134 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 128 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 118 [OK]
centos/systemd systemd enabled base container. 98 [OK]
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 58 [OK]
tutum/centos Simple CentOS docker image with SSH access 48
kinogmt/centos-ssh CentOS with SSH 29 [OK]
pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 13
guyton/centos6 From official centos6 container with full up… 10 [OK]
centos/tools Docker image that has systems administration… 7 [OK]
drecom/centos-ruby centos ruby 6 [OK]
pivotaldata/centos Base centos, freshened up a little with a Do… 5
pivotaldata/centos-mingw Using the mingw toolchain to cross-compile t… 3
mamohr/centos-java Oracle Java 8 Docker image based on Centos 7 3 [OK]
pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated wi… 3
darksheer/centos Base Centos Image -- Updated hourly 3 [OK]
dokken/centos-7 CentOS 7 image for kitchen-dokken 2
amd64/centos The official build of CentOS. 2
indigo/centos-maven Vanilla CentOS 7 with Oracle Java Developmen… 2 [OK]
pivotaldata/centos6.8-dev CentosOS 6.8 image for GPDB development 1
blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK]
mcnaughton/centos-base centos base image 1 [OK]
smartentry/centos centos with smartentry 0 [OK]
pivotaldata/centos7-dev CentosOS 7 image for GPDB development 0
STARS는 도커 사용자로부터 즐겨찾기 된 횟수를 나타내며 OFFICIAL [OK} 가 도커의 공식적인 이미지입니다.
1. 도커 이미지 생성
[root@localhost /]# docker run -ti --name test1 ubuntu:18.04
root@1752d3851e14:/# echo test1 >> test
[root@localhost /]# docker commit -a "sotest" -m "so test" test1 test1:test
sha256:183d606c3ca38b9ee9bf7fadf184924aa0907a1999aa5f9773586cb56cf9fa36
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test1 test 183d606c3ca3 37 seconds ago 63.1MB
우분투 18.04라는 이미지를 통해 test1 이라는 컨테이너를 만들었고 test1이라는 내용의 test 파일을 하나 생성했습니다.
이후 ctrl+P,Q로 호스트로 빠져나와 author=sotest 이며 이미지의 이름은 test1 이고 태그는 test로 설정하여 이미지를 생성했습니다.
2. 이미지 구조 이해
[root@localhost /]# docker inspect ubuntu:18.04
...
"Layers": [
"sha256:50858308da3d192ec20027838c7aaf983333731dc2dcc0cd03c4522495a4cee8",
"sha256:c7bb31fc0e0892ba47b0059aab580a5c7575289320d47890fd7110e82e31fd58",
"sha256:5f08512fd434ebecfa88e2e5321503762258950217478d5ba51b7a3876a036b7",
]
...
[root@localhost /]# docker inspect test1:test
...
"Layers": [
"sha256:50858308da3d192ec20027838c7aaf983333731dc2dcc0cd03c4522495a4cee8",
"sha256:c7bb31fc0e0892ba47b0059aab580a5c7575289320d47890fd7110e82e31fd58",
"sha256:5f08512fd434ebecfa88e2e5321503762258950217478d5ba51b7a3876a036b7",
"sha256:a815994f4c4ff10046e302c0a155fe464722975b2e0d4381f0b7f05845098f09"
]
...
Layer 부분의 16진수 해시값을 보면 알 수 있습니다.
기존 ubuntu 이미지에서 echo test1 >> test 명령을 통해 생성된 파일이 된 상태로 이미지를 만들었었습니다.
그럼 기존 ubuntu 이미지의 해시값 + 생성된 test 파일의 해시값이 더해진 Layer가 포함되어 저장됩니다.
3. 이미지 삭제
[root@localhost ~]# docker rmi mongo
Untagged: mongo:latest
Untagged: mongo@sha256:8b35c0a75c2dbf23110ed2485feca567ec9ab743feee7a0d7a148f806daf5e86
Deleted: sha256:07630e791de3ceb87d39543799438e118753246d19dcfd6529bd4d27ff1b83bd
Deleted: sha256:4a66f19e9d76939e792729b76a29d272779492806307f81e7a000815206fdcec
Deleted: sha256:13dcbb5d78f44fd2197f2107de111604c96602f238fc6c9b106abc1e1586073d
Deleted: sha256:6a9ec91fc2a1e84877840a47a4a76e25be748cca6f828d0a4f33db1cd0b3058e
Deleted: sha256:f633e79fbfe93d8750cb22cfa13708ac74838113bff5b054ea8a788f1ef522cd
Deleted: sha256:f7113b27f3a2d69a87eee7cf778c813dfd229f8fcd3e9619728226fcf99301b9
Deleted: sha256:8ec2a7a02aaca5c75168922c58048474dbcb62bcba488d46272b8e6b9586f39b
Deleted: sha256:95558bd5c3398f4a0d176bb6e3f580158b7e1d29143951f0eb79582a59a0cfe1
Deleted: sha256:d99356a78f13510683e69464045da3e6a2d9577c57b9d9889aa2e30f81d6c8b6
Deleted: sha256:03f5eb78fae16679a5641a35ead4819f2f719a7f08498ed2906515dda760be15
Deleted: sha256:5683b8d625d1dfa13fd9bf36bd007876a10ba7b9d0159e5b751c2e555056b1a4
Deleted: sha256:e40721a5f7d83ef5475788aa771a9cc75312998fb206ba8c2cf4294f9594f46e
Deleted: sha256:5153e1acaabce0d87adbf4a717bdc5e26cf86d851330830589a6b2bf5ede30ee
위와 같이 docker rmi 명령어를 사용하면 이미지를 삭제할 수 있습니다.
[root@localhost ~]# docker rmi ubuntu:18.04
Error response from daemon: conflict: unable to remove repository reference "ubuntu:18.04" (must force) - container 1752d3851e14 is using its referenced image 81bcf752ac3d
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1752d3851e14 ubuntu:18.04 "/bin/bash" 2 days ago Up 2 days test1
하지만 이미지를 사용중인 컨테이너가 존재할 땐 위와같이 에러를 뿜으며 삭제되지 않습니다.
-f 옵션으로 삭제할 수 있지만 이는 실제 이미지파일이 삭제되는것이 아닌 이미지 이름만 삭제됩니다.
따라서 컨테이너를 삭제한 후 이미지를 삭제해야 정상적으로 삭제됩니다.
4. 이미지 추출
도커 이미지를 별도로 저장하거나 옮기는 등 필요에 따라 이미지를 단일 바이너리 파일로 저장해야 할 경우 docker save 명령어를 사용하면 컨테이너의 커맨드, 이미지이름, 태그 등 이미의 모든 메타데이터를 포함해 하나의 파일로 추출할 수 있습니다.
[root@localhost ~]# docker save -o ubuntu_14_04.tar ubuntu:14.04
[root@localhost ~]# ls -ahl | grep ubuntu
-rw-------. 1 root root 197M 5월 31 15:51 ubuntu_14_04.tar
-o : 추출될 파일명
[root@localhost ~]# docker load -i ubuntu_14_04.tar
Loaded image: ubuntu:14.04
save 명령으로 추출된 이미지는 load 명령어로 이미지 로드 시 이전의 이미지와 완전히 동일한 이미지가 도커엔진에 생성됩니다.
[root@localhost ~]# docker export -o testFS.tar test_container
[root@localhost ~]# ls -ahl | grep testFS
-rw-------. 1 root root 63M 5월 31 17:34 testFS.tar
[root@localhost ~]# docker import testFS.tar myimage:0.0
sha256:9c5817f46d75813121d385a62d1196ebea10a62230a299daf78428c2ab410a3e
[root@localhost ~]# docker images | grep myimage
myimage 0.0 9c5817f46d75 7 seconds ago 63.1MB
test_container 라는 컨테이너의 파일시스템을 testFS.tar 파일로 추출하고 myimage:0.0 이라는 이미지로 저장했습니다.
export 명령은 컨테이너 및 이미지에 대한 설정정보(detached모드, 커맨드 등의 설정)를 저장하지 않습니다.
5. 이미지 배포
save나 export 같은 방식으로 이미지를 추출해서 배포할 수 있지만 파일크기가 크거나 도커엔진의 수가 많다면 파일로 배포하기 어려울 수 있습니다. 또한 레이어 형태를 이용하지 않으므로 비효울적입니다.
이미지를 배포하는 방법
1) 도커 허브 이미지 저장소 사용
2) 도커 사설 레지스트리 사용
사용법은 따로 정리할예정,,
'docker' 카테고리의 다른 글
도커 컨테이너 다루기(8) - 도커파일(Dockerfile)[2] (1) | 2021.06.03 |
---|---|
도커 컨테이너 다루기(8) - 도커파일(Dockerfile)[1] (1) | 2021.06.01 |
도커 컨테이너 다루기(6) - 컨테이너 자원 할당 제한 (1) | 2021.05.29 |
도커 컨테이너 다루기(5) - 컨테이너 로깅 (0) | 2021.05.28 |
도커 컨테이너 다루기(4) - 도커 네트워크 (0) | 2021.05.26 |