docker가 무엇인지, docker compose가 무엇인지
대략적으로 앞서 다뤘으니,
이젠 실전으로 !!
docker compose를 활용하여 엔진엑스 + 몽고db + 익스프레스 환경을 셋팅하려고 합니다.
docker에서 엔진엑스, 몽고db는 도커 허브에서 제공 하고 있으니 해당 사이트를 이용합니다.
docker compose버젼은 3으로 진행합니다.
https://docs.docker.com/compose/compose-file/
실전에 들어가기 전에 ...
version: "3"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [node.role == manager]
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
frontend:
backend:
volumes:
db-data:
위의 코드는 compose file version 3의 예시 입니다.
<key>:<option>:<value>의 구조로 Compose 파일이 구성이 됩니다.
멀티 컨테이너 앱, 서비스 정의 및 스웜모드를 구현을 위한 version3 Compose는시작 튜토리얼을 통해 익힙니다.
- docker-compose.yml 을 만듦.
- 새로운 서비스 추가 및 재 배포
Composefile은 services, networks 그리고 volumes를 정의하고 있는 YAML파일입니다.
시작!
해당 구조를 가지고 프로젝트를 진행해보려고 합니다.
step1. 작업 폴더를 만듦니다.
step2.docker-compose.yml 파일을 만듧니다.
step3. 해당 파일을 서비스에 맞게 작성합니다.
.. 여기서 막힌 이슈 ,
<key>:<option>:<value>의 구조로 Compose 파일이 구성이 된다고 하였는데,
service, networks, volumes라는 것이 key일지, option에 해당할지 ..
아니면 계층 구조를 가지는 건지 ...
>>>1depth , 2depth, 3depth .. 처럼 계층을 가진 형태의 depth를 가짐.
service에 대한 도큐먼트는
https://docs.docker.com/get-started/part3/#about-services 에서 알 수 있다.
service의 값은 자신이 실행할 서비스명을 기입하면 됩니다.