# 1. JSON파일을 기반으로 컨피그 객체 생성
docker config create todo-list-config ./todo-list/configs/config.json # 로컬의 JSON파일로 컨피그 객체를 생성
docker config ls # 컨피그 객체의 설정값 확인
docker config inspect --pretty todo-list-config # pretty 플래그를 이용해 컨피그 객체의 내용 확인
# 2. 컴포즈 파일에 컨피그 객체 지정
services:
todo-web:
image: diamol/ch06-todo-list
ports:
- 8080:80
configs: # 컨피그 객체의 내용이 target으로 옮겨진다.
- source: todo-list-config
target: /app/config/config.json
#...
configs:
todo-list-config:
external: true # 이미 config는 외부에 지정되어 있다. 즉, 여기서는 컴포즈 파일의 정의를 수행하고 위에서 실제로 가져오는 것
# 3. 컨피그 객체가 지정된 컴포즈 파일을 애플리케이션에 반영
docker stack deploy -c ./todo-list/v3.yml todo # 수정된 정의에 따라 애플리케이션 배포
docker stack services todo # 스택에 포함된 서비스 목록 확인
# 1. 로컬 파일의 내용으로 비밀값을 만들고 정보를 확인
docker secret create todo-list-secret ./todo-list/secrets/secrets.json # 로컬의 JSON파일로 비밀값을 생성
docker secret inspect --pretty todo-list-secret # 새로 만든 비밀값의 정보를 확인
# 2. 비밀값과 컨피그 객체를 사용해 애플리케이션 설정 yml파일
services:
todo-web:
image: diamol/ch06-todo-list
ports:
- 8080:80
configs:
- source: todo-list-config
target: /app/config/config.json
secrets: # 비밀값 가져오기
- source: todo-list-secret
target: /app/config/secrets.json
#...
secrets: # 비밀값의 정의
todo-list-secret:
external: true
docker stack deploy -c ./todo-list/v4.yml todo # 최신 버전의 애플리케이션 배포
docker stack ps todo # 스택에 포함된 레플리카 정보 확인
# 1. 노드에 레이블 부여
docker node update --label-add storage=raid $(docker node ls -q) # 도커 노드들의 식별자를 찾아 label add한다.
# 2. 스웜에서 실행하는 서비스에 볼륨 마운트 및 제약 사항 설정
services:
todo-db:
image: diamol/postgres:11.5
volumes:
- todo-db-data: /var/lib/postgresql/data # 볼륨 지정
deploy:
placement:
constraints:
- node.labels.storage == raid # 노드의 레이블 저장소 지정
#...
volumns:
todo-db-data:
#이게 끝임. 스웜의 기본 볼륨 드라이버를 사용하여 로컬 디스크 볼륨들을 생성할거임
# 3. 로컬 볼륨 업데이트 배포
docker volume ls -q # 노드에 존재하는 모든 볼륨의 식별자 목록을 출력
docker stack deploy -c ./todo-list/v5.yml todo # 스택 업데이터
docker volume ls -q # 볼륨 목록 확인(레이블이 부여된 볼륨은 스택을 제거해도 삭제되지 않는다. 즉, 컨테이너 교체에도 이터가 안전하다)
꽤나 내용이 어렵네..