이미지란 무엇인가요?

이미지란 무엇인가요?

컨테이너 이미지는 컨테이너를 실행하는 데 필요한 모든 파일, 바이너리, 라이브러리, 구성을 포함하는 표준화된 패키지예요. 이미지는 불변이며 레이어로 구성된다는 두 가지 중요한 원칙이 있어요. 이 가이드에서 이미지의 개념과 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
    
    다음과 같은 출력이 보여요.
    NAME                       DESCRIPTION                                     STARS     OFFICIAL
    docker/welcome-to-docker   Docker image for new users getting started w…   20
    
    이 출력은 Docker Hub에서 사용 가능한 관련 이미지에 대한 정보를 보여줘요.
  • 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
    
    다음과 같은 출력이 보여요.
    REPOSITORY                 TAG       IMAGE ID       CREATED        SIZE
    docker/welcome-to-docker   latest    eedaff45e3c7   4 months ago   29.7MB
    
    이 명령은 시스템에서 현재 사용 가능한 Docker 이미지 목록을 보여줘요. docker/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 이미지의 레이어에 대해서도 배웠어요.

추가 자료

이미지 탐색, 찾기, 빌드에 대해 더 알아보는 데 다음 자료가 도움이 될 거예요.

다음 단계

이미지의 기본을 배웠으니, 이제 레지스트리를 통해 이미지를 배포하는 방법을 배울 차례예요. 레지스트리란 무엇인가요?

더 알아보기 (Learn more)