Docker 이미지 검색 방법

DockerBeginner
지금 연습하기

소개

Docker 는 현대 소프트웨어 개발에 필수적인 도구가 되었으며, 개발자가 애플리케이션을 일관되고 안정적인 방식으로 패키징하고 배포할 수 있도록 지원합니다. Docker 이미지는 컨테이너화된 애플리케이션의 구성 요소 역할을 하며, 쉽게 공유하고 배포할 수 있는 사전 구성된 환경을 제공합니다.

이 실습에서는 Docker 명령줄 인터페이스를 사용하여 Docker 이미지를 검색하고, 이러한 이미지를 로컬 머신으로 가져와 해당 이미지를 기반으로 컨테이너를 실행하는 방법을 배우게 됩니다. 이 튜토리얼을 마치면 특정 프로젝트 요구 사항을 충족하는 Docker 이미지를 찾고 사용하는 기술을 갖추게 됩니다.

Docker 설치 확인

Docker 이미지를 검색하기 전에 먼저 Docker 가 시스템에 제대로 설치되어 실행 중인지 확인해 보겠습니다.

Docker 설치 확인

터미널 창을 열고 다음 명령을 실행하여 Docker 가 설치되었는지 확인합니다.

docker --version

다음과 유사한 출력을 볼 수 있습니다.

Docker version 20.10.21, build baeda1f

이는 Docker 가 시스템에 설치되었음을 확인합니다. 설치에 따라 버전 번호가 다를 수 있습니다.

Docker 서비스 상태 확인

다음 명령을 실행하여 Docker 서비스가 제대로 실행 중인지 확인해 보겠습니다.

sudo systemctl status docker

Docker 서비스가 활성 상태로 실행 중임을 나타내는 출력을 볼 수 있습니다.

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since...

어떤 이유로든 Docker 가 실행되지 않는 경우 다음 명령으로 시작할 수 있습니다.

sudo systemctl start docker

Docker 이미지 이해

Docker 이미지는 컨테이너를 생성하기 위한 일련의 지침을 포함하는 읽기 전용 템플릿입니다. 이미지를 애플리케이션과 해당 환경, 종속성 및 구성을 함께 묶은 스냅샷 또는 청사진으로 생각할 수 있습니다.

Docker 이미지는 다음과 같습니다.

  • 레이어 방식 (Layered): 이미지 간에 공유할 수 있는 일련의 레이어를 사용하여 구축됩니다.
  • 읽기 전용 (Read-only): 생성된 후에는 수정할 수 없습니다.
  • 이름 및 태그 (Named and tagged): 이름과 선택적 태그 (예: ubuntu:22.04) 로 식별됩니다.

다음 단계에서는 이러한 이미지를 검색하는 방법을 배우겠습니다.

Docker 이미지 검색

Docker Hub 는 Docker 이미지의 공식 공개 레지스트리입니다. 여기에는 소프트웨어 공급업체에서 유지 관리하는 공식 이미지와 Docker 사용자가 만든 커뮤니티 이미지를 포함하여 수천 개의 이미지가 있습니다.

기본 이미지 검색

Docker 이미지를 검색하려면 검색어 뒤에 docker search 명령을 사용합니다. Ubuntu 이미지를 검색해 보겠습니다.

docker search ubuntu

다음과 유사한 출력을 볼 수 있습니다.

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   14938     [OK]
ubuntu-upstart                   Upstart is an event-based replacement for th…   112       [OK]
rastasheep/ubuntu-sshd           Dockerized SSH service, built on top of offi…   254                  [OK]
...

출력은 다음을 보여줍니다.

  • NAME: 이미지 이름
  • DESCRIPTION: 이미지에 대한 간략한 설명
  • STARS: 이미지를 별표 표시한 사용자 수 (인기도 지표)
  • OFFICIAL: 소프트웨어 공급업체에서 유지 관리하는 공식 이미지를 나타내는 태그
  • AUTOMATED: 자동화된 프로세스에 의해 빌드된 이미지를 나타내는 태그

검색 결과 필터링

--filter 옵션을 사용하여 검색 결과를 필터링할 수 있습니다. 예를 들어, 공식 이미지만 표시하려면 다음을 수행합니다.

docker search --filter=is-official=true ubuntu

별이 100 개 이상인 이미지 (인기 이미지) 를 찾으려면 다음을 수행합니다.

docker search --filter=stars=100 ubuntu

여러 필터를 결합할 수도 있습니다.

