DevOps 환경에서 어플리케이션 배포는 매우 중요한 과정입니다. 특히 Docker를 활용하면 애플리케이션의 배포와 관리를 더욱 간편하게 할 수 있습니다. 이번 포스트에서는 Docker Compose를 사용하여 간단한 웹 애플리케이션을 배포하는 방법을 설명하겠습니다.
Docker Compose란?
Docker Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행할 수 있는 도구입니다. 하나의 YAML 파일을 사용하여 여러 서비스를 구성할 수 있으며, 이를 통해 개발, 테스트, 배포 환경을 간편하게 설정할 수 있습니다.
사전 준비
이번 예제에서는 간단한 Node.js 웹 애플리케이션과 MongoDB 데이터베이스를 사용해 보겠습니다. 다음을 설치해야 합니다:
- Docker
- Docker Compose
프로젝트 구조
먼저, 프로젝트 구조를 아래와 같이 설정합니다:
my-app/
│
├── docker-compose.yml
├── app/
│ ├── Dockerfile
│ ├── package.json
│ └── server.js
Node.js 애플리케이션 작성
app/ 디렉토리에 package.json 파일을 생성합니다:
{
"name": "my-app",
"version": "1.0.0",
"description": "A simple Node.js web application",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.17.1",
"mongoose": "^5.10.9"
}
}
이제 server.js 파일을 작성합니다:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const PORT = process.env.PORT || 3000;
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://mongo:27017/mydb';
mongoose.connect(MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('MongoDB connected'))
.catch(err => console.error(err));
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(PORT, () => {
console.log(Server is running on port ${PORT});
});
마지막으로 Dockerfile을 작성합니다:
FROM node:14
# 작업 디렉토리 생성
WORKDIR /usr/src/app
# package.json 및 package-lock.json 복사
COPY package*.json ./
# 의존성 설치
RUN npm install
# 모든 파일 복사
COPY . .
# 애플리케이션 포트
EXPOSE 3000
# 애플리케이션 시작
CMD ["npm", "start"]
Docker Compose 파일 작성
프로젝트 루트에 docker-compose.yml 파일을 생성합니다:
version: '3.8'
services:
app:
build:
context: ./app
ports:
- "3000:3000"
environment:
MONGODB_URI: mongodb://mongo:27017/mydb
depends_on:
- mongo
mongo:
image: mongo:4.4
ports:
- "27017:27017"
애플리케이션 실행
이제 모든 설정이 완료되었습니다. 다음 명령어로 Docker Compose를 사용하여 애플리케이션을 실행합니다:
docker-compose up --build
위 명령어는 Docker 이미지 빌드와 컨테이너 실행을 동시에 수행합니다. 실행이 완료되면 브라우저에서 http://localhost:3000으로 접속하여 "Hello, World!" 메시지를 확인할 수 있습니다.
마무리
이번 포스트에서는 Docker Compose를 사용하여 간단한 Node.js 웹 애플리케이션과 MongoDB 데이터베이스를 배포하는 방법을 알아보았습니다. Docker Compose 덕분에 여러 서비스를 간편하게 관리하고 배포할 수 있는 장점을 누릴 수 있습니다. 더 복잡한 애플리케이션에서도 이러한 방식을 확장하여 사용할 수 있으며, DevOps 도구 체인에서 매우 유용하게 활용될 것입니다. Docker와 Docker Compose를 통해 자동화된 배포 프로세스를 만들어가는 여정을 계속해 보시기 바랍니다.