반응형
SMALL
Swarm Stack
- 스택
- 서비스들의 묶음 단위가 스택
- 서비스가 여러개 모이면 스택이라는 공간
- 이 스택이라는 공간에 데이터베이스 컨테이너, 웹서버 컨테이너 등등을 구축하게되는 것
- 서비스는 서비스 하나에 여러가지 이미지를 만들 수 없음
- 스택은 여러 서비스 함께 다룰 수 있음
<순서대로 진행>
14.1 네트워크
- 스택의 네트워크
- 스택을 사용하여 배포된 서비스 그룹은
overlay
네트워크!- 여러 도커 호스트에 걸쳐 배포된 컨테이너 그룹을(서비스 복제하면 어떤 dind 에 배정될지 랜덤이므로 걸쳤다고 표현) 그 그룹끼리 같은 네트워크에 배치하기 위한 기술
overlay
네트워크여야 서로 다른 호스트(우리 공부에서는 dind를 말함)에 위치한 컨테이너 끼리 통신할 수 있음(echo 끼리..등등..)
- 스택을 사용하여 배포된 서비스 그룹은
- 따라서 스택 이용하려면 제일 중요한 네트워크 먼저 구성!
- ch03 이라는 이름의 네트워크 만들기
docker network create
- ch03 이라는 이름의 네트워크 만들기
매니저에서
$ docker network create --driver=overlay --attachable ch03
iy59gk71bobhnvchq54k6m1g3
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
iy59gk71bobh ch03 overlay swarm
## ch03 네트워크 생긴거 확인
- --driver
- 네트워크 방식 지정
overlay
로 지정
- 네트워크 방식 지정
- --attachable
- 네트워크 이름(?)
14.2 스택 생성
14.2.1 my-webapi.yml
야물파일(컴포즈파일) 만들기
- 스웜 폴더에서
my-webapi.yml
- 스택을 생성하기 위한 컴포즈파일에는 스케일 인, 스케일 아웃, 제약 조건 부여 등이 가능
- 스택에서는 서비스 아래 컨테이너라기보다 서비스 아래 서비스인 것
- 근데 컨테이너 일 수 있음..
- 그 서비스 안에서 또 컴포즈 파일 통해 컨테이너 생성 가능
version: "3"
services:
api:
image: registry:5000/example/echo:latest
deploy:
replicas: 3
placement:
constraints: [node.role != manager]
networks:
- ch03
nignx:
image: gihyodocker/nginx-proxy:latest
deploy:
replicas: 3
placement:
constraints: [node.role != manager]
environment:
BACKEND_HOST: echo_api:8080
networks:
- ch03
depends_on:
api
networks:
ch03:
external: true
- deploy
- replicas: 3
- api 컨테이너 3개 만들어라
- placement
- contraints: [node.role != manager]
- 컨테이너 배치 전략
- node(컨테이너)의 role이 manager가 아닌 node(컨테이너)에 배포(설치해라)
- contraints: [node.role != manager]
- replicas: 3
- environment
- 환경변수 설정들
- BACKEND_HOST:
- 요청을 전송할 대상을 설정하는 것임
depends_on
에 의해 먼저 스택으로 배포된 api의 서비스명인 echo_api의 포트 8000을 설정
- BACKEND_HOST:
- 환경변수 설정들
- networks
- ch03
- 맨 처음 만들어준 네트워크 사용
- ch03
14.2.2 스택 배포하기
- 매니저에서
매니저
$ docker stack deploy -c "file path" <스택이름>
$ docker stack deploy -c /stack/my-webapi.yml echo
Creating service echo_api
Creating service echo_nignx
$
- "file path"
- .yml 파일의 경로
- 지금
my-webapi.yml
파일을 윈도우에서 만들었다! 리눅스에 있어야 리눅스에서 배포를 하는데?- 우리 처음 dind 컨테이너 만들 때
docker-compose.yml
에서 볼륨마운트 해줬잖아 - ./stack:/stack
- 이게 지금 공유 폴더라는 이야기이므로
my-webapi.yml
을 호스트(윈도우)의 stack 폴더에 넣어주면 리눅스의 stack 폴더에도 생겨있음
- 우리 처음 dind 컨테이너 만들 때
- <스택이름>
- 스택 이름은 임의로 써주기
14.2.3 스택 확인하기
매니저
$ docker stack ls
NAME SERVICES ORCHESTRATOR
echo 2 Swarm
- echo 스택안에 서비스 2개
14.2.4 서비스 확인하기
- 모든 스택의 서비스 리스트
매니저
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
tftbv99l6xzw echo_api replicated 3/3 registry:5000/example/echo:latest
ozomobuvyf4t echo_nignx replicated 3/3 gihyodocker/nginx-proxy:latest
14.2.5 특정
스택이 가지고 있는 서비스 리스트 확인하기
스택이 여러 개 일 때
매니저
$ docker stack services <스택명>
$ docker stack services echo
ID NAME MODE REPLICAS IMAGE PORTS
tftbv99l6xzw echo_api replicated 3/3 registry:5000/example/echo:latest
ozomobuvyf4t echo_nignx replicated 3/3 gihyodocker/nginx-proxy:latest
- echo_api
- echo 스택의 api 서비스
14.2.6 특정
스택이 가지고 있는 특정
서비스에 대한 정보 확인하기
- 복제된 서비스 리스트까지 다 보여줌
- 어디에 복제됐는지 dind 컨테이너 ID 확인 가능
매니저
$ docker service ps <스택의특정서비스명>
** 스택의 서비스 명
(1) 스택 deploy 시 지은 스택 이름
(2) 스택 컴포즈 파일(.yml)에서 서비스 만들 때 지은 서비스 이름
(1)_(2)
- echo_api
$ docker service ps echo_api
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
x6feo6en22wx echo_api.1 registry:5000/example/echo:latest aed40f88b205 Running Running About a minutes ago
ovsmb8uukugc echo_api.2 registry:5000/example/echo:latest aed40f88b205 Running Running About a minutes ago
uc4hy087crnm echo_api.3 registry:5000/example/echo:latest aed40f88b205 Running Running About a minutes ago
- echo_api.1
- echo 스택의 api 서비스 중 1번 (복제했기 때문)
- NODE
- 복제된게 설치된 dind 컨테이너의 ID
14.2.7 복제된 서비스는 어디에?
$ docker service ps <스택의특정서비스명>
- 하면 NODE에 어디로 복제됐는지 나옴
14.2.8 설치된 dind 컨테이너로 이동
매니저
$ exit
worker01
$ docker ps
## worker01에 설치(배포)된 서비스(컨테이너) 프로세스 목록이 나옴
반응형
LIST
'Docker' 카테고리의 다른 글
[Docker] 도커를 이용한 투표 서비스 인프라 구축 (Voting App) (0) | 2020.04.05 |
---|---|
[Docker] 도커 Visualizer 사용하는 방법 (0) | 2020.04.04 |
[Docker] Swarm 서비스 실습 (서비스 관련 명령어) (0) | 2020.03.31 |
[Docker] Swarm / DinD 실습 - registry 컨테이너 (0) | 2020.03.30 |
[Docker] 스웜이란? (What is Docker Swarm?) / 도커 인 도커 (DinD) (0) | 2020.03.29 |