docker compose pull 명령을 사용하여 서비스 이미지 업데이트 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker compose pull 명령을 사용하여 compose.yaml 파일에 정의된 서비스 이미지를 업데이트하는 방법을 배우게 됩니다. 먼저 Docker 이미지를 사용하는 서비스가 포함된 compose.yaml 파일을 준비하는 것으로 시작합니다.

설정 후, 특정 서비스 이미지 풀, 모든 서비스 이미지 풀, 빌드 가능한 서비스를 무시하면서 이미지 풀, 진행 정보를 표시하지 않고 조용히 이미지 풀 등 docker compose pull 명령을 사용하는 다양한 방법을 탐색할 것입니다. 이 실습을 통해 Docker Compose 서비스 이미지를 효율적으로 관리하고 업데이트하는 기술을 습득할 수 있습니다.

이미지를 사용하는 서비스로 compose.yaml 파일 준비

이 단계에서는 Docker 이미지를 사용하는 서비스를 정의하는 compose.yaml 파일을 준비합니다. Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 관리할 수 있는 도구입니다. LabEx VM 에는 Docker 가 이미 설치되어 있지만, Docker Compose 는 설치되어 있지 않습니다. 먼저 Docker Compose 를 설치하겠습니다.

먼저 Docker Compose 를 설치해 보겠습니다. Docker Compose 바이너리를 다운로드하여 실행 가능하게 만들 것입니다.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

이제 Docker Compose 가 설치되었으므로 버전을 확인하여 설치를 확인해 보겠습니다.

docker-compose --version

Docker Compose version v2.20.2와 유사한 출력을 볼 수 있습니다.

다음으로, 프로젝트 디렉토리를 만들고 해당 디렉토리로 이동합니다.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

이제 이 디렉토리에 compose.yaml 파일을 만들 것입니다. 이 파일은 nginx 이미지를 사용하는 웹 서비스와 redis 이미지를 사용하는 데이터베이스 서비스, 이렇게 두 개의 서비스를 정의합니다.

nano compose.yaml

다음 내용을 compose.yaml 파일에 붙여넣습니다.

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest

파일을 저장하고 nano 편집기를 종료합니다 ( Ctrl + X를 누른 다음 Y를 누르고 Enter를 누릅니다).

compose.yaml 파일은 두 개의 서비스를 정의합니다.

  • web: nginx:latest Docker 이미지를 사용하고 호스트의 포트 80 을 컨테이너의 포트 80 에 매핑합니다.
  • db: redis:latest Docker 이미지를 사용합니다.

다음 단계에서는 이 compose.yaml 파일을 사용하여 정의된 서비스 이미지를 풀 (pull) 합니다.

docker compose pull 명령을 사용하여 특정 서비스 이미지 풀 (pull) 하기

이 단계에서는 docker compose pull 명령을 사용하여 compose.yaml 파일에 정의된 특정 서비스 이미지를 풀 (pull) 하는 방법을 배우겠습니다. 이는 다른 서비스에 영향을 주지 않고 단일 서비스에 대한 이미지를 업데이트하거나 다운로드해야 할 때 유용합니다.

먼저, 이전 단계에서 compose.yaml 파일을 생성한 ~/project/my-compose-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-compose-app

이제 web 서비스에 대한 이미지를 풀 (pull) 해 보겠습니다. 이를 위한 명령은 docker compose pull <service_name>입니다. 이 경우 서비스 이름은 web입니다.

docker compose pull web

Docker Compose 가 nginx:latest 이미지를 풀 (pull) 하고 있음을 나타내는 출력을 볼 수 있습니다. 이 프로세스는 Docker 레지스트리에서 이미지 레이어를 다운로드합니다.

명령이 완료된 후, 사용 가능한 Docker 이미지를 나열하여 nginx 이미지가 풀 (pull) 되었는지 확인할 수 있습니다.

docker images

