docker swarm init

docker swarm init

docker swarm init은 스웜(Swarm)을 초기화하는 명령이에요. 이 명령으로 스웜을 처음 만들고, 실행한 노드가 매니저가 돼요.

출처: 문서

본문

docker swarm init은 스웜을 초기화하는 명령이에요. 이 명령이 가리키는 Docker Engine이 새로 만들어진 싱글 노드 스웜의 매니저가 돼요.

docker swarm init [OPTIONS]

지원하는 옵션은 다음과 같아요.

옵션 기본값 설명
--advertise-addr 광고 주소예요 (형식: [:port]).
--autolock 매니저 오토락을 켜요 (멈춘 매니저를 시작하려면 언락 키가 필요해요).
--availability active 노드 가용성이에요 (active, pause, drain).
--cert-expiry 2160h0m0s 노드 인증서 유효기간이에요 (ns/us/ms/s/m/h).
--data-path-addr API 1.31+ 데이터 경로 트래픽에 쓸 주소 또는 인터페이스예요.
--data-path-port API 1.40+ 데이터 경로 트래픽에 쓸 포트 번호예요 (1024~49151). 값이 없거나 0이면 기본 포트(4789)를 써요.
--default-addr-pool API 1.39+ 기본 주소 풀(CIDR 형식)이에요.
--default-addr-pool-mask-length 24 API 1.39+ 기본 주소 풀 서브넷 마스크 길이예요.
--dispatcher-heartbeat 5s 디스패처 하트비트 주기예요 (ns/us/ms/s/m/h).
--external-ca 하나 이상의 인증서 서명 엔드포인트 설정이에요.
--force-new-cluster 현재 상태에서 새 클러스터를 강제로 만들어요.
--listen-addr 0.0.0.0:2377 수신 주소예요 (형식: [:port]).
--max-snapshots API 1.25+ 유지할 추가 Raft 스냅샷 수예요.
--snapshot-interval 10000 API 1.25+ Raft 스냅샷 사이 로그 항목 수예요.
--task-history-limit 5 태스크 기록 보존 상한이에요.

예시

$ docker swarm init --advertise-addr 192.168.99.121

Swarm initialized: current node (bvz81updecsj6wjz393c09vti) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-aabbccdd00112233aabbccdd00112233aabbccdd00112233aa-aabbccdd00112233... 172.17.0.2:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

docker swarm init은 워커 토큰과 매니저 토큰 두 개의 랜덤 토큰을 생성해요. docker swarm join에 어떤 토큰을 넘기느냐에 따라 새 노드가 워커나 매니저로 조인해요. 스웜 생성 후 토큰은 docker swarm join-token으로 조회하거나 회전할 수 있어요.

매니저 키·데이터 보호 (--autolock)

--autolock 플래그는 암호화 키로 매니저를 자동 잠그는 기능을 켜요. 모든 매니저가 저장하는 개인 키와 데이터는 출력에 표시된 암호화 키로 보호되고, 이 키 없이는 접근할 수 없어요. 재시작 후 매니저를 다시 활성화하려면 이 키를 안전하게 보관해야 해요. docker swarm unlock 명령에 키를 넘겨 매니저를 다시 활성화할 수 있어요. docker swarm update --autolock=false로 오토락을 끌 수 있는데, 끄면 암호화 키 없이도 매니저가 자동으로 시작돼요.

외부 인증 기관 사용 (--external-ca)

이 플래그는 외부 CA가 노드 인증서를 발급하도록 스웜을 설정해요. 값은 protocol=X,url=Y 형식이에요. 현재 지원되는 protocol 값은 cfssl뿐이에요.

싱글 모드 매니저로 강제 재시작 (--force-new-cluster)

쿼럼이 유실된 기존 노드를 데이터 손실 없이 싱글 노드 매니저로 재시작하도록 강제해요.

인바운드 제어 플레인 인터페이스 지정 (--listen-addr)

노드는 이 주소에서 인바운드 스웜 매니저 트래픽을 수신해요. 기본은 0.0.0.0:2377이고, 인터페이스 이름도 지정할 수 있어요(예: --listen-addr eth0:2377). 포트 지정은 선택이라, IP나 인터페이스만 주면 기본 포트 2377을 써요.

아웃바운드 제어 플레인 인터페이스 지정 (--advertise-addr)

--advertise-addr은 API 접근과 오버레이 네트워킹을 위해 다른 스웜 멤버에게 광고할 주소예요. 지정하지 않으면 시스템에 IP가 하나만 있을 때 그 IP와 수신 포트를 써요. IP가 여러 개라면 매니저 간 통신과 오버레이 네트워킹을 위해 반드시 지정해야 해요.

데이터 트래픽 인터페이스 지정 (--data-path-addr)

--data-path-addr은 글로벌 스코프 네트워크 드라이버가 이 노드의 컨테이너에 도달하기 위해 다른 노드에 공개할 주소예요. 이 매개변수로 컨테이너 데이터 트래픽을 클러스터 관리 트래픽과 분리할 수 있어요. 지정하지 않으면 광고 주소의 IP/인터페이스를 사용해요.

데이터 트래픽 포트 설정 (--data-path-port)

--data-path-port는 데이터 경로 트래픽에 쓸 UDP 포트를 설정해요. 1024~49151 범위여야 해요. 설정하지 않거나 0이면 기본 4789를 써요. 데이터 경로 포트는 스웜 초기화 때만 설정할 수 있고, 스웜에 조인하는 모든 노드에 적용돼요.

$ docker swarm init --data-path-port=7777

기본 서브넷 풀 지정 (--default-addr-pool)

--default-addr-pool은 글로벌 스코프 네트워크용 기본 서브넷 풀을 지정해요. 여러 번 지정할 수 있어요.

$ docker swarm init \
  --default-addr-pool 30.30.0.0/16 \
  --default-addr-pool 40.40.0.0/16

--default-addr-pool-mask-length 플래그로 서브넷 풀의 기본 마스크 길이를 정해요.

매니저 가용성 설정 (--availability)

--availability는 노드가 조인할 때의 가용성을 지정해요. 가능한 값은 active, pause, drain이에요. 워커 노드 역할을 하지 않는 전용 매니저 노드를 만들려면 docker swarm init--availability=drain을 넘기면 돼요.

더 알아보기