모든 컨테이너는 이미지를 기반으로 생성되므로 이미지를 다루는 방법은 도커 관리에서 빼놓을 수 없는 부분이다.
이미지의 이름을 구성하는 저장소, 이미지 이름, 태그를 잘 관리하는 것뿐만 아니라 이미지가 어떻게 생성되고 삭제되는지, 이미지 구조는 어떻게 돼 있는지 등을 아는 것 또한 중요하다.
도커 허브(Docker Hub)
도커 허브(Docker Hub)는 도커가 공식적으로 제공하고 있는 이미지 저장소로서, 도커 계정을 가지고 있다면 누구든지 이미지를 올리고 내려받을 수 있기 때문에 다른 사람들과 이미지를 쉽게 공유할 수 있다.
대부분의 이미지는 도커 허브에서 공식적으로 제공하거나 다른 사람들이 도커 허브에 이미 올려놓은 경우가 대부분이라서 애플리케이션 이미지를 직접 만들지 않아도 손쉽게 사용할 수 있는데, 공식(Official) 라벨이 없는 이미지는 사용법을 찾을 수 없거나 제대로 동작하지 않을수도 있다.
그리고 비공개(Private) 저장소를 이용하려면 비공개 저장소의 수에 따라 요금을 지불해야 한다.
도커 이미지 찾기
도커 허브에서 어떤 이미지가 있는지 확인하기 위해 도커 허브 사이트를 직접 접속해서 찾아볼 수도 있지만 도커 엔진에서 docker search 명령어를 사용할 수도 있다.
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 15390 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 291 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK]
...
출력 결과에서 STARS는 사용자의 즐겨찾기 수를 나타낸다.
docker search 명령어는 도커 허브에서 이미지를 검색하며, 도커 허브 이미지임을 명시하기 위해 docker.io/ubuntu와 같이 docker.io 접두어를 사용할 수도 있다.
도커 이미지 생성
docker search로 검색한 이미지를 pull 명령어로 내려받아 사용할 수도 있지만 특정 개발 환경을 직접 구현한 뒤 이미지를 직접 생성해야할 경우가 있다.
$ docker -i -t --name ubuntu ubuntu:20.04
$ root@e20ab79f07f5:/home# vim test.txt
docker image create test
$ root@e20ab79f07f5:/home# cat test.txt
docker image create test
$ exit
$ docker commit -a "devbeekei" -m "docker image create test" ubuntu ubuntu_test:first
sha256:fdb516e9a622120b47dc0b4ee5e21db43377282500bce8d479e826fde6968322
위 예제는 ubuntu:20.04 컨테이너 안에 파일을 생성하고 ubuntu라는 이름의 컨테이너를 ubuntu_test라는 이미지 이름과 first라는 태그로 이미지를 생성하였다. -a 옵션은 작성자(author)를 뜻하며 -m 옵션은 설명 메세지를 뜻한다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu_test first fdb516e9a622 About a minute ago 181MB
ubuntu 20.04 d5447fc01ae6 2 weeks ago 72.8MB
이미지 구조 이해
이미지를 좀 더 효율적으로 다루기 위해 컨테이너가 어떻게 이미지로 만들어지며, 이미지의 구조는 어떻게 돼 있는지 알 필요가 있다.
$ docker inspect ubuntu:20.04
...
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:0002c93bdb3704dd9e36ce5153ef637f84de253015f3ee330468dccdeacad60b"
]
},
...
$ docker inspect ubuntu_test:first
...
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:0002c93bdb3704dd9e36ce5153ef637f84de253015f3ee330468dccdeacad60b",
"sha256:99a3b06363ed6786e5260c3d865615a8ea3bb24b39f238b241674a0fb8e9270e"
]
},
...
이미지 상세 정보를 확인해보면 Layers 항목에 값이 하나 더 추가되어있는데, 위에서 commit한 내용이 추가된 것이다.
docker history 명령어를 사용해 좀 더 쉽게 확인이 가능하다.
$ docker history ubuntu:20.04
IMAGE CREATED CREATED BY SIZE COMMENT
d5447fc01ae6 2 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:9d282119af0c42bc8… 72.8MB
$ docker history ubuntu_test:first
IMAGE CREATED CREATED BY SIZE COMMENT
fdb516e9a622 34 minutes ago bash 108MB docker image create test
d5447fc01ae6 2 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:9d282119af0c42bc8… 72.8MB
이미지 추출
도커 이미지를 별도로 저장하거나 옭기는 등 필요에 따라 이미지를 단일 바이너리 파일로 저장해야 할 때는 docker save 명령어를 통해 하나의 파일로 추출이 가능하다.
$ docker save -o ubuntu.tar ubuntu:20.04
-o 옵션에는 추출할 파일명을 설정할 수 있다.
추출된 이미지는 load 명령어로 도커에서 다시 로드할 수 있다.
추출된 이미지는 모든 메타데이터를 포함하기 때문에 load 명령어로 이미지를 로드하면 이전의 이미지와 완전히 동일한 이미지가 도커 엔진에 생성된다.
$ docker rmi ubuntu:20.04
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
$ docker load -i ubuntu.tar
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 d5447fc01ae6 2 weeks ago 72.8MB
save, load 명령어와 유사하게 사용할 수 있는 명령어로 export, import가 있는데 export 명령어는 컨테이너의 파일시스템을 tar 파일로 추출하며 컨테이너 및 이미지에 대한 정보를 저장하지 않는다.
'Docker & Kubernetes' 카테고리의 다른 글
도커 사설 레지스트리(Docker Private Registry)에 이미지 배포하기 (0) | 2022.12.29 |
---|---|
도커 허브 저장소(Docker Hub Registry)에 이미지 배포하기 (0) | 2022.12.29 |
도커 컨테이너 자원 할당 제한하기 (0) | 2022.12.27 |
도커 컨테이너 로깅(Docker Container Logging) (0) | 2022.12.27 |
도커 명령어 정리 (0) | 2022.12.27 |