클러스터 초기화 및 설정

# 클러스터 초기화
docker swarm init # 옵션으로 --advertise-addr 매니저노드ip를 입력하면 워커가 조인 할 수 있다

# 매니저 노드를 추가할때 필요한 토큰 출력
docker swarm join-token manager

# 워커 노드를 추가할때 필요한 토큰 출력
docker swarm join-token worker

# 도커 노드 탈퇴
docker swarm leave # 탈퇴할 노드에서 실행해야 되며, 안전하게 분리할때 사용

클러스터 상태 확인

# 스웜에 포함된 모든 노드 확인
docker node ls

# 도커의 전체 정보 출력
docker info

서비스 관리

# 서비스 생성 및 클러스터에 배포
docker service create --name web --replicas 3 -p 80:80 nginx # 3개의 nginx 인스턴스를 생성하고 80번 포트로 서비스한다.

# 클러스터에서 실행중인 모든 서비스 확인
docker service ls

# 특정 서비스 상태 확인
docker service ps 서비스이름

# 특정 서비스 인스턴스 갯수 조정
docker service scale web=5 # web 서비스의 인스턴스를 5개로 조정

# 기존 서비스 설정 업데이트
docker service update --image nginx:lates web # 서비스 컨테이너 이미지 업데이트
docker servuce update --replicas 5 web # 서비스의 인스턴스를 5개로 조정 scale과 비슷
docker service update --llimit-cpu 1 --limit-memory 1G web  # 서비스의 cpu 및 메모리 리소스 제한
docker service update --publish-add 8080:80 web # 서비스의 포트를 추가하거나 변경

작업 관리

# 매니저 노드를 작업(컨테이너 실행)에서 제외
docker node update --availability drain 매니저노드id

# 매니저 노드를 작업에 포함
docker node update --availability active 매니저노드id

# 특정 노드 제거
docker node rm 노드id #물리적으로 장애가 발생하여 접근 못하는 노드 삭제시 사용

# 워커 노드를 매니저 노드로 승격
docker node promote 워커노드id

# 매니저 노드를 워커 노드로 강등
docker node demote 매니저노드id

업데이트 관리

# 스웜 클러스터 전체 설정 변경
docker swarm update --autolock=true or false # 매니저 노드의 잠금을 활성화 및 비활성화
docker swarm update --dispatcher-heartbeat=10s # 하트비트 시간 설정. 기본값은 5s
docker swarm update --log-entries-limit=10000 # 매니저 노드 클러스터의 상태를 일관성 있게 유지하기 위해 사용하는 로그(raft)로 10000건 유지

볼륨 및 네트워크 관리

# 스웜 내에서 사용할 볼륨 생성
docker volume crate 볼륨이름

# 오버레이 네트워크 생성
docker network create -d overlay 네트워크이름 # 스웜 서비스 간 통신에 사용

로그 및 모니터링