
Docker Compose는 단일 서버에서 여러 개의 컨테이너를 하나의 서비스로 정의해, 컨테이너 묶음을 한 번에 관리할 수 있는 환경을 제공하는 Docker의 관리 도구이다.
Docker는 하나의 컨테이너만 실행하는 데 적합하지만, 실제 프로젝트에서는 여러개의 컨테이너가 함께 작동해야한다.
예를 들어 웹 서버(Node.js)와 데이터베이스(PostgreSQL), 캐시 서버(Redis) 등이 함께 실행되어야할 때 사용한다.
Docker Composer를 쓰면 좋은 점
docker-compose up 한 줄로 프로젝트 전체 실행Docker Compose는 보통 최신 Docker에 내장되어 있겠지만, 버전을 확인하고 최신화하려한다.
docker compose version
sudo apt update
sudo apt install docker-compose -y
설치 후 설치확인 명령어를 통해 버전을 확인할 수 있다.
설치만 하고 끝내기 아쉬우니 Docker Compose를 활용해보려 한다.
Node.js와 PostgreSQL을 동시에 실행하는 것을 구성해보려한다.
mkdir compose-example
cd compose-example
mkdir server
cd server
server/index.js 생성
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('리눅스 한 학기 살기 - Docker Compose!');
});
app.listen(port, () => {
console.log(`http://localhost:${port} 에서 서버 실행 중`);
});
server/package.json 생성
{
"name": "compose-example",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.2"
}
}
server/Dockerfile
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
cd ..
docker-compose.yml
version: '3'
services:
web:
build: ./server
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: testdb
docker compose up
브라우저 http://localhost:3000 에 접속하고,
"리눅스 한 학기 살기 - Docker Compose!" 라는 문구가 출력되면 성공이다.
Docker Compose를 활용하면 복잡한 서비스 구조를 간단히 정의하고 실행할 수 있다. 실제 실무에서도 거의 모든 프로젝트에 사용되며, FastAPI, Redis, Nginx, Compose로 함께 구성해볼 수 있다.