개요
Docker Compose는 다중 컨테이너로 구성된 어플리케이션을 관리하기 위한 도구입니다.
YAML 파일에 어플리케이션의 서비스를 구성하고 단일 명령으로 실행합니다.
먼저, 저는 Docker Desktop과 docker-compose를 미리 설치해놓은 환경에서 진행함을 알립니다.
프로세스
Docker Compose는 기본적으로 3단계의 프로세스로 구성되어 있습니다.
1. 어플리케이션의 환경을 Dockerfile로 정의
2. 격리된 환경에서 함께 실행 할 수 있도록 앱을 구성하는 서비스를 docker-compose.yml 파일에 정의
3. docker-compose up 명령어로 실행하면 전체 앱을 시작하고 실행
실습을 위해 간단한 웹 서버를 구현하고 위 프로세스를 진행 해보겠습니다.
폴더 구조
일반적으로 프로젝트의 최상위 경로에 Dockerfile과 docker-compose.yml 파일을 작성합니다.
Project folder
- node_modules
- package.json
- pnpm-lock.yaml
- Dockerfile
- docker-compose.yml
- index.js
Express 웹 서버 구현
게시글의 목적은 Docker Compose를 사용하는 것이므로 아주 간단한 웹 서버를 구현합니다.
// index.js
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("hi");
});
app.listen(3000, () => {
console.log(`server listening at localhost:3000`);
});
Dockerfile 작성
먼저 어플리케이션의 환경을 컨테이너 환경에 구성하기 위해 Dockerfile을 작성합니다.
저는 pnpm을 패키지 매니저로 사용하기 때문에 npm을 최신 버전으로 업데이트하고 pnpm을 글로벌 패키지로 설치합니다.
// Dockerfile
FROM node:16-alpine
WORKDIR /usr/src/app
COPY package.json pnpm-lock.yaml ./
RUN npm i -g npm@latest
RUN npm install -g pnpm
RUN pnpm install
COPY . .
docker-compose.yml 작성
아래 docker-compose.yml 파일은 위에서 작성한 Dockerfile을 빌드하고 실행하는 간단한 명령으로 이루어져 있습니다.
build의 context는 이미지를 빌드할 도커파일의 위치를 작성하면 됩니다.
// docker-compose.yml
services:
web:
build:
context: .
volumes:
- .:/usr/src/app
command: npm run start
ports:
- 3000:3000
이제 백그라운드에서 어플리케이션을 실행하기 위해 아래 명령어를 터미널에 실행 합니다. 아래 명령어중 -d 옵션이 컨테이너를 백그라운드 환경에서 실행 시키는 옵션입니다.
$ docker-compose up -d
결과
아주 간단한 웹 서버를 컨테이너 환경에 빌드하고, Docker Compose를 통해 성공적으로 실행 하였습니다.
'개발 공부 > Docker' 카테고리의 다른 글
docker-compose.yml 환경변수 설정 (0) | 2023.03.15 |
---|---|
Dockerfile과 docker-compose.yml의 차이 (0) | 2023.03.12 |
Docker란 (0) | 2023.03.12 |