Docker 이미지 가져오기 방법

DockerBeginner
지금 연습하기

소개

Docker 는 애플리케이션 개발, 배포 및 관리에 혁신을 가져왔습니다. 이 생태계의 핵심은 컨테이너화된 애플리케이션을 생성하고 실행하기 위한 빌딩 블록 역할을 하는 Docker 이미지입니다. 이 튜토리얼에서는 프로젝트에 Docker 의 강력한 기능을 활용하는 데 중요한 단계인, 레지스트리에서 Docker 이미지를 가져오는 과정을 안내합니다.

이 랩을 마치면 Docker 이미지를 검색하고, Docker Hub 에서 가져와 컨테이너화된 애플리케이션에서 사용하는 방법을 이해할 수 있습니다.

Docker 이미지 이해

Docker 이미지를 가져오기 전에 Docker 이미지가 무엇이며 어떻게 작동하는지 이해하는 것이 중요합니다.

Docker 이미지란 무엇인가?

Docker 이미지는 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적인 패키지입니다.

  • 애플리케이션 코드
  • 런타임 환경
  • 라이브러리 및 종속성
  • 환경 변수
  • 구성 파일

이미지는 이러한 이미지의 실행 인스턴스인 Docker 컨테이너를 생성하는 데 사용되는 템플릿입니다.

Docker 이미지 레포지토리

Docker 이미지는 레지스트리 내의 레포지토리에 저장됩니다. 가장 인기 있는 공개 레지스트리는 Docker Hub 이며, 수천 개의 바로 사용할 수 있는 이미지를 호스팅합니다. Docker Hub 에 대한 몇 가지 주요 사항은 다음과 같습니다.

  • 소프트웨어 공급업체가 유지 관리하는 공식 이미지를 포함합니다.
  • 사용자가 만든 커뮤니티 기여 이미지를 호스팅합니다.
  • 조직이 독점 이미지를 위한 개인 레포지토리를 가질 수 있도록 허용합니다.

Docker 이미지 명명

Docker 이미지는 특정 명명 규칙을 따릅니다.

[registry/]username/repository:tag

여기서:

  • registry는 레지스트리의 호스트 이름입니다 (선택 사항, 기본값은 Docker Hub).
  • username은 Docker Hub 사용자 이름 또는 조직 이름입니다.
  • repository는 이미지 이름입니다.
  • tag는 이미지 버전입니다 (선택 사항, 기본값은 "latest").

예를 들어: ubuntu:22.04 또는 nginx:latest

Docker 설치 확인

진행하기 전에 Docker 가 시스템에 제대로 설치되었는지 확인해 보겠습니다. 터미널을 열고 다음을 실행합니다.

docker --version

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

Docker version 20.10.21, build baeda1f

이는 Docker 가 설치되어 사용할 준비가 되었음을 확인합니다.

다음 단계에서는 첫 번째 Docker 이미지를 검색하고 가져올 것입니다.

첫 번째 Docker 이미지 검색 및 가져오기

이제 Docker 이미지가 무엇인지 이해했으므로 Docker Hub 에서 이미지를 찾고 가져오는 방법을 알아보겠습니다.

Docker 이미지 검색

이미지를 가져오기 전에 사용 가능한 옵션을 검색할 수 있습니다. docker search 명령을 사용하여 Docker Hub 에서 이미지를 찾습니다.

docker search ubuntu

이렇게 하면 Docker Hub 에서 사용 가능한 Ubuntu 관련 이미지 목록이 표시됩니다. 다음과 유사한 출력을 볼 수 있습니다.

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

[OK]로 표시된 OFFICIAL 열은 Docker 또는 소프트웨어 공급업체가 유지 관리하는 이미지를 나타냅니다.

Docker 이미지 가져오기

Docker 이미지를 로컬 머신에 다운로드하려면 docker pull 명령을 사용하고 이미지 이름을 입력합니다.

docker pull ubuntu:22.04

이 명령은 Docker Hub 에서 Ubuntu 22.04 이미지를 가져옵니다. 다음과 유사한 다운로드 진행률을 볼 수 있습니다.

22.04: Pulling from library/ubuntu
2ab09b027e7f: Pull complete
Digest: sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04

