[따라하며 배우는 도커와 CI 환경] Docker Compose

Jimin Lim·2022년 5월 23일
0

Docker

목록 보기
5/9
post-thumbnail

✅ Docker Compose

: 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구

docker compose를 이용해 페이지를 리프레쉬했을 때 숫자가 1씩 증가하는 간단한 앱을 만들어 본다.

  • Redis: 메모리 기반 키-값 구조의 데이터 관리 시스템, 빠르게 조회 가능

🔗 소스코드 작성

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");

🔗 Dockerfile 작성

FROM node:10

#workdirectory 지정
WORKDIR /usr/src/app

#애플리케이션 관련 소스 복사
COPY ./ ./

#종속성 다운
RUN npm install

CMD ["node", "server.js"]

🔗 Docker Container 간 통신

앱을 실행하기 전, 레디스를 실행해줘야 한다. 하지만 두 컨테이너 간 접근이 불가능하기에 에러가 발생하게 되어 Docker Compose를 이용해야 한다.

🔗 Docker Compose 파일 작성

version: "3"
services:
  redis-server:
    image: "redis"
  node-app:
    build: . #현재 디렉토리에 있는 DockerFile 이용, 같은 디렉토리에 존재 
    ports:
      - "5000:8080" #로컬포트, 컨테이너포트
  • version: 도커 컴포즈의 버전
  • services: 이곳에 실행하고자 하는 컨테이너 정의

✅ Docker Compose 컨테이너 실행, 중지

🔗 실행

아래의 명령을 통해 실행을 할 수 있다.

#이미지가 없을 때 이미지를 빌드하고 컨테이너 시작
docker-compose up

#이미지가 있든 없든 이미지를 빌드하고 컨테이너 시작
docker-compose up --build

# -d: detached 모드로서 앱을 백그라운드에서 실행, output을 보여주지 않는다.
docker-compose up -d --build 

🔗 중지

다른 터미널에서 아래의 명령을 통해 멈출 수 있다.

docker-compose down
profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️

0개의 댓글