출력에 nginx가 태그 (latest), 이미지 ID, 생성 날짜 및 크기와 함께 나열되어야 합니다.

이것은 compose.yaml 파일에 정의된 특정 서비스에 대한 이미지를 선택적으로 풀 (pull) 하는 방법을 보여줍니다. 다음 단계에서는 모든 서비스에 대한 이미지를 풀 (pull) 합니다.

compose.yaml 파일에 정의된 모든 서비스 이미지 풀 (pull) 하기

이 단계에서는 서비스 이름을 지정하지 않고 docker compose pull 명령을 사용하여 compose.yaml 파일에 정의된 모든 서비스에 대한 이미지를 풀 (pull) 하는 방법을 배우겠습니다. 이는 서비스 이름이 제공되지 않은 경우 docker compose pull의 기본 동작입니다.

먼저, ~/project/my-compose-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-compose-app

이제 인자 없이 docker compose pull 명령을 실행합니다.

docker compose pull

이 명령은 compose.yaml 파일을 읽고 파일 내에 정의된 모든 서비스에 대한 이미지를 풀 (pull) 합니다. 이전 단계에서 이미 nginx 이미지를 풀 (pull) 했으므로 Docker Compose 는 이미지가 최신인지 확인합니다. 그런 다음 아직 풀 (pull) 되지 않은 redis:latest 이미지를 풀 (pull) 하는 과정을 진행합니다.

redis 이미지에 대한 풀 (pull) 프로세스를 나타내는 출력을 볼 수 있습니다.

명령이 완료된 후, 사용 가능한 Docker 이미지를 나열하여 nginxredis 이미지가 모두 풀 (pull) 되었는지 확인할 수 있습니다.

docker images

이제 출력에 nginxredis가 모두 나열되어야 합니다.

이것은 단일 명령으로 다중 컨테이너 애플리케이션에 필요한 모든 이미지를 쉽게 풀 (pull) 하는 방법을 보여줍니다.

빌드 가능한 서비스는 무시하고 서비스 이미지 풀 (pull) 하기

이 단계에서는 docker compose pull과 함께 --ignore-buildable 플래그를 사용하는 방법을 살펴보겠습니다. 이 플래그는 compose.yaml 파일에 미리 빌드된 이미지를 사용하는 서비스 외에도 Dockerfile 에서 빌드되는 서비스 (빌드 가능한 서비스) 가 포함된 경우 유용합니다. --ignore-buildable 플래그는 Docker Compose 에게 image 키를 지정하는 서비스에 대해서만 이미지를 풀 (pull) 하고 build 키를 지정하는 서비스는 건너뛰도록 지시합니다.

먼저, 빌드 가능한 서비스를 포함하도록 compose.yaml 파일을 수정해 보겠습니다. 기본 이미지를 빌드하는 간단한 서비스를 추가합니다.

~/project/my-compose-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-compose-app

이제 빌드 가능한 서비스에 대한 간단한 Dockerfile 을 생성합니다.

nano Dockerfile

다음 내용을 Dockerfile에 붙여넣습니다.

FROM alpine:latest
CMD ["echo", "Hello from buildable service!"]

파일을 저장하고 nano 편집기를 종료합니다.

다음으로, 이 Dockerfile 을 사용하는 새 서비스를 포함하도록 compose.yaml 파일을 수정합니다.

nano compose.yaml

db 서비스 아래에 다음 서비스 정의를 compose.yaml 파일에 추가합니다.

builder:
  build: .

완성된 compose.yaml 파일은 다음과 같아야 합니다.

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest
  builder:
    build: .

파일을 저장하고 nano 편집기를 종료합니다.

이제 docker compose pull --ignore-buildable을 사용하여 이미지를 풀 (pull) 해 보겠습니다.

docker compose pull --ignore-buildable