출력은 Docker 가 이미지의 개별 레이어를 다운로드하고 있음을 보여줍니다. 각 레이어는 파일 시스템 변경 사항 집합을 나타냅니다.

태그 없이 이미지 가져오기

태그를 지정하지 않으면 Docker 는 latest로 태그된 이미지를 가져옵니다.

docker pull nginx

이렇게 하면 Nginx 웹 서버 이미지의 최신 버전을 가져옵니다.

Using default tag: latest
latest: Pulling from library/nginx
a603fa5e3b41: Pull complete
(...more layers...)
Digest: sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

다른 레지스트리에서 가져오기

기본적으로 docker pull은 Docker Hub 에서 이미지를 다운로드합니다. 다른 레지스트리에서 가져오려면 레지스트리 호스트 이름을 포함합니다.

docker pull mcr.microsoft.com/dotnet/sdk:6.0

이 명령은 Microsoft Container Registry 에서 .NET SDK 6.0 이미지를 가져옵니다.

이제 몇 가지 Docker 이미지를 가져왔으므로 다음 단계로 이동하여 이미지를 관리하는 방법을 알아보겠습니다.

Docker 이미지 관리

Docker 이미지를 가져온 후에는 이미지를 효과적으로 나열하고, 검사하고, 관리하는 방법을 알아야 합니다.

Docker 이미지 나열

로컬 머신에 다운로드한 모든 Docker 이미지를 보려면 docker images 명령 (또는 별칭 docker image ls) 을 사용합니다.

docker images

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

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        22.04     58db3edaf2be   3 weeks ago    77.8MB
nginx         latest    605c77e624dd   4 weeks ago    142MB

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

  • REPOSITORY: 이미지 이름
  • TAG: 이미지 버전
  • IMAGE ID: 이미지의 고유 식별자
  • CREATED: 이미지가 생성된 시기
  • SIZE: 디스크에서 이미지 크기

Docker 이미지 검사

특정 이미지에 대한 자세한 정보를 얻으려면 docker inspect 명령을 사용합니다.

docker inspect ubuntu:22.04

이 명령은 다음을 포함하여 이미지에 대한 모든 세부 정보를 포함하는 JSON 배열을 표시합니다.

  • 레이어 정보
  • 환경 변수
  • 아키텍처
  • 운영 체제
  • 구성

출력은 매우 길고 자세합니다. 다음은 표시될 수 있는 내용의 일부입니다.

[
    {
        "Id": "sha256:58db3edaf2beXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "RepoTags": [
            "ubuntu:22.04"
        ],
        "RepoDigests": [
            "ubuntu@sha256:2b7412e6465c3fc7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f"
        ],
        ...
    }
]

이미지 히스토리

이미지의 레이어 히스토리 (빌드 방법) 를 보려면 docker history 명령을 사용합니다.

docker history ubuntu:22.04

출력은 이미지를 구성하는 각 레이어를 보여줍니다.

IMAGE          CREATED       CREATED BY                                      SIZE
58db3edaf2be   3 weeks ago   /bin/sh -c #(nop)  CMD ["bash"]                0B
<missing>      3 weeks ago   /bin/sh -c #(nop) ADD file:15efc167a417...     77.8MB

Docker 이미지 제거

더 이상 이미지가 필요하지 않으면 docker rmi 명령을 사용하여 디스크 공간을 확보하기 위해 제거할 수 있습니다.

docker rmi nginx

성공하면 Docker 는 제거된 이미지 ID 를 표시합니다.

Untagged: nginx:latest
Untagged: nginx@sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Deleted: sha256:605c77e624ddb75e6110f997c58876bba43f0blindividualayeridshereXX
(...more layers deleted...)

이미지가 컨테이너에서 사용 중인 경우 먼저 컨테이너를 제거하거나 -f (force) 옵션을 사용해야 합니다.

docker rmi -f nginx

이제 Docker 이미지를 관리하는 방법을 알았습니다. 이제 실제로 이미지를 사용하여 컨테이너를 실행하는 마지막 단계로 진행해 보겠습니다.

Docker 이미지 사용

