7-1. 도커 컴포즈 파일의 구조
version: '3.7' # 1. 도커 컴포즈 파일 형식의 버전
services: # 2. 앱을 구성하는 모든 컴포넌트 열겨
todo-web: #서비스 1개
image: diamol/ch06-todo-list # 단일 컨테이너로 실행
ports:
- "8020:80"
networks: #연결된 네트워크 app-net
- app-net
networks: # 3. 서비스 컨테이너가 연결될 모든 도커 네트워크 열겨
app-net: #네트워크 1개
external: # nat 네트워크가 이미 존재하므로 새로 생성하지 말라
name: nat
docker container run -p 8020:80 --name todo-web --network nat diamol/ch06-todo-list
docker network create nat
ch ./ch07/exercises/todo-list
docker-compose up # 실행
7-2. 도커 컴포즈를 사용해 여러 컨테이너로 구성된 어플리케이션 실행하기
컴포즈 코드
assesslog:
image: diamol/ch04-access-log
iotd:
image: diamol/ch04-image-of-the-day
ports:
- "80"
image-gallery:
image: diamol/ch04-image-gallery
ports:
-"8010:80"
depends_on:
- aceesslog
- iotd
실행코드
ch ./ch07/exercises/image-of-the-day
docker-compose up --detach
도커 컴포즈는 클라이언트 측에서 동작하는 도구이기에 도커 API로 지시를 보내면 도커 엔진 자체는 컨테이너를 실행할 뿐이지 하나의 애플리케이션으로 동작하는지는 알지 못한다.
정리하자면, 도커 컴포즈를 이용해 분산 어플리케이션의 구성 요소들을 의존성에 맞게 실행시킬 수 있고 이를 정밀하게 처리하기 위해서는 컴포즈 파일을 통해 리소스를 관리할 수 있어야 한다.
7-3. 도커 컨테이너 간의 통신
docker-compose up -d scale --iotd=3 # 컨테이너 수 3개로 늘려 데몬 실행
docker container exec -it image-of-the-day_image-gallery_1 cmd # (window)
nslookup accesslog # 같은 주소 출력
exit
# 삭제 후 실행
docker container rm -f image-of-the-day_accesslog_1
docker-compose up -d --scale iotd=3
docker container exec -it image-of-the-day_image_gallery_1 cmd # (window)
nslookup accesslog # 같은 주소 출력
nslookup iotd
exit
7-4. 도커 컴포즈로 애플리케이션 설정값 지정하기
services:
todo-db:
image: diamol/postgres:11.5 # postgres DB 이미지를 app-net과 연결
ports:
- '5433:5432' # PostgreSQL 표준 포트인 5432를 호스트의 5433포트로 공개
networks:
- app-net
todo-web:
image: diamol/ch06-todo-list
ports:
- '8020:80'
environment:
- Database:Provider=Postgres # DB 형식 전달 (환경변수 설정)
depends_on:
- todo-db
networks:
- app-net
secrets:
- source: postgres-connection # 이 값이 기록(db 암호 설정값)
- target: /app/config/secrets.json # 실행시 생성되며
secrets:
postgres-connection: # 이 값을
file: ./config/secrets.json # 에서 읽어오라
cd ./ch07/exercises/todo-list-postgres
docker-compose -f docker-compose-windows.yml up -d # (window)
docker-compose ps
7-5. 도커 컴포즈도 만능은 아니다