[5] Docker Compose
[1] docker compose란?
: 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구
[1-1] redis
: 메모리 기반의 키-값 구조 데이터 관리 시스템임
모든 데이터를 메모리에 저장하고 빠르게 조회할 수 있는 비관계형 DB
영속적으로 보관이 가능함 -> 서버를 재부팅해도 사용 가능함
[1-2] node.js 환경에서 redis 사용하기
1) redis-server 작동시키기
2) redis module 다운 받기
3) redis에서 제공하는 createClient() 함수로 redis.createClient로 client 생성
도커 환경에서 redis client 생성 시 주의 사항)
도커를 사용하지 않는 환경에서 redis 서버를 작동하면 host 옵션을 url로 주지만
도커 compose를 사용할 때는 host 옵션을 docker-compose.yml 파일에 명시한 컨테이너 이름으로 준다.
[1-3] dockerfile 작성하기 -- docker-compose-app_4
FROM node:10
WORKDIR /usr/src/app
COPY ./ ./
RUN npm install
CMD ["node", "server.js"]
[2] docker container 간 통신할 때 나타나는 에러
[2-1]
1) docker run redis -- redis 키기
2) image 생성 -> 컨테이너 키기 -- docker build -t jangmj80/docker-compose-app ./
3) docker run jangmj80/docker-compose-app하면 redis로의 연결이 실패했다고 나옴
컨테이너 간의 연결이 필요함 --> docker compose 사용
[2-2] Docker Compose 파일 작성하기
<docker-compose.yml>
version: "3" // 버전
services:
redis-server: // 컨테이너 이름
image: "redis" // 컨테이너에서 사용하는 이미지
node-app:
build: . // 도커 파일을 읽어서 image를 빌드해야하는데 docker 파일이 있는 위치, .은 yml과 Dockerfile이 같은 파일에 있는 것
ports:
-"5002:8080" //로컬:컨테이너
[2-3] 실행 명령어
: docker-compose up
docker-compose up --build로 수정
[2-4] docker compose로 컨테이너 멈추기
: docker compose down
1) main terminal에서 번거롭게 down 처리
- cd ./Users/.... /docker-compose-app
- docker-compose down 명령어 사용
2) detach: 앱을 백그라운드에서 실행시킨다 -- (앱에서 나오는 output을 표출하지 않는다.)
- docker compose up --build: 이미지가 있든 없든 이미지를 빌드하고 컨테이너 시작
(반면 --build가 없으면 이미지가 없을 때 이미지를 빌드하고 컨테이너 시작)
실습)
docker-compose up -d --build하고 docker ps 하면
이후에 docker compose down해서 중단할 수 있음