Docker 이미지를 가져오는 것은 첫 번째 단계일 뿐입니다. 이제 이러한 이미지를 사용하여 컨테이너를 실행하는 방법을 알아보겠습니다.

이미지에서 컨테이너 실행

이미지에서 컨테이너를 생성하고 시작하려면 docker run 명령을 사용합니다.

docker run ubuntu:22.04 echo "Hello from Ubuntu container"

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

  1. ubuntu:22.04 이미지에서 새 컨테이너를 생성합니다.
  2. 컨테이너 내에서 echo "Hello from Ubuntu container" 명령을 실행합니다.
  3. 출력을 표시합니다.
Hello from Ubuntu container

명령을 실행한 후 컨테이너는 작업을 완료했으므로 중지됩니다.

대화형 컨테이너 실행

컨테이너 내에서 대화형 셸을 시작하려면 -i (interactive) 및 -t (terminal) 옵션을 사용합니다.

docker run -it ubuntu:22.04 bash

이렇게 하면 명령을 실행할 수 있는 Ubuntu 컨테이너 내에서 bash 셸이 제공됩니다.

root@a1b2c3d4e5f6:/## ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr

컨테이너를 종료하려면 exit를 입력하거나 Ctrl+D를 누릅니다.

root@a1b2c3d4e5f6:/## exit
exit

분리 모드에서 컨테이너 실행

백그라운드 (분리 모드) 에서 컨테이너를 실행하려면 -d 옵션을 사용합니다.

docker run -d --name nginx-server -p 8080:80 nginx

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

  1. nginx 이미지에서 nginx-server라는 컨테이너를 생성합니다.
  2. 분리 모드 (-d) 로 실행합니다.
  3. 호스트의 포트 8080 을 컨테이너의 포트 80 에 매핑합니다.
  4. 컨테이너 ID 를 반환합니다.
e1d0ac1dcb21a93d9d878dcf40c054eb9f3c2b1bf5ecce7c29b6fa8ce6b219c1

실행 중인 컨테이너에 액세스

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

curl localhost:8080

그러면 Nginx 시작 페이지 HTML 이 표시됩니다.

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>

실행 중인 컨테이너 나열

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

docker ps

이렇게 하면 실행 중인 컨테이너에 대한 정보가 표시됩니다.

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
e1d0ac1dcb21   nginx     "/docker-entrypoint.…"   30 seconds ago   Up 29 seconds   0.0.0.0:8080->80/tcp   nginx-server

컨테이너 중지 및 제거

실행 중인 컨테이너를 중지하려면 다음을 수행합니다.

docker stop nginx-server

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

docker rm nginx-server

이제 Docker 이미지를 사용하여 컨테이너를 성공적으로 실행했습니다. 이것은 개발 및 배포 프로세스에서 Docker 를 사용하는 기본적인 워크플로우입니다.

요약

이 Docker 이미지 실습을 완료하신 것을 축하드립니다. Docker 이미지를 사용하는 데 필요한 필수 기술을 익혔습니다.

  1. Docker 이미지가 무엇인지, 그리고 레지스트리에서 어떻게 구성되는지 이해
  2. Docker Hub 에서 Docker 이미지 검색 및 가져오기
  3. 로컬 Docker 이미지 관리 (나열, 검사 및 제거 포함)
  4. 다양한 모드에서 Docker 이미지를 사용하여 컨테이너 실행

이러한 기술은 Docker 를 사용하는 기본이며 개발 워크플로우에서 컨테이너화를 활용할 수 있게 해줍니다. 이제 공용 또는 개인 레지스트리에서 모든 Docker 이미지를 가져와 컨테이너화된 애플리케이션을 실행하는 데 사용할 수 있습니다.

추가 학습을 위한 다음 단계:

  • Dockerfile 로 자체 Docker 이미지 생성
  • 다중 컨테이너 애플리케이션을 위한 Docker Compose 사용
  • 영구 스토리지를 위한 Docker 볼륨 사용
  • 컨테이너 네트워킹 설정

개발 프로세스를 가속화할 수 있는 도구와 애플리케이션을 찾기 위해 Docker Hub 에서 사용할 수 있는 광대한 Docker 이미지 생태계를 계속 탐색하십시오.