Docker Swarm은 Docker의 클러스터링 및 스케줄링 도구입니다.
Swarm은 여러 Docker 호스트를 하나의 논리적인 단위로 그룹화하여 컨테이너를 관리합니다.
이를 통해 고가용성, 확장성 및 컨테이너 오케스트레이션을 손쉽게 달성할 수 있습니다.
Docker 데몬이 실행되는 물리적 또는 가상의 서버입니다. 매니저 노드와 워커 노드로 구분됩니다.
노드는 Docker Swarm 클러스터의 일부로, 하나 이상의 컨테이너를 실행할 수 있는 환경을 제공합니다. = 컨테이너를 실행하는 '호스트' 역할
클러스터 관리, 오케스트레이션 및 클러스터 상태 관리를 담당합니다.
매니저 노드가 할당한 태스크(컨테이너)를 실행합니다.
서비스는 클러스터에서 실행할 태스크(컨테이너)의 사양을 정의합니다.
예를 들어, 어떤 이미지를 사용할지, 몇 개의 복제본을 실행할지, 어떤 명령어를 사용할지 등을 지정할 수 있습니다.
docker compose에서 사용한 service와 컨테이너화된 애플리케이션의 설정과 실행을 관리하는 개념은 유사하지만 사용되는 맥락은 다릅니다.
Docker Compose에서 service는 단일 컨테이너 또는 관련된 컨테이너 그룹을 정의합니다.
docker-compose.yml 파일에서 각 service는 하나의 컨테이너(또는 컨테이너 그룹)의 구성을 나타냅니다. 여기에는 사용할 이미지, 포트 매핑, 볼륨, 환경 변수 등이 포함될 수 있습니다.
Docker Compose는 주로 개발 및 테스팅 환경에서 사용되며, 여러 컨테이너의 복잡한 관계와 네트워크를 간편하게 설정하는 데 사용됩니다.
Docker Swarm에서 service는 Swarm 클러스터 내에서 실행되는 태스크(컨테이너)의 정의를 나타냅니다.
service는 하나 이상의 컨테이너 복제본을 실행하며, 이들은 클러스터의 여러 노드에 분산될 수 있습니다.
Docker Swarm의 service는 프로덕션 환경에서 컨테이너를 스케일링하고 관리하는 데 사용됩니다. 여기에는 로드 밸런싱, 서비스 디스커버리, 확장성 및 고가용성 등의 고급 기능이 포함됩니다.
여러 서비스를 하나의 그룹으로 묶어 관리할 수 있습니다. docker-compose.yml과 유사한 형식으로 정의됩니다.
docker swarm init
현재 Docker 호스트를 Swarm의 매니저 노드로 초기화합니다. 초기화 과정에서는 PKI(공개 키 인프라)와 보안 관련 설정이 자동으로 구성됩니다.
docker service create --name my-service --replicas 3 -p 8080:80 nginx
nginx 이미지를 사용하는 my-service라는 이름의 서비스를 생성합니다. 이 서비스는 3개의 복제본을 가지며, 외부의 8080 포트와 내부의 80 포트를 연결합니다.
docker service scale my-service=5
my-service 서비스의 복제본 수를 5개로 조정합니다.
docker service update my-service --replicas 5
이것도 같은 결과를 만들어 냅니다.
만약 노드의 수보다 만들고자 하는 replicas의 수가 더 많다면 도커가 각 노드마다 적절한 수의 replica들을 균등하게 분배합니다.
docker service update --image nginx:latest my-service
my-service 서비스의 이미지를 최신 nginx 이미지로 업데이트합니다.