Docker-Compose 파일에서 컨테이너 재구축
- 새 프로젝트 만들기
- 이미지용 Dockerfile 만들기
- 컨테이너용 Compose 파일 생성
-
compose
를 사용하여 컨테이너 실행 -
compose
를 사용하여 단일 컨테이너 재구축 - 결론
애플리케이션을 구현하기 전에 Dockerfile
과 compose.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-one
및 service-two
라는 이름의 두 서비스를 정의합니다.
서비스
- 애플리케이션의 컴퓨팅 구성 요소를 정의합니다.restart
- 컨테이너가 종료될 때 취할 조치를 정의합니다.build
- 이미지를 빌드하기 위한 구성이 포함된Dockerfile
의 소스를 정의합니다.호스트 이름
- 서비스에서 사용할 사용자 지정 이름을 설정합니다.포트
- 애플리케이션을 제공하기 위해 호스트 시스템의 포트를 노출합니다.
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
--빌드
- 컨테이너를 실행하기 전에 이미지가 빌드되도록 합니다.--force-recreate
- 구성 및 이미지 상태를 고려하지 않고 컨테이너를 다시 만듭니다.--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 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