Docker

[Docker] 도커(docker) 시작하기 (2) - 이미지(image)

부리부리대마왕 2024. 7. 9. 01:01

이미지(Image) 란?

도커 이미지 레이어

이미지는 컨테이너(Container)를 실행하기 위한 모든 파일, 바이너리, 라이브러리를 포함하는 표준화된 패키지이다. 가상 머신을 생성할 때 사용하는 iso 파일과 비슷하다고 이해하면 된다.

가장 중요한 것은 “읽기 전용”으로 사용된다는 것이다. 컨테이너를 실행시켜 아무리 파일을 추가, 삭제 하더라도 이미지에는 아무런 영향을 끼치지 않는다.

이미지를 이해할 때 이 두가지 원칙만 기억하면 된다.

  1. 이미지는 Immutable이다. 앞서 설명했듯이 이미지는 한번 생성 되면 수정할 수 없다. 새로운 이미지를 만들던지 이미지 위에 변경을 추가 하는 방법 밖에 없다.
  2. 이미지는 Layer 로 구성되어있다. 각 레이어는 파일 추가, 제거, 수정하는 파일 시스템 변경 사항(파일 시스템 스냅샷)을 나타낸다.

도커 이미지 실습

도커 이미지는 다음과 같은 네이밍 규칙을 사용한다.

  • [저장소 이름]/[이미지 이름]:[이미지 태그]

공식 이미지의 경우 저장소 이름을 생략하기도 한다.

  • ubuntu:20.04

깃허브와 같이 도커 이미지를 따로 저장할 수 있도록 도커 허브 라는 공개 레지스트리를 제공한다.

Docker Hub Container Image Library | App Containerization

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

 

이미지 검색: docker search

docker search 을 사용해 도커 허브에 있는 이미지를 검색할 수 있다.

docker search docker/welcome-to-docker
NAME                       DESCRIPTION                                     STARS     OFFICIAL
docker/welcome-to-docker   Docker image for new users getting started w…   30

이미지 다운로드: docker pull

docker pull로 레지스트리에 존재하는 이미지를 로컬에 내려받을 수 있다. 따로 태그를 명시하지 않으면 latest 가 기본으로 설정된다.

각 라인(hash값)이 의미하는 것은 이미지 레이어이고 파일 시스템 변화를 의미한다.

docker pull docker/welcome-to-docker
Using default tag: latest
latest: Pulling from docker/welcome-to-docker
579b34f0a95b: Pull complete
d11a451e6399: Pull complete
54b19e12c655: Pull complete
1c2214f9937c: Pull complete
1fb28e078240: Pull complete
94be7e780731: Pull complete
b42a2f288f4d: Pull complete
89578ce72c35: Pull complete
Digest: sha256:eedaff45e3c78538087bdd9dc7afafac7e110061bbdd836af4104b10f10ab693
Status: Downloaded newer image for docker/welcome-to-docker:latest
docker.io/docker/welcome-to-docker:latest

What's next:
    View a summary of image vulnerabilities and recommendations → docker scout quickview docker/welcome-to-docker
💡 docker run 명령어는 현재 로컬에 이미지가 없으면 자동으로 docker pull을 실행하여 레지스트리에서 이미지를 다운받는다.

이미지 리스트: docker images

docker images 는 현재 로컬에 존재하는 이미지들을 확인할 수 있다.

현재 ubuntu:20.04, docker/welcome-to-docker:latest가 로컬에 있다는 걸 확인할 수 있다.

docker images
REPOSITORY                 TAG       IMAGE ID       CREATED        SIZE
ubuntu                     20.04     583f1722e16e   4 weeks ago    65.7MB
docker/welcome-to-docker   latest    648f93a1ba7d   8 months ago   19MB

이미지 삭제: docker rmi

docker rmi <이미지 이름> 으로 로컬에 존재하는 이미지를 삭제할 수 있다. 이 역시 레이어 단위로 삭제가 이루어진다.

docker rmi docker/welcome-to-docker
Untagged: docker/welcome-to-docker:latest
Untagged: docker/welcome-to-docker@sha256:eedaff45e3c78538087bdd9dc7afafac7e110061bbdd836af4104b10f10ab693
Deleted: sha256:648f93a1ba7dac21d08f03220cc4489f29119077437f6b38d530fe7d813dea1a
Deleted: sha256:ecdfaddec366e752402771ae9708c8e4b7bb622fd4f00f9a23fca8f825a6d001
Deleted: sha256:60b5e071c9676e47bd33a3777933dbc7b4d9afd3f857dc0ebb04cf45a54b5b4a
Deleted: sha256:f739585f44d44cf4489600534696469d82b5632a7f56d155e656d1e286b83182
Deleted: sha256:81e663bfb74e79c159985752b9998f9ba57cd1d773e91bab4bab6fabdc0c3d8b
Deleted: sha256:515ffe63de78d89b115be1ce46c17dba8ced9309a01c8491448e10f2b5b04228
Deleted: sha256:7ad2adc5fa3119dfe1af5e249bda34bafdb7f706fce8f1531d87db091ba89f1a
Deleted: sha256:e750e04b460babeb964a56af6aabe9123e51ebb832d66c6fc40c381e2e41c6cf
Deleted: sha256:5f4d9fc4d98de91820d2a9c81e501c8cc6429bc8758b43fcb2cd50f4cab9a324

이미지 히스토리: docker image history

docker image history 명령을 이용해 모든 레어와 크기, 그리고 레이어를 만들 때 사용된 명령어를 보여준다.

docker image history docker/welcome-to-docker
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
648f93a1ba7d   8 months ago   COPY /app/build /usr/share/nginx/html # buil…   1.6MB     buildkit.dockerfile.v0
<missing>      8 months ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
<missing>      8 months ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B
<missing>      8 months ago   /bin/sh -c #(nop)  EXPOSE 80                    0B
<missing>      8 months ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B
<missing>      8 months ago   /bin/sh -c #(nop) COPY file:9e3b2b63db9f8fc7…   4.62kB
<missing>      8 months ago   /bin/sh -c #(nop) COPY file:57846632accc8975…   3.02kB
<missing>      8 months ago   /bin/sh -c #(nop) COPY file:3b1b9915b7dd898a…   298B
<missing>      8 months ago   /bin/sh -c #(nop) COPY file:caec368f5a54f70a…   2.12kB
<missing>      8 months ago   /bin/sh -c #(nop) COPY file:01e75c6dd0ce317d…   1.62kB
<missing>      8 months ago   /bin/sh -c set -x     && addgroup -g 101 -S …   9.7MB
<missing>      8 months ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1            0B
<missing>      8 months ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.25.3     0B
<missing>      8 months ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
<missing>      9 months ago   /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>      9 months ago   /bin/sh -c #(nop) ADD file:ff3112828967e8004…   7.66MB

References