이미지(Image) 란?
이미지는 컨테이너(Container)를 실행하기 위한 모든 파일, 바이너리, 라이브러리를 포함하는 표준화된 패키지이다. 가상 머신을 생성할 때 사용하는 iso 파일과 비슷하다고 이해하면 된다.
가장 중요한 것은 “읽기 전용”으로 사용된다는 것이다. 컨테이너를 실행시켜 아무리 파일을 추가, 삭제 하더라도 이미지에는 아무런 영향을 끼치지 않는다.
이미지를 이해할 때 이 두가지 원칙만 기억하면 된다.
- 이미지는 Immutable이다. 앞서 설명했듯이 이미지는 한번 생성 되면 수정할 수 없다. 새로운 이미지를 만들던지 이미지 위에 변경을 추가 하는 방법 밖에 없다.
- 이미지는 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
'Docker' 카테고리의 다른 글
[Docker] 도커(docker) 시작하기 (3) - 레지스트리(Registry) (0) | 2024.07.09 |
---|---|
[Docker] 도커(docker) 시작하기 (1) - 컨테이너(container) (1) | 2024.07.04 |
[Docker] mac에 docker 설치 (feat. docker-compose) (0) | 2024.06.26 |