Swarm 모드

Swarm 모드

Swarm 모드는 Docker 데몬들을 하나의 클러스터로 묶어서 관리하는 고급 기능이에요. 프로덕션 환경에서 Swarm을 운영할 계획이라면 이 모드를 사용하면 되고, 아니라면 Docker Compose나 Kubernetes를 고려해 보시는 게 좋아요. Docker CLI를 이용해서 스웜을 만들고, 애플리케이션 서비스를 배포하고, 스웜 동작을 관리할 수 있어요.

출처: 공식문서

본문

참고

Swarm 모드는 Docker 데몬 클러스터를 관리하기 위한 고급 기능이에요. Swarm을 프로덕션 런타임 환경으로 사용하려는 경우에 사용하세요. Swarm으로 배포할 계획이 없다면 Docker Compose를 대신 사용하세요. Kubernetes 배포를 개발 중이라면 Docker Desktop의 통합 Kubernetes 기능을 고려해 보세요.

현재 버전의 Docker에는 Swarm 모드가 포함되어 있어서 Docker Engine 클러스터(스웜)를 네이티브하게 관리할 수 있어요. Docker CLI를 사용해서 스웜을 생성하고, 애플리케이션 서비스를 스웜에 배포하고, 스웜 동작을 관리할 수 있죠.

Docker Swarm 모드는 Docker Engine에 내장되어 있어요. 더 이상 활발히 개발되지 않는 Docker Classic Swarm과 혼동하지 마세요.

기능 하이라이트

Docker Engine에 통합된 클러스터 관리

Docker Engine CLI를 사용해서 Docker Engine들의 스웜을 만들고 애플리케이션 서비스를 배포할 수 있어요. 스웜을 만들거나 관리하기 위해 추가적인 오케스트레이션 소프트웨어가 필요 없어요.

분산형 설계

노드 역할 간의 구분을 배포 시점에 처리하는 대신, Docker Engine이 런타임에 모든 특수화를 처리해요. 매니저와 워커 두 종류의 노드를 모두 Docker Engine으로 배포할 수 있으니까, 단일 디스크 이미지로 전체 스웜을 구축할 수 있죠.

선언적 서비스 모델

Docker Engine은 선언적 접근 방식을 사용해서 애플리케이션 스택의 다양한 서비스가 원하는 상태를 정의할 수 있게 해줘요. 예를 들어 웹 프론트엔드 서비스, 메시지 큐 서비스, 데이터베이스 백엔드로 구성된 애플리케이션을 정의할 수 있죠.

스케일링

각 서비스에 대해 실행하려는 태스크 수를 선언할 수 있어요. 스케일 업이나 다운을 하면 스웜 매니저가 태스크를 자동으로 추가하거나 제거해서 원하는 상태를 유지해요.

원하는 상태 동기화

스웜 매니저 노드는 클러스터 상태를 지속적으로 모니터링하면서 실제 상태와 사용자가 정의한 원하는 상태 사이의 차이를 조정해요. 예를 들어 컨테이너 10개를 레플리카로 실행하는 서비스를 설정했는데, 그중 2개를 호스팅하던 워커 머신이 크래시되면 매니저가 크래시된 레플리카를 대체할 새 레플리카 2개를 만들어요. 스웜 매니저는 새 레플리카를 실행 중이고 사용 가능한 워커에 할당하죠.

멀티 호스트 네트워킹

서비스에 오버레이 네트워크를 지정할 수 있어요. 스웜 매니저는 애플리케이션을 초기화하거나 업데이트할 때 오버레이 네트워크의 컨테이너에 주소를 자동으로 할당해요.

서비스 디스커버리

스웜 매니저 노드는 스웜의 각 서비스에 고유한 DNS 이름을 할당하고 실행 중인 컨테이너를 로드 밸런싱해요. 스웜에 내장된 DNS 서버를 통해 스웜에서 실행 중인 모든 컨테이너를 조회할 수 있어요.

로드 밸런싱

서비스 포트를 외부 로드 밸런서에 노출할 수 있어요. 내부적으로는 스웜이 서비스 컨테이너를 노드 간에 어떻게 분배할지 지정할 수 있게 해줘요.

기본 보안

스웜의 각 노드는 TLS 상호 인증과 암호화를 적용해서 자신과 다른 모든 노드 간의 통신을 보호해요. 자체 서명된 루트 인증서나 커스텀 루트 CA의 인증서를 사용할 수도 있죠.

롤링 업데이트

롤아웃 시 서비스 업데이트를 노드에 점진적으로 적용할 수 있어요. 스웜 매니저는 서로 다른 노드 집합에 서비스를 배포할 때 지연 시간을 제어할 수 있게 해줘요. 문제가 생기면 이전 버전의 서비스로 롤백할 수도 있어요.

더 알아보기 (Learn more)