docker search --filter=is-official=true --filter=stars=100 nginx

이 명령은 별이 100 개 이상인 공식 Nginx 이미지를 검색합니다.

특정 버전 찾기

docker search 명령은 이미지 태그 (버전) 를 표시하지 않지만 다음을 통해 찾을 수 있습니다.

  1. Docker Hub 웹사이트 방문 (hub.docker.com)
  2. docker image inspect 명령 사용 (이미지를 가져온 후)

예를 들어, 사용 가능한 모든 Ubuntu 버전을 보려면 다음을 방문하십시오. https://hub.docker.com/_/ubuntu?tab=tags

적절한 이미지 선택

Docker 이미지를 선택할 때 다음 사항을 고려하십시오.

  1. 공식 이미지 (Official images): 소프트웨어 공급업체에서 유지 관리하므로 공식 이미지를 선호합니다.
  2. 인기 이미지 (Popular images): 별표 수가 많을수록 사용자가 많고 유지 관리가 더 잘 될 가능성이 있습니다.
  3. 최신 업데이트 (Recent updates): 이미지가 마지막으로 업데이트된 시기를 확인합니다.
  4. 문서 (Documentation): 훌륭한 문서가 있는 이미지를 찾습니다.
  5. 크기 (Size): 이미지가 작을수록 다운로드가 빠르므로 이미지 크기를 고려합니다.

Docker 이미지 다운로드

사용하려는 이미지를 찾았으면 docker pull 명령을 사용하여 로컬 머신에 다운로드할 수 있습니다.

이미지 가져오기 (Pulling an Image)

공식 Ubuntu 이미지를 가져와 보겠습니다.

docker pull ubuntu

다음과 유사한 출력을 볼 수 있습니다.

Using default tag: latest
latest: Pulling from library/ubuntu
7b1a6ab2e44d: Pull complete
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

기본적으로 Docker 는 latest 태그를 가져옵니다. 특정 버전을 가져오려면 태그를 추가합니다.

docker pull ubuntu:20.04

해당 특정 버전에 대한 다운로드 진행 상황을 보여주는 출력을 볼 수 있습니다.

다운로드된 이미지 나열

다운로드한 모든 이미지를 보려면 다음을 사용합니다.

docker images

또는 최신 명령 형식:

docker image ls

두 명령 모두 동일한 출력을 생성합니다.

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    1318b700e415   4 weeks ago   72.8MB
ubuntu       20.04     1318b700e415   4 weeks ago   72.8MB

이미지 태그 이해

Docker 이미지는 태그로 식별됩니다. 태그 형식은 일반적으로 다음과 같습니다.

repository:tag

여기서:

  • repository: 일반적으로 username/image-name 형식 또는 공식 이미지의 경우 단순히 image-name 형식입니다.
  • tag: 버전을 지정합니다 (예: latest, 20.04, 3.9-alpine).

태그를 생략하면 Docker 는 latest 태그를 원하는 것으로 간주합니다.

이미지 세부 정보 가져오기

이미지에 대한 자세한 정보를 보려면 다음을 사용합니다.

docker image inspect ubuntu:latest

이 명령은 레이어, 구성 및 환경 변수를 포함한 모든 이미지 메타데이터가 있는 JSON 객체를 표시합니다.

이미지 레이어의 기록을 보려면 다음을 사용합니다.

docker history ubuntu:latest

이것은 이미지가 레이어별로 어떻게 빌드되었는지 보여줍니다.

이미지에서 컨테이너 실행

이제 Docker 이미지를 다운로드했으므로 이러한 이미지를 기반으로 컨테이너를 생성하고 실행하는 방법을 알아보겠습니다.

기본 컨테이너 실행

이미지에서 컨테이너를 실행하려면 docker run 명령을 사용합니다.

docker run ubuntu echo "Hello from Docker"

이 명령은 다음을 수행합니다.

  1. Ubuntu 이미지를 기반으로 새 컨테이너를 생성합니다.
  2. 컨테이너 내에서 echo "Hello from Docker" 명령을 실행합니다.
  3. 명령이 완료된 후 종료합니다.

다음 출력을 볼 수 있습니다.

Hello from Docker

대화형 컨테이너 실행

컨테이너와 상호 작용하려면 -it 플래그 (대화형 터미널) 를 사용합니다.

docker run -it ubuntu bash

이렇게 하면 컨테이너 내에서 bash 셸이 시작됩니다. 이제 효과적으로 컨테이너 "내부"에 있으며 명령을 실행할 수 있습니다.

