개발 공부/Docker

Docker Compose 사용해보기

게으른 제이 2023. 4. 4. 03:08

개요

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를 통해 성공적으로 실행 하였습니다.