Docker-Compose 파일에서 컨테이너 재구축

David Mbochi Njonge 2023년6월20일
  1. 새 프로젝트 만들기
  2. 이미지용 Dockerfile 만들기
  3. 컨테이너용 Compose 파일 생성
  4. compose를 사용하여 컨테이너 실행
  5. compose를 사용하여 단일 컨테이너 재구축
  6. 결론
Docker-Compose 파일에서 컨테이너 재구축

애플리케이션을 구현하기 전에 Dockerfilecompose.yaml 파일의 차이점을 이해해야 합니다.

애플리케이션용 사용자 지정 이미지를 생성할 때 일반적으로 Dockerfile이라는 파일을 사용하고 docker run 명령을 사용하여 명령줄에서 컨테이너를 실행합니다. 여러 이미지를 생성하려는 경우 이러한 명령이 너무 지루하고 컨테이너를 관리하기 어려워지므로 여기에서 compose.yaml 파일이 필요합니다.

compose.yaml 파일은 이미지를 빌드하고 컨테이너를 실행하며 이러한 컨테이너에 대한 네트워크를 만들고 네트워크에 추가합니다. 그런 다음 서비스 이름을 사용하여 네트워크 애플리케이션에 액세스할 수 있습니다.

docker compose up 명령이 이미지를 만들고 실행할 수 있도록 이 두 명령이 애플리케이션에 있어야 합니다.

이미지가 변경된 경우 이 명령은 변경 사항을 가져오고 컨테이너를 중지하고 이미지를 다시 만듭니다. 이 자습서에서는 Docker 파일에 정의된 여러 컨테이너에서 단일 Docker 컨테이너를 다시 빌드하는 방법을 살펴봅니다.

새 프로젝트 만들기

IntelliJ IDEA를 열고 파일 > 새로 만들기 > 프로젝트를 선택합니다. 열린 창에서 Node.js를 선택하고 프로젝트 이름을 제목 없음에서 docker-rebuild-container로 변경하거나 원하는 이름을 사용하십시오.

노드 인터프리터 및 패키지 관리자 섹션이 컴퓨터에서 자동으로 추가되도록 노드 런타임 환경이 설치되었는지 확인하십시오. 마지막으로 만들기 버튼을 클릭하여 프로젝트를 생성합니다.

docker-rebuild-container 폴더 아래에 index.js라는 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
    res.json(
        [

            {
                name: "Java in action",
                author: "chad darby",
                price: 345
            },
            {
                name: 'React cookbook',
                author: "mary public",
                price: 600
            },
        ])
})

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})

이 파일에서 샘플 Node.js 애플리케이션을 생성하여 이미지를 생성하고 여기에서 컨테이너를 실행했습니다. 이 애플리케이션은 브라우저에서 /에 get 요청을 발행하여 액세스할 수 있는 API를 노출합니다.

이미지용 Dockerfile 만들기

Dockerfile이라는 파일을 만들고 다음 지침을 복사하여 파일에 붙여넣습니다.

FROM node:16.17.0-alpine
WORKDIR /com/app
ADD package*.json ./
RUN npm install
ADD . .
CMD node index.js

이 파일은 이미지를 빌드하고 여기에서 컨테이너를 실행하기 위한 지침을 정의합니다. 도커 문서는 이러한 지침이 어떻게 작동하는지에 대한 자세한 설명을 제공합니다.

컨테이너용 Compose 파일 생성

docker-rebuild-container 폴더에 compose.yaml 파일을 만들고 다음 지침을 복사하여 파일에 붙여넣습니다.

services:
  service-one:
    restart: on-failure
    build: .
    hostname: service-one
    ports:
      - '3000:3000'
  service-two:
    restart: on-failure
    build: .
    hostname: service-two
    ports:
      - '5000:3000'