몇 가지 명령을 시도해 보십시오.

ls
cat /etc/os-release

컨테이너를 종료하려면 다음을 입력합니다.

exit

실행 중인 컨테이너 나열

실행 중인 모든 컨테이너를 보려면 다음을 사용합니다.

docker ps

컨테이너가 완료된 직후 종료되었으므로 출력이 표시되지 않을 수 있습니다. 중지된 컨테이너를 포함한 모든 컨테이너를 보려면 다음을 사용합니다.

docker ps -a

이렇게 하면 모든 컨테이너, 해당 상태 및 생성/종료 시기가 표시됩니다.

컨테이너 수명 주기

컨테이너에는 수명 주기가 있습니다.

  1. 생성됨 (Created): 컨테이너가 생성되었지만 시작되지 않았습니다.
  2. 실행 중 (Running): 컨테이너가 현재 실행 중입니다.
  3. 일시 중지됨 (Paused): 컨테이너 실행이 일시 중지되었습니다.
  4. 중지됨 (Stopped): 컨테이너가 종료되었지만 여전히 존재합니다.
  5. 제거됨 (Removed): 컨테이너가 삭제되었습니다.

중지된 컨테이너는 다음으로 제거할 수 있습니다.

docker rm <container_id>

<container_id>docker ps -a 출력에 표시된 ID 로 바꿉니다.

종료 후 컨테이너를 자동으로 제거하려면 --rm 플래그를 사용합니다.

docker run --rm ubuntu echo "This container will be removed after execution"

웹 서버 컨테이너 실행

Nginx 웹 서버를 실행하여 좀 더 실용적인 것을 시도해 보겠습니다.

docker pull nginx:alpine

이렇게 하면 Alpine Linux 를 기반으로 하는 경량 Nginx 이미지가 가져와집니다.

이제 호스트의 포트 8080 을 컨테이너의 포트 80 에 매핑하는 컨테이너를 실행합니다.

docker run -d -p 8080:80 --name my-nginx nginx:alpine

이 명령은 다음을 수행합니다.

  • -d: 컨테이너를 분리 모드 (백그라운드) 로 실행합니다.
  • -p 8080:80: 호스트의 포트 8080 을 컨테이너의 포트 80 에 매핑합니다.
  • --name my-nginx: 컨테이너의 이름을 "my-nginx"로 지정합니다.

이제 웹 브라우저에서 http://localhost:8080으로 이동하거나 curl 을 사용하여 Nginx 시작 페이지에 액세스할 수 있습니다.

curl http://localhost:8080

Nginx 시작 페이지의 HTML 콘텐츠를 볼 수 있습니다.

이 컨테이너를 중지하고 제거하려면 다음을 수행합니다.

docker stop my-nginx
docker rm my-nginx

요약

이 Docker 이미지 검색 및 사용 실습을 완료하신 것을 축하드립니다. 이 튜토리얼을 통해 다음을 수행했습니다.

  1. Docker 설치를 확인하고 Docker 이미지의 개념을 이해했습니다.
  2. docker search 명령을 사용하여 Docker 이미지를 검색하는 방법을 배웠습니다.
  3. docker pull을 사용하여 Docker 이미지를 로컬 머신에 다운로드했습니다.
  4. 로컬 Docker 이미지를 나열하고 검사했습니다.
  5. 다양한 docker run 옵션을 사용하여 이러한 이미지에서 컨테이너를 생성하고 실행했습니다.
  6. 컨테이너 수명 주기를 이해하고 컨테이너를 관리하는 방법을 배웠습니다.

이러한 기술은 개발 프로젝트에서 Docker 를 사용하는 기반을 형성합니다. 이제 Docker 이미지를 검색, 다운로드 및 사용하여 애플리케이션을 위한 컨테이너화된 환경을 만들 수 있습니다.

Docker 여정의 다음 단계는 다음과 같습니다.

  • Dockerfile 로 자신만의 Docker 이미지를 만드는 방법 배우기
  • Docker 네트워킹 및 데이터 지속성 이해
  • 다중 컨테이너 애플리케이션을 위한 Docker Compose 탐색
  • Kubernetes 를 사용한 컨테이너 오케스트레이션 심층 분석

개발 워크플로우를 가속화하기 위해 사용할 수 있는 광대한 사전 구축 컨테이너 생태계를 발견하기 위해 다양한 Docker 이미지를 계속 실험해 보십시오.