1. 도커 스웜 시작하기
Docker Swarm은 Docker의 오케스트레이션 도구로,
여러 Docker 호스트를 클러스터로 묶어 관리할 수 있게 해줍니다.
주요 기능은 다음과 같습니다:
- 클러스터 관리: 여러 Docker 호스트(노드)를 하나의 클러스터로 구성하여 관리합니다.
- 서비스 배포: 컨테이너를 여러 노드에 분산 배포하고, 필요한 수의 복제본을 유지합니다.
- 로드 밸런싱: 클러스터 내에서 트래픽을 자동으로 분산하여 서비스의 가용성과 성능을 높입니다.
- 고가용성: 노드가 실패해도 다른 노드에서 서비스가 계속 실행되도록 보장합니다.
docker info
도커 스웜 상태보기
아래 명령어를 통해 도커 스웜이 실행되고 있는지 확인할 수 있습니다.
docker info
>>>
...
Swarm: inactive
...
docker swarm init
도커 스웜 실행
docker swarm init
>>>
Swarm initialized: current node (wnybmmxk4etqbnbc123t7a) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-60yd4wa92dj7h42h6of435fi8gxtuadwdwiot1dueaijyw4nq-5uto4g0j3iuos6fz5sddf22 192.168.172.23:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
도커 스웜 실행 후, 상태 확인
docker info
>>>
Swarm: active
NodeID: wnybmmxk4etqbnbc123t7a
Is Manager: true
ClusterID: 3r7gbcxm8uadwh84201bodan
Managers: 1
Nodes: 1
Default Address Pool: 10.0.0.0/8
SubnetSize: 24
Data Path Port: 4789
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Number of Old Snapshots to Retain: 0
Heartbeat Tick: 1
Election Tick: 10
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Force Rotate: 0
Autolock Managers: false
Root Rotation In Progress: false
Node Address: 192.168.172.23
Manager Addresses:
192.168.172.23:2377
docker node ls
도커 스웜 노드 확인
Docker Swarm 클러스터의 노드 목록을 표시하는 데 사용됩니다.
이 명령어를 실행하면 클러스터에 포함된 모든 노드의 상태, 역할, ID, 이름 및 다른 관련 정보를 확인할 수 있습니다.
출력의 주요 항목은 다음과 같습니다.
- ID: 노드의 고유 식별자
- HOSTNAME: 노드의 호스트 이름
- STATUS: 노드의 상태 (예: Ready, Down 등)
- AVAILABILITY: 노드의 사용 가능 상태 (예: Active, Drain)
- ROLE: 노드의 역할 (예: Manager, Worker)
docker node ls
>>>
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
wnybmmxk4etqbnbc123t7a * docker-desktop Ready Active Leader 20.10.17
docker swarm leave
도커 스웜 종료하기
만약 종료되는 노드가 리더 노드인 경우 도커 스웜 클러스터가 해체됩니다.
docker swarm leave --force
>>>
Node left the swarm.
docker info
>>>
...
Swarm: inactive
...
2. 도커 스웜 서비스
Docker Swarm에서의 서비스는 컨테이너화된 애플리케이션을 배포하고 관리하는 단위입니다.
서비스는 특정 이미지에서 생성된 컨테이너의 집합을 정의하며,
이러한 컨테이너들은 클러스터의 여러 노드에서 실행될 수 있습니다.
nginx container 실행
아래 명령어는
web이라는 이름의 Nginx 서비스를 생성하고
호스트의 8080 포트를 컨테이너의 80 포트에 매핑합니다.
docker service create --name web --publish 8080:80 nginx
docker service ls
도커 스웜 서비스 확인
docker service ls
>>>
ID NAME MODE REPLICAS IMAGE PORTS
esboe77z0jpp web replicated 1/1 nginx:latest *:8080->80/tcp
docker container ls
컨테이너 확인
docker container ls
>>>
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c56f95daeaa4 nginx:latest "/docker-entrypoint.…" 2 minutes ago Up About a minute 80/tcp web.1.6lsl14qgrixy1ye20quop4ukx
nginx 접근 확인
http://127.0.0.1:8080 에 접근해서 nginx가 올라가있는지 확인한다.
docker service rm <service name>
도커 스웜 서비스 삭제
docker service rm web
docker service ls
>>>
서비스가 삭제됨을 확인
3. 도커 스웜에 새로운 노드 추가
Docker Swarm 클러스터에 새로운 워커 노드를 추가하려면,
매니저노드에서 워커노드를 위한 토큰을 발급하고 이를 추가하려는 노드에서 토큰인증을 해야합니다.
docker swarm join-token worker
도커 스웜에 워커노드 토큰 발급 추가 ( 매니저노드에서 실행 )
docker swarm join-token worker
>>>
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3ja234y1pdw60039ez1qjwq1b7yasdf1bf1amlh6m7vy42w0b-bngbsd123dl5j8j0sj6wxms5ld 192.168.172.23:2377
도커 스웜에 워커 노드 추가 ( 워커노드에서 실행 )
docker swarm join --token SWMTKN-1-3ja234y1pdw60039ez1qjwq1b7yasdf1bf1amlh6m7vy42w0b-bngbsd123dl5j8j0sj6wxms5ld 192.168.172.23:2377
docker swarm join-token manager
매니저노드 추가 시에도 같은 방법으로 추가합니다.
docker swarm join-token manager
>>>
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3ja0hy11facd9ez1qjwq1b7y2becwd2lh6m7vy432-1rffagzupn2zemc1adcs05 1192.168.172.23:2377
4. 도커 스웜 고가용성
서버1 과 서버2에서 각각의 매니저노드를 추가합니다.
docker node ls
>>>
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1s1ld0f1k8t0y1xw4xuyk3s5x * manager-server-1 Ready Active Leader
3d9a1t1v4a0l9h8a6q9r9x7y8 manager-server-2 Ready Active Reachable
매니저 노드가 두 개 이상 있을 때(최소권장 3대),
한 매니저 노드가 실패하더라도 다른 매니저 노드가 리더 역할을 계속 수행할 수 있습니다.
예를 들어, 매니저 서버 1이 종료되면 매니저 서버 2가 리더로 승격되어 클러스터를 계속 운영합니다.
이를 통해 도커 스웜은 HA 구성이 용이합니다.
5. K8S와의 각 개념 비교
Docker Swarm의 개념은 Kubernetes의 구조보다 단순합니다.
Swarm에서의 스택, 서비스, 태스크와 비슷한 개념이 Kubernetes에도 존재하며
Kubernetes에서는 이를 더 세분화하고 높은 확장성과 유연성을 제공합니다.
Docker Swarm | Kubernetes | description |
Stack | Namespace + Helm Chart | 애플리케이션 배포 단위, 여러 서비스/리소스를 관리 |
Service | Deployment + Service | 컨테이너 배포/관리, Swarm의 서비스는 네트워크 경로도 포함하지만, Kubernetes에서는 Service가 네트워크 로드밸런싱을 담당합니다. |
Task | Pod | 컨테이너 실행 단위 |
'Infra > Docker' 카테고리의 다른 글
Docker Swarm - 서비스 배포 및 확장 (0) | 2024.09.29 |
---|---|
Docker Swarm - 노드의 승격, 레이블, 가용성 (0) | 2024.09.28 |
Docker - 도커파일 (0) | 2023.03.27 |
Docker - 명령어 (네트워크) (0) | 2023.03.27 |
Docker - 명령어 ( image ) (0) | 2023.03.27 |