-
도커 컴포즈(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을 한다면 에러가 발생한다.
왜냐면 컨테이너 사이에 별도의 설정없이 접근하려 했기 때문이다.
멀티 컨테이너 상황에서 네트워크를 연결시켜주기 위해서 사용하는 것이 Docker Compose이다.
Docker compose
docker-compose.yml의 구성은 다음과 같다. 도커의 버전을 명시해 준 다음에 서비스에 컨테이너들을 정의해주는 것이다.
아래에서 하나하나 자세히 살펴보겠다.
docker-compose.yml의 구성을 전체 캡쳐한 것이다.
우선 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 명령어를 사용하면 된다.
'백엔드 관련 강의 공부 > 도커와 CI환경' 카테고리의 다른 글
어플리케이션 코드 수정 후 빌드 - Docker Volume (0) 2023.12.30 간단한 Node.js 앱을 이용한 도커 활용 (0) 2023.12.30 Dockerfile과 도커 이미지 만들기 (0) 2023.12.29 실행 중인 컨테이너에 명령어 전달 - exec 명령어 (0) 2023.12.29 도커 컨테이너의 생명주기 (0) 2023.12.29