이 파일은 각각 호스트의 포트 3000 및 5000에서 컨테이너의 포트 3000을 수신 대기하는 서비스와 함께 service-oneservice-two라는 이름의 두 서비스를 정의합니다.

  1. 서비스 - 애플리케이션의 컴퓨팅 구성 요소를 정의합니다.
  2. restart - 컨테이너가 종료될 때 취할 조치를 정의합니다.
  3. build - 이미지를 빌드하기 위한 구성이 포함된 Dockerfile의 소스를 정의합니다.
  4. 호스트 이름 - 서비스에서 사용할 사용자 지정 이름을 설정합니다.
  5. 포트 - 애플리케이션을 제공하기 위해 호스트 시스템의 포트를 노출합니다.

Docker 설명서는 이러한 지침을 자세히 설명하는 docker compose file reference를 제공합니다.

compose를 사용하여 컨테이너 실행

이 예제에서는 정의된 모든 컨테이너를 한 번에 빌드하고 실행하는 방법을 살펴봅니다. docker compose.yaml 파일을 실행하려면 키보드 단축키 ALT + F12와 다음 명령을 사용하여 개발 환경에서 새 터미널 창을 열고 용기.

~/WebstormProjects/docker-rebuild-container$ docker compose up --build --force-recreate --no-deps -d

이 명령을 사용하면 컨테이너를 실행하고 관리하는 것이 매우 쉬워집니다. 이 명령을 사용하기 전에 docker compose up -d를 실행하여 이 명령으로 이미지를 다시 빌드하고 컨테이너를 다시 생성하는지 확인합니다.

 => CACHED [docker-rebuild-container_service-two 2/5] WORKDIR /com/app                                                          0.0s
 => CACHED [docker-rebuild-container_service-two 3/5] ADD package*.json ./                                                      0.0s
 => CACHED [docker-rebuild-container_service-two 4/5] RUN npm install                                                           0.0s
 => [docker-rebuild-container_service-two 5/5] ADD . .                                                                          1.2s
 => [docker-rebuild-container_service-one] exporting to image
  1. --빌드 - 컨테이너를 실행하기 전에 이미지가 빌드되도록 합니다.
  2. --force-recreate - 구성 및 이미지 상태를 고려하지 않고 컨테이너를 다시 만듭니다.
  3. --no-deps - 연결된 서비스가 시작되지 않도록 합니다.

compose를 사용하여 단일 컨테이너 재구축

compose.yaml 파일에 정의된 여러 컨테이너에서 단일 컨테이너를 다시 빌드하려면 이전 예제에서 사용한 명령을 사용하고 아래와 같이 다시 빌드할 서비스 이름을 추가합니다.

~/WebstormProjects/docker-rebuild-container$ docker compose up --build --force-recreate --no-deps -d service-one

단일 컨테이너만 재생성하려고 하므로 이 명령은 이미지를 다시 빌드하고 service-one이라는 컨테이너를 다시 생성합니다. 이 명령의 출력에서 아래와 같이 하나의 컨테이너만 다시 생성되었음을 확인할 수 있습니다.

[+] Running 1/1
 ⠿ Container docker-rebuild-container-service-one-1  Started

컨테이너가 예상대로 작동하는지 확인하려면 브라우저에서 localhost:3000(http://localhost:3000/) 및 localhost:5000(http://localhost:5000)에서 두 개의 요청을 발행하십시오. /), 두 컨테이너에서 동일한 애플리케이션에 액세스할 수 있습니다. 다음은 컨테이너에서 반환된 JSON 응답입니다.

[
    {
    "name": "Java in action",
    "author": "chad darby",
    "price": 345
    },
    {
    "name": "React cookbook",
    "author": "mary public",
    "price": 600
    }
]

결론

이 자습서에서는 Dockerfile을 사용하여 이미지를 정의하고 compose.yaml 파일을 사용하여 컨테이너를 정의하고 Compose 파일에서 컨테이너를 실행하고 Compose 파일에서 단일 컨테이너를 다시 만드는 방법을 배웠습니다.

작성 파일에서 컨테이너를 실행하기 위한 구문은 docker compose up [OPTIONS] [SERVICE...]이며 선택적 SERVICE 매개변수를 사용하면 이미지를 다시 작성하거나 다시 작성하려는 하나 이상의 서비스를 지정할 수 있습니다. 그들의 용기.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

관련 문장 - Docker Container