: 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구
docker compose를 이용해 페이지를 리프레쉬했을 때 숫자가 1씩 증가하는 간단한 앱을 만들어 본다.
const express = require("express");
const redis = require("redis");
//레디스 클라이언트 생성
const client = redis.createClient({
host: "redis-server", //docker-compose.yml에서 명시한 컨테이너 이름
port: 6379
})
const app = express();
client.set("number", 0);
app.get('/', (req, res) => {
client("number", (err, number) => {
//숫자 가져온 후 1씩 올려준다
client.set("number", parseInt(number)+1);
res.send("숫자가 1씩 올라간당. 숫자: "+ number);
})
})
app.listen(8080);
console.log("server is running");
FROM node:10
#workdirectory 지정
WORKDIR /usr/src/app
#애플리케이션 관련 소스 복사
COPY ./ ./
#종속성 다운
RUN npm install
CMD ["node", "server.js"]
앱을 실행하기 전, 레디스를 실행해줘야 한다. 하지만 두 컨테이너 간 접근이 불가능하기에 에러가 발생하게 되어 Docker Compose를 이용해야 한다.
version: "3"
services:
redis-server:
image: "redis"
node-app:
build: . #현재 디렉토리에 있는 DockerFile 이용, 같은 디렉토리에 존재
ports:
- "5000:8080" #로컬포트, 컨테이너포트
아래의 명령을 통해 실행을 할 수 있다.
#이미지가 없을 때 이미지를 빌드하고 컨테이너 시작
docker-compose up
#이미지가 있든 없든 이미지를 빌드하고 컨테이너 시작
docker-compose up --build
# -d: detached 모드로서 앱을 백그라운드에서 실행, output을 보여주지 않는다.
docker-compose up -d --build
다른 터미널에서 아래의 명령을 통해 멈출 수 있다.
docker-compose down