Docker Compose 가 webdb 서비스를 확인하고 필요한 경우 해당 이미지를 풀 (pull) 하는 것을 확인할 수 있습니다 (이전 단계에서 이미 풀 (pull) 되었을 것입니다). 그러나 builder 서비스는 image 키 대신 build 키를 사용하므로 무시합니다. builder 서비스에 대한 이미지를 빌드하거나 풀 (pull) 하는 것과 관련된 출력은 표시되지 않습니다.

builder 서비스에 대해 이미지가 빌드되거나 풀 (pull) 되지 않았는지 확인하려면 Docker 이미지를 나열할 수 있습니다.

docker images

여전히 nginxredis 이미지만 나열되어야 합니다. 이 명령으로 Dockerfile에서 생성된 새 이미지는 없을 것입니다.

이는 --ignore-buildable 플래그가 미리 빌드된 이미지만 선택적으로 풀 (pull) 할 수 있도록 하는 방법을 보여주며, 이는 다양한 개발 및 배포 시나리오에서 유용할 수 있습니다.

진행 정보 없이 서비스 이미지 조용히 풀 (pull) 하기

이 단계에서는 docker compose pull과 함께 --quiet 또는 -q 플래그를 사용하여 자세한 진행 정보를 표시하지 않고 서비스 이미지를 풀 (pull) 하는 방법을 배우겠습니다. 이는 스크립트 또는 자동화된 워크플로우와 같이 터미널의 출력량을 줄이려는 경우 유용합니다.

먼저, ~/project/my-compose-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-compose-app

이제 docker compose pull --quiet 명령을 사용하여 이미지를 풀 (pull) 해 보겠습니다. webdb에 대한 이미지는 이전 단계에서 이미 존재할 가능성이 높으므로 Docker Compose 는 최신 상태인지 확인합니다. 최신 상태인 경우 명령은 최소한의 출력으로 빠르게 완료됩니다. 이미지를 풀 (pull) 해야 하는 경우, 일반적인 진행률 표시줄과 레이어 정보를 볼 수 없습니다.

docker compose pull --quiet

--quiet 플래그 없이 docker compose pull을 실행하는 것과 비교하여 출력이 훨씬 덜 자세하다는 것을 알 수 있습니다. 이미지가 이미 최신 상태임을 나타내는 메시지가 표시될 수 있지만 각 레이어에 대한 자세한 다운로드 진행률은 표시되지 않습니다.

효과를 더 명확하게 보여주기 위해 먼저 이미지 중 하나를 제거한 다음 조용히 풀 (pull) 해 보겠습니다. redis 이미지를 제거합니다.

docker rmi redis:latest

이제 --quiet 플래그를 사용하여 이미지를 다시 풀 (pull) 합니다.

docker compose pull --quiet

이번에는 redis 이미지가 풀 (pull) 되지만 자세한 진행률은 표시되지 않습니다. 출력은 최소화되어 풀 (pull) 작업이 일반적인 시각적 피드백 없이 진행되고 있음을 확인합니다.

Docker 이미지를 나열하여 redis 이미지가 다시 풀 (pull) 되었는지 확인할 수 있습니다.

docker images

nginxredis가 모두 나열되어야 합니다.

--quiet 플래그는 docker compose pull 명령의 자세성을 제어하는 간단하지만 효과적인 방법으로, 자세한 출력이 필요하지 않은 환경에 적합합니다.

요약

이 랩에서는 docker compose pull 명령을 사용하여 서비스 이미지를 업데이트하는 방법을 배웠습니다. Docker Compose 자체를 설치하는 것을 포함하여 특정 Docker 이미지를 사용하여 서비스를 정의하는 compose.yaml 파일을 준비하는 것으로 시작했습니다.

이후, 개별 서비스에 대한 이미지 풀 (pull), 파일에 정의된 모든 서비스 풀 (pull), 빌드 가능한 서비스를 무시하고 더 조용한 풀 (pull) 프로세스를 위해 진행률 출력을 억제하는 옵션 활용을 살펴보았습니다.