1. 개요

이 사용방법(예제)에서는 docker-compose 를 사용하여 다른 컨테이너와 독립적으로 컨테이너를 다시 빌드하는 방법을 살펴봅니다 .

2. 문제 제시

두 개의 컨테이너로 docker-compose.yml 구성 파일을 정의해 보겠습니다 . 하나는 최신 우분투 이미지를 참조하고 다른 하나는 최신 알파인 이미지를 참조합니다. 시작 시 컨테이너가 직접 종료되는 것을 방지하기 위해 " tty: true "를 사용 하여 각각에 대한 의사 터미널을 추가합니다 .

version: "3.9"
services:
  ubuntu:
    image: "ubuntu:latest"
    tty: true
  alpine:
    image: "alpine:latest"
    tty: true

이제 컨테이너를 빌드하고 시작하겠습니다. 백그라운드에서 실행할 수 있도록 docker-compose up 명령을 -d 옵션 과 함께 사용 합니다.

$ docker-compose up -d

Container {folder-name}-alpine-1  Creating
Container {folder-name}-ubuntu-1  Creating
Container {folder-name}-ubuntu-1  Created
Container {folder-name}-alpine-1  Created
Container {folder-name}-ubuntu-1  Starting
Container {folder-name}-alpine-1  Starting
Container {folder-name}-alpine-1  Started
Container {folder-name}-ubuntu-1  Started

컨테이너가 예상대로 실행되고 있는지 빠르게 확인할 수 있습니다.

$ docker-compose ps
NAME                         COMMAND             SERVICE             STATUS              PORTS
{folder-name}-alpine-1   "/bin/sh"           alpine              running
{folder-name}-ubuntu-1   "bash"              ubuntu              running

이제 알파인 컨테이너 에 영향을 주지 않고 우분투 컨테이너를 다시 빌드하고 다시 시작하는 방법을 살펴보겠습니다 .

3. 독립적으로 컨테이너 재구축 및 재시작

docker-compose up 명령 에 컨테이너 이름을 추가하면 트릭을 수행할 수 있습니다. 컨테이너를 시작하기 전에 이미지를 빌드하는 빌드 옵션을 추가합니다 . 이미지를 변경하지 않았기 때문에 force-recreate 플래그 도 추가합니다 .

$ docker-compose up -d --force-recreate --build ubuntu
Container {folder-name}-ubuntu-1  Recreate
Container {folder-name}-ubuntu-1  Recreated
Container {folder-name}-ubuntu-1  Starting
Container {folder-name}-ubuntu-1  Started

보시다시피 알파인 컨테이너에 영향을 주지 않고 ubuntu 컨테이너가 다시 빌드되고 다시 시작되었습니다 .

4. 컨테이너가 다른 컨테이너에 의존하는 경우

이제 우분투 컨테이너가 알파인 컨테이너에 종속 되도록 docker-compose.yml 파일을 약간 업데이트해 보겠습니다 .

version: "3.9"
services:
  ubuntu:
    image: "ubuntu:latest"
    tty: true
    depends_on:
      - "alpine"
  alpine:
    image: "alpine:latest"
    tty: true

이전 컨테이너 를 중지하고 새 구성으로 처음부터 다시 빌드합니다.

$ docker-compose stop
Container {folder-name}-alpine-1  Stopping
Container {folder-name}-ubuntu-1  Stopping
Container {folder-name}-ubuntu-1  Stopped
Container {folder-name}-alpine-1  Stopped

$ docker-compose up -d
Container {folder-name}-alpine-1  Created
Container {folder-name}-ubuntu-1  Recreate
Container {folder-name}-ubuntu-1  Recreated
Container {folder-name}-alpine-1  Starting
Container {folder-name}-alpine-1  Started
Container {folder-name}-ubuntu-1  Starting
Container {folder-name}-ubuntu-1  Started

이 경우 연결된 컨테이너를 다시 시작하지 않도록 docker-compose 에 명시적으로 알리기 위해 no-deps 옵션을 추가 해야 합니다 .

$ docker-compose up -d --force-recreate --build --no-deps ubuntu
Container {folder-name}-ubuntu-1  Recreate
Container {folder-name}-ubuntu-1  Recreated
Container {folder-name}-ubuntu-1  Starting
Container {folder-name}-ubuntu-1  Started

5. 결론

이 사용방법(예제)에서는 docker-compose 를 사용하여 컨테이너를 다시 빌드하는 방법을 살펴보았습니다 .

항상 그렇듯이 코드는 GitHub에서 사용할 수 있습니다 .

Generic footer banner