이미지란 무엇인가요?
이미지란 무엇인가요?
컨테이너 이미지는 컨테이너를 실행하는 데 필요한 모든 파일, 바이너리, 라이브러리, 구성을 포함하는 표준화된 패키지예요. 이미지는 불변이며 레이어로 구성된다는 두 가지 중요한 원칙이 있어요. 이 가이드에서 이미지의 개념과 Docker Desktop GUI·CLI로 이미지를 검색하고 내려받는 방법을 배워요.
출처: 문서
본문
설명
컨테이너는 격리된 프로세스라면, 그 파일과 구성은 어디서 얻을까요? 그 환경들은 어떻게 공유할까요?
바로 여기서 컨테이너 이미지가 등장해요. 컨테이너 이미지는 컨테이너를 실행하는 데 필요한 모든 파일, 바이너리, 라이브러리, 구성을 포함하는 표준화된 패키지예요.
PostgreSQL 이미지라면 데이터베이스 바이너리, 구성 파일, 기타 의존성을 패키징할 거예요. Python 웹 앱이라면 Python 런타임, 앱 코드, 모든 의존성을 포함할 거예요.
이미지에는 두 가지 중요한 원칙이 있어요.
- 이미지는 불변(immutable)이에요. 이미지가 한 번 만들어지면 수정할 수 없어요. 새 이미지를 만들거나 그 위에 변경 사항을 추가할 수만 있어요.
- 컨테이너 이미지는 레이어로 구성돼요. 각 레이어는 파일을 추가, 제거, 수정하는 일련의 파일시스템 변경을 나타내요.
이 두 가지 원칙 덕분에 기존 이미지를 확장하거나 추가할 수 있어요. 예를 들어 Python 앱을 빌드한다면 Python 이미지에서 시작해 앱의 의존성을 설치하고 코드를 추가하는 레이어를 더할 수 있어요. 이렇게 하면 Python 자체보다 여러분의 앱에 집중할 수 있어요.
이미지 찾기
Docker Hub는 이미지를 저장하고 배포하는 기본적인 글로벌 마켓플레이스예요. 개발자들이 만든 10만 개 이상의 이미지가 있어 로컬에서 실행할 수 있어요. Docker Hub에서 이미지를 검색하고 Docker Desktop에서 바로 실행할 수 있어요.
Docker Hub는 Docker가 지원하고 보증하는 이미지들인 Docker Trusted Content를 다양하게 제공해요. 이들은 완전히 관리되는 서비스를 제공하거나 여러분의 이미지를 위한 훌륭한 시작점이 돼요. 다음을 포함해요.
- Docker Official Images — 큐레이션된 Docker 저장소 세트로, 대부분의 사용자의 시작점 역할을 하며 Docker Hub에서 가장 안전한 이미지 중 일부예요.
- Docker Hardened Images — CVE가 거의 없는 최소한의 안전한 프로덕션 준비 이미지로, 공격 표면을 줄이고 규정 준수를 단순화하도록 설계됐어요. Apache 2.0 하에서 무료·오픈소스예요.
- Docker Verified Publishers — Docker가 검증한 상업적 퍼블리셔의 고품질 이미지예요.
- Docker-Sponsored Open Source — Docker의 오픈소스 프로그램을 통해 Docker가 후원하는 오픈소스 프로젝트가 게시하고 유지 관리하는 이미지예요.
예를 들어 Redis와 Memcached는 바로 사용할 수 있는 인기 있는 Docker Official Images 몇 가지예요. 이 이미지들을 다운로드하면 몇 초 만에 서비스를 가동할 수 있어요. 또한 Node.js Docker 이미지 같은 베이스 이미지도 있어서, 이를 시작점으로 사용하고 여러분의 파일과 구성을 추가할 수 있어요. 강화된 보안이 필요한 프로덕션 워크로드에는 Docker Hardened Images가 Node.js, Python, Go 같은 인기 이미지의 최소 변형을 제공해요.
직접 해보기
이 실습에서는 Docker Desktop GUI로 컨테이너 이미지를 검색하고 풀(pull)하는 방법을 배워요.
이미지 검색 및 다운로드
- Docker Desktop 대시보드를 열고 왼쪽 내비게이션 메뉴에서 Images 뷰를 선택해요.
- Search images to run 버튼을 선택해요. 보이지 않으면 화면 상단의 전역 검색 바를 선택해요.
- Search 필드에 "welcome-to-docker"를 입력해요. 검색이 완료되면
docker/welcome-to-docker이미지를 선택해요. - Pull을 선택해 이미지를 다운로드해요.
이미지에 대해 알아보기
이미지를 다운로드하면 GUI나 CLI를 통해 이미지에 대한 꽤 많은 세부 정보를 알 수 있어요.
- Docker Desktop 대시보드에서 Images 뷰를 선택해요.
- docker/welcome-to-docker 이미지를 선택해 이미지에 대한 세부 정보를 열어요.
- 이미지 세부 정보 페이지는 이미지의 레이어, 이미지에 설치된 패키지와 라이브러리, 발견된 취약점에 대한 정보를 보여줘요.
CLI로 Docker 이미지를 검색하고 풀하여 레이어를 보려면 다음 지침을 따라요.
이미지 검색 및 다운로드
- 터미널을 열고
docker search명령으로 이미지를 검색해요.
다음과 같은 출력이 보여요.docker search docker/welcome-to-docker
이 출력은 Docker Hub에서 사용 가능한 관련 이미지에 대한 정보를 보여줘요.NAME DESCRIPTION STARS OFFICIAL docker/welcome-to-docker Docker image for new users getting started w… 20 docker pull명령으로 이미지를 풀해요.
다음과 같은 출력이 보여요.docker pull docker/welcome-to-docker
각 줄은 이미지의 서로 다른 다운로드된 레이어를 나타내요. 각 레이어는 파일시스템 변경 세트이며 이미지의 기능을 제공한다는 점을 기억하세요.Using default tag: latest latest: Pulling from docker/welcome-to-docker 579b34f0a95b: Download complete d11a451e6399: Download complete 1c2214f9937c: Download complete b42a2f288f4d: Download complete 54b19e12c655: Download complete 1fb28e078240: Download complete 94be7e780731: Download complete 89578ce72c35: Download complete Digest: sha256:eedaff45e3c78538087bdd9dc7afafac7e110061bbdd836af4104b10f10ab693 Status: Downloaded newer image for docker/welcome-to-docker:latest docker.io/docker/welcome-to-docker:latest
이미지에 대해 알아보기
docker image ls명령으로 다운로드한 이미지를 나열해요.
다음과 같은 출력이 보여요.docker image ls
이 명령은 시스템에서 현재 사용 가능한 Docker 이미지 목록을 보여줘요.REPOSITORY TAG IMAGE ID CREATED SIZE docker/welcome-to-docker latest eedaff45e3c7 4 months ago 29.7MBdocker/welcome-to-docker의 총 크기는 약 29.7MB예요.이미지 크기 여기 표시된 이미지 크기는 레이어의 다운로드 크기가 아니라 이미지의 압축되지 않은 크기를 나타내요.
docker image history명령으로 이미지의 레이어를 나열해요.
다음과 같은 출력이 보여요.docker image history docker/welcome-to-docker
이 출력은 모든 레이어, 그 크기, 레이어를 만드는 데 사용된 명령을 보여줘요.IMAGE CREATED CREATED BY SIZE COMMENT 648f93a1ba7d 4 months ago COPY /app/build /usr/share/nginx/html # buil… 1.6MB buildkit.dockerfile.v0 5 months ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B 5 months ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B 5 months ago /bin/sh -c #(nop) EXPOSE 80 0B 5 months ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B 5 months ago /bin/sh -c #(nop) COPY file:9e3b2b63db9f8fc7… 4.62kB 5 months ago /bin/sh -c #(nop) COPY file:57846632accc8975… 3.02kB 5 months ago /bin/sh -c #(nop) COPY file:3b1b9915b7dd898a… 298B 5 months ago /bin/sh -c #(nop) COPY file:caec368f5a54f70a… 2.12kB 5 months ago /bin/sh -c #(nop) COPY file:01e75c6dd0ce317d… 1.62kB 5 months ago /bin/sh -c set -x && addgroup -g 101 -S … 9.7MB 5 months ago /bin/sh -c #(nop) ENV PKG_RELEASE=1 0B 5 months ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.25.3 0B 5 months ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B 5 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B 5 months ago /bin/sh -c #(nop) ADD file:ff3112828967e8004… 7.66MB전체 명령 보기 명령에
--no-trunc플래그를 추가하면 전체 명령을 볼 수 있어요. 출력이 테이블 형식이라 긴 명령은 출력을 탐색하기 매우 어렵게 만든다는 점에 유의하세요.
이 실습에서 Docker 이미지를 검색하고 풀했어요. Docker 이미지를 풀하는 것 외에도 Docker 이미지의 레이어에 대해서도 배웠어요.
추가 자료
이미지 탐색, 찾기, 빌드에 대해 더 알아보는 데 다음 자료가 도움이 될 거예요.
다음 단계
이미지의 기본을 배웠으니, 이제 레지스트리를 통해 이미지를 배포하는 방법을 배울 차례예요. 레지스트리란 무엇인가요?