Docker Swarm

 두 가지 모드가 있다

  1. 클래식 스웜
  2. 스웜 모드
차이점
  • 클리식 스웜은 여러 대의 도커 서버를 관리하는 하나의 접근점을 제공
  • 스웜 모드는 MSA 컨테이너를 다루기 위한 클러스터링 제공
  • 클래식 스웜은 분산 코디네이터나 에이전트를 별도로 설치해야 함
  • 스웜 모드는 컨테이너에서 기본적으로 제공
  • 대부분 도커 서버를 클러스터링 해서 사용하기 때문에 스웜 모드로 많이 사용.
cf) 분산 코디네이터(Distributed Coordinator) = etcd, zookepper, consul 등

스웜 모드 확인
$> docker info | grep Swarm
Swarm: inactive

스웜 모드 클러스터 구축

아래 서버 3개라고 가정
  1. swarm-manager : 10.10.10.111
  2. swarm-worker1 : 10.10.10.201
  3. swarm-worker2 : 10.10.10.202
1번 매니저에서 클러스터 시작
$> sudo docker swarm init --advertise-addr 10.10.10.111
--advertise-addr : 다른 도커에서 접근할 매니저 노드의 IP
출력에 클러스터 등록에 사용할 token이 나온다.
...
docker swarm join --token ~~~~ 10.10.10.111
...

2번 워커 노드에서 클러스터 등록

$> sudo docker swarm join --token {위에 토큰} 10.10.10.111

3번 워커 노드에서 클러스터 등록

$> sudo docker swarm join --token {위에 토큰} 10.10.10.111

1번 매니저에서 등록 노드 확인

$> docker node ls

1번 매니저에서 토큰 확인법

매니저 등록 토큰
$> docker swarm join-token manager
$> docker swarm join-token --rotate manager -> 토큰 변경이 필요할때
워커 등록 토큰
$> docker swarm join-token worker

2, 3번에서 클러스터 나가기

$> docker swarm leave
매니저는 --force 추가

클러스터 나간 워커 제외하기(매니저에서)
$> docker node rm {ID | HOSTNAME}

cf) ID | HOSTNAME은 docker node ls에 나와 있는 값

매니저로 설정(매니저에서)

워커 -> 매니저로
$> docker node promote {ID | HOSTNAME}
매니저 -> 워커로
$> docker node demote {ID | HOSTNAME}


도커 스웜 모드 서비스

  • 서비스는 같은 이미지에서 생성된 컨테이너의 집합
  • 서비스 내의 컨테이너는 task 라고 부른다
매니저에서
서비스 생성
$> docker service create {이미지} [명령어]
--replicas : 태스트(=replica) 갯수 설정
--with-registry-auth : 이미지 pull 시에 매니저에서만 로그인하면 워커에서는 필요 없음.
ex)
$> docker service create ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

운영중인 서비스의 태스크 갯수 증가
$> docker service scale {서비스명}={갯수}
ex)
$> docker service scale myweb=4

서비스 리스팅
$> docker service ls
서비스 세부 설정 확인
$> docker service inspect --pretty {ID | NAME}
태스크 조회
$> docker service ps {ID | NAME}
태스트 삭제
$> docker service rm {ID | NAME}
롤링 업데이트
$> docker serivce update --image {이미지명} {ID | NAME}
롤백
$> docker service rollback {ID | NAME}

Global 모드

  • 도커 서비스의 기본 생성 모드는 replica 모드
  • replica는 클러스터 어디에 설정될지 알 수 없지만 global 모드는 하나의 클러스터에 반드시 하나의 task가 생성 된다.
  • 실 서비스에는 잘 사용되지 않는다.
  • 클러스터마다 모니터링 에이전트등을 설치할 때 효율적
$> docker service create --mode globle --name mynginx nginx

롤링 업데이트

  • 기본적으로 하나씩 업데이트 된다.
  • 커스텀하게 설정하려면 service 생성시에 옵션을 줄 수 있다.
$> docker service create --replicas 4 --name myweb --update-delay 10s --update-parallelism 2 nginx:1.10

secret, config 설정

secret : config의 암호화 저장
$> docker {secret | config} create {NAME} {FILE}
ex)
$> echo 1q2w3e4r | docker secret create my_mysql_password -

리스팅
$> docker {secret | config} ls

댓글

이 블로그의 인기 게시물

[Protocol] WIEGAND 통신

Orange for Oracle에서 한글 깨짐 해결책

[UI] GNB·LNB·SNB·FNB 용어 설명