ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 도커 컴포즈(Docker Compose)
    백엔드 관련 강의 공부/도커와 CI환경 2023. 12. 30. 22:11

    docker compose

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

     

     

    server.js

    const express = require("express");
    const redis = require("redis");
    
    // 레디스 클라이언트 생성
    const client = redis.createClient({
        host:"redis-server", // host는 docker.compose.yml 파일에 명시한 컨테이너 이름
        port: 6379
    })
    
    const app = express();
    
    // 새로고침을 할 때마다 숫자가 1씩 증가하는 프로그램
    app.get('/', async (req, res) => {
    
        await client.connect;
        let number = await client.get('number');
        
        if (number === null) {
            number = 0;
        }
        console.log('Number: ' + number);
        res.send("숫자가 1씩 올라갑니다. 숫자: " + number)
        
        await client.set("number", parseInt(number) + 1)
        await client.disconnect();
    })
    
    app.listen(8080);
        
    console.log('Server is running');

    도커 compose를 이용해보기 위해서 페이지에 접근할 때마다 숫자가 1씩 증가하는 프로그램을 express와 redis를 이용해서 만들었다.

     

     

     

    Dockerfile

    FROM node:10
    
    WORKDIR /usr/src/app
    
    COPY ./ ./
    
    RUN npm install
    
    CMD [ "node", "server.js" ]

    Dockerfile은 이전에 했던 것과 비슷하게 간단하게 만들었다.

     

     

     

     

     

    우선 레디스를 사용하기 위해서 레디스 서버를 켜야한다.

    docker run redis를 이용해서 redis 서버를 켰다.

     

     

    로컬에 있는 파일들도 도커 이미지로 만들어줬다.

     

     

     

    여기까지는 기존에 했던 것들이며 도커 컴포즈를 배우기 위해 해놓은 것들이다.

     

    그런데 여기서 docker run을 한다면 에러가 발생한다.

    사진 : 인프런 강의 - 따라하며 배우는 도커와 CI환경

    왜냐면 컨테이너 사이에 별도의 설정없이 접근하려 했기 때문이다.

     

    멀티 컨테이너 상황에서 네트워크를 연결시켜주기 위해서 사용하는 것이 Docker Compose이다.

     

     

     

    Docker compose

    사진 : 인프런 강의 - 따라하며 배우는 도커와 CI환경

    docker-compose.yml의 구성은 다음과 같다. 도커의 버전을 명시해 준 다음에 서비스에 컨테이너들을 정의해주는 것이다.

    아래에서 하나하나 자세히 살펴보겠다.

     

     

    docker-compose.yml의 구성을 전체 캡쳐한 것이다.

    사진 : 인프런 강의 - 따라하며 배우는 도커와 CI환경

    우선 version은 도커 컴포즈의 버전을 의미한다. 그 다음 services에 redis-server와 node-app이 존재한다.

     

    redis-server에는 컨테이너에서 사용하는 이미지를 지정해준다. node-app에서는 현재의 디렉토리를 의미하는 .을 넣어주고, 현재 디렉토리의 Dockerfile을 사용하는 것이다. 그 다음 port도 지정해줬다.

     

     

    docker-compose up 명령어로 redis와 node-app을 같이 실행할 수 있다.

     

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

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

     

     

    소스 코드에 수정을 할 때에는 다시 빌드를 해야하기 때문에 docker-compose up --build를 이용하는 것이 좋다.

     

     

    도커 컴포즈를 중단하고 싶다면 docker-compose down 명령어를 사용하면 된다.

Designed by Tistory.