navis

Docker 이미지관리 본문

docker

Docker 이미지관리

menstua 2024. 7. 4. 12:58
728x90

 docker 컨테이너 서비스를 위한 image

      docker image는 Container runtime에 필요한 바이너리, 라이브러리 및 설정 값 등을 포함하고, 변경되는 상태 값을 보유하지 않고(stateless) 변하지 않는다. (Immutable, RO)
     일반적인 컨테이너 애플리케이션 서비스 개발 과정 이해를 통해 image에 대해 이해해 보자.

 

docker image 관련 명령어 workflow

 

 

이미지 내려 받기

    Docker는 hub.docker.com(docker.io)으로 부터 이미지를 제공 받거나 제공한다.
    또는, 기업의 인프라에 개별적인 Private registry 서버를 두고, 이곳에 이미지를 pull/push 하기도 한다.

docker [image] pull [options] name:[tag]
# 기본적으로 docker.io가 default registry로 등록되어 있다.
~$ docker pull debian[:latest]
~$ docker pull library/debian:10
~$ docker pull docker.io/library/debian:10
~$ docker pull index/docker.io/library/debian:10
# 만일, private registry 나 클라우드의 저장소(ECR, GCR 등)의 이미지를 받는다면,
~$ docker pull 192.168.56.101:5000/debian:10
~$ docker pull gcr.io/google-samples/hello-app:1.0

 

 

이미지 구조 확인

    docker image inspect: 생성된 image의 내부 구조 정보를 JSON 형태로 제공.

docker image inspect httpd:2.4

 

    docker image inspect: 생성된 image의 내부구조 정보를 JSON 형태로 제공.

~$ docker image inspect --format="{{.Os}}" httpd:2.4
linux
~$ docker image inspect --format="{{.RepoTags}}" httpd:2.4
[httpd:2.4]
~$ docker image inspect --format="{{.ContainerConfig.ExposedPorts}}" httpd:2.4
map[80/tcp:{}]
~$ docker image inspect --format="{{.RepoTags}} {{.Os}}" httpd:2.4
[httpd:2.4] linux

 

    docker history: docker image는 Dockerfile을 통해 build 됨. history는 이 정보를 제공.

kevin@hostos1:~$ docker image history httpd:2.4
IMAGE CREATED CREATED BY SIZE COMMENT
d1676199e605 8 days ago /bin/sh -c #(nop) CMD ["httpd-foreground"] 0B
<missing> 8 days ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 8 days ago /bin/sh -c #(nop) COPY file:c432ff61c4993ecd… 138B
<missing> 8 days ago /bin/sh -c #(nop) STOPSIGNAL SIGWINCH 0B
<missing> 8 days ago /bin/sh -c set -eux; savedAptMark="$(apt-m… 59.9MB
<missing> 8 days ago /bin/sh -c #(nop) ENV HTTPD_PATCHES=rewrite… 0B
<missing> 8 days ago /bin/sh -c #(nop) ENV HTTPD_SHA256=dbccb84a… 0B
<missing> 8 days ago /bin/sh -c #(nop) ENV HTTPD_VERSION=2.4.57 0B
<missing> 8 days ago /bin/sh -c set -eux; apt-get update; apt-g… 4.76MB
<missing> 8 days ago /bin/sh -c #(nop) WORKDIR /usr/local/apache2 0B
<missing> 8 days ago /bin/sh -c mkdir -p "$HTTPD_PREFIX" && chow… 0B
<missing> 8 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/apach… 0B
<missing> 8 days ago /bin/sh -c #(nop) ENV HTTPD_PREFIX=/usr/loc… 0B
<missing> 8 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 8 days ago /bin/sh -c #(nop) ADD file:88252a7f118b4d6f5… 80.5MB

 

 

     이미지를 내려 받는 과정에서는 아래와 같이 이미지가 계층(layer) 구조라는 것을 보여 준다.

kevin@hostos1:~$ docker pull httpd:2.4
2.4: Pulling from library/httpd
f03b40093957: Pull complete
abaf8619eb1c: Pull complete
e3fe37d0c2ad: Pull complete
52a1e37affe5: Pull complete
49d8a68fd903: Pull complete
Digest: sha256:1bb3f7669a85713906e695599d29c58ab40d4e6409907946609d92a428e95b49
Status: Downloaded newer image for httpd:2.4
docker.io/library/httpd:2.4
[example]
f03b40093957: Pull complete … layer 5 → 웹소스
abaf8619eb1c: Pull complete … layer 4 → httpd 서버
e3fe37d0c2ad: Pull complete … layer 3 → OS 계층
52a1e37affe5: Pull complete … layer 2 → OS 계층
49d8a68fd903: Pull complete … layer 1 → OS 계층

 

      download된 layer들을 distribution ID를 부여 받고 docker 전용 경로에 저정된다.

kevin@hostos1:~$ sudo su –
Password:
root@hostos1:~# cd /var/lib/docker/image/overlay2/distribution/diffid-by-digest/sha256/
# docker pull layer . 3 layer .
root@hostos1:/var/lib/docker/image/overlay2/distribution/diffid-by-digest/sha256# ls 49d*
49d8a68fd903c4c5786f34b8510d9cc221f6229ba9921f526afa7fbeb9cf91c5
root@hostos1:/var/lib/docker/image/overlay2/distribution/diffid-by-digest/sha256# ls 52a*
52a1e37affe549886bc5f97b08a3fe1b19d41da3d3e3284ebda4823b7058d194
root@hostos1:/var/lib/docker/image/overlay2/distribution/diffid-by-digest/sha256# ls e3*
e3fe37d0c2ad420bd2a30bb0ac9f84b92eada7c790a914db00a4d9c76774008f


      아래 그림과 같은 형태로 이미지는 불변 즉, read only 형태로 만들어지고
      docker run 명령으로 컨테이너를 생성하면 [Container layer]가 read write로 추가된다.
      하나의 이미지는 원하는 만큼의 컨테이너를 생성할 수 있다.

'docker' 카테고리의 다른 글

Docker networke 관리  (0) 2024.07.11
Docker 컨테이너 관리  (0) 2024.07.09
Docker Update  (0) 2024.07.02
Docker 환경 구성 단계  (0) 2024.06.30
컨테이너 가상화 이해  (0) 2024.06.30