반응형
1. 도커 컴포즈(Docker Compose)란?
Compose란 사전적인의미로는 "구성하다"라는 뜻의미인데, 말 그대로 Docker Compose란 여러 컨테이너를 모아서 하나의 어플리케이션을 구성하는 것을 말한다.
2. 도커 컴포즈(Docker Compose) 실행 예제.
(1) 개요
- express와 redis를 사용하여 새로 고침할때 마다 +1 씩 카운팅 하기.
- express : node.js를 이용하여 간단하게 REST서버를 구성하는 역할(따로 공부 필수).
- redis : "키-값"으로 구성된 영속성이 보장되는 인메모리 데이터 저장소(따로 공부 필수).
(2) node.js 서버를 작동하기 위한 package.json 작성
// 파일명 : package.json
{
"name": "docker-compose-app",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start" : "node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"express" : "4.17.1",
"redis" : "3.0.2"
},
"author": "",
"license": "ISC"
}
- node.js 서버 실행시 반드시 필요한 파일로 이름은 반드시 package.json으로 만들어야 한다.
(npm init 명령어로 간편하게 작성 가능) - entry point 의 이름은 자유롭게 변경 가능하다.
ex) index.js 등등.. - 어플리케이션을 실행하는데 필요한 의존성 주입은 dependencies 에 작성을 해줘야 하는데 버전에 따라 오류가 생길 수 있으므로 주의가 필요하다.
(3) entry point 작성
// 파일명 : server.js
const express = require("express");
const redis = require("redis");
// 레디스 클라이언트 생성
const client = redis.createClient({
// host 내용은 docker 환경이기에 docker-compose.yml 파일에서 설정한 이름으로 적어준다.
// 일반적인 환경에서는 도메인 이름을 적어줘야 한다. (redis 공부로 보충하기)
host : "redis-server",
port : 6379
});
const app = express();
// 숫자는 0부터 시작.
client.set("number", 0);
app.get('/', (req, res) => {
client.get("number", (err, number) => {
// 현재 숫자를 가져온 후에 1씩 증가
client.set('number', parseInt(number) + 1);
res.send('숫자가 1씩 올라갑니다. 숫자 : ' + number);
})
})
app.listen(8080);
console.log('Server is running');
- 위에 package.json 내용 중 entry point 에 작성한 이름대로 파일명을 작성해주어야 한다.
- redis host이름의 경우에는 일반서버인지 도커환경인지에 따라 작성법이 다르므로 확인이 필요하다
현재는 도커 환경에서 실습 중이므로 docker-compose.yml 내에서 설정한 이름으로 지정해줘야 한다.
(4) 도커 이미지 생성을 위한 Dockerfile 작성
# 파일명 : Dockerfile
FROM node:10
WORKDIR /usr/src/app
COPY ./ ./
RUN npm install
CMD ["node", "server.js"];
3. 도커 컴포즈(Docker Compose) 예제 실행시 유의사항.
- redis를 실행하기 위해서는 먼저 redis server를 띄우고 redis client를 띄워야 한다.
- 하지만 하나의 컨테이너가 아니라 2개 이상의 멀티 컨테이너로 구성되어 있기 때문에 별도의 설정없으면 컨테이너끼리 통신이 이루어지지 않기 대문에 redis가 실행되지 못하고 에러가 난다.
- 이를 보완하기 위해서는 docker-compose.yml 파일을 통해서 설정이 필요하다.
4. docker-compose.yml 파일 작성.
(1) docker-compose.yml 파일 구성
(2) docker-compose.yml 작성 예제
- YAML 파일이므로 앞에 띄어 쓰기에 주의가 필요하다
(YAML 작성법 추가로 공부 필요!)
(3) docker-compose 실행
1) docker-compose 실행 명령어
docker-compose up --build
- 뒤에 --build 옵션을 붙여주어야 docker-compose 실행시에 docker-compose.yml 파일에 맞게 다시 빌드하여 실행한다.
2) docker-compose 실행 로그
5. docker-compose up VS docker-compose up --build 차이
- docker-compose up : 이미지가 없을때 빌드하고 컨테이너 시작
- docker-compose up --build : 이미지 유무에 상관없이 이미지 빌드 후 컨테이너 시작
6. 도커 컴포즈(docker-compose) 중지
docker compose down
- 다른 터미널을 실행후 docker-compose.yml 파일이 있는 경로로 이동하여 명령어를 실행해줘야 한다.
- 아니면, docker-compose 실행 시에 -d 옵션을 줘서 백그라운드에서 실행 시키면 하나의 터미널에서 제어 가능하다.
ex) docker-compose up -d --build
반응형
'개발 일기라기 보단 메모장 > Docker' 카테고리의 다른 글
08. 도커(docker) 이미지 빌드 예제 (0) | 2021.12.04 |
---|---|
07. 도커(docker) 이미지 만들기 (0) | 2021.11.29 |
06. 도커(docker) 컨테이너의 생명주기 및 사용법 (0) | 2021.11.17 |
05. 도커(docker) 이미지로 컨테이너 만들기 (0) | 2021.11.17 |
04. 도커(Docker) 컨테이너란? (가상화 기술과의 비교) (0) | 2021.11.16 |