Docker Swarm · 5 min read · Nov 10, 2025
CentOS 8에서 Docker Swarm 클러스터 설치 및 구성 방법

Docker는 컨테이너를 사용하여 애플리케이션을 생성, 배포 및 실행하는 데 사용할 수 있는 오픈 소스 도구입니다. 컨테이너는 모든 필수 종속성과 함께 애플리케이션을 패키징하고 단일 패키지로 배송할 수 있게 해줍니다.
Docker Swarm은 Docker 호스트를 관리하는 데 사용되는 클러스터링 도구입니다. 이를 통해 여러 Docker 호스트를 단일 논리적 가상 서버로 만들 수 있습니다. 이렇게 하면 애플리케이션을 수평으로 확장하고 컨테이너 인스턴스의 수를 늘릴 수 있습니다. Docker Swarm은 컨테이너 자가 복구, 로드 밸런싱, 컨테이너 확장 및 축소, 서비스 검색 및 롤링 업데이트와 같은 매우 유용한 기능을 제공합니다.
이 게시물에서는 CentOS 8에서 Docker Swarm 클러스터를 설정하는 방법을 보여줍니다.
전제 조건
- CentOS 8을 실행하는 두 대의 서버.
- 각 서버에 루트 비밀번호가 설정되어 있습니다.
두 노드에 Docker 설치
먼저 두 노드에 Docker를 설치해야 합니다. 기본적으로 CentOS 8 기본 리포지토리에는 최신 버전의 Docker가 포함되어 있지 않습니다. 따라서 시스템에 Docker 리포를 추가해야 합니다.
다음 명령어로 추가할 수 있습니다:
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repoDocker 리포가 생성되면 다음 명령어로 Docker를 설치합니다:
dnf install docker-ce --nobestDocker를 설치한 후, 다음 명령어로 Docker 서비스를 시작하고 시스템 재부팅 시 자동으로 시작되도록 설정합니다:
systemctl start docker
systemctl enable docker다음 명령어로 Docker의 상태를 확인할 수도 있습니다:
systemctl status docker다음과 같은 출력을 받아야 합니다:
? docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2021-03-12 03:55:24 EST; 6s ago
Docs: https://docs.docker.com
Main PID: 2173 (dockerd)
Tasks: 8
Memory: 44.7M
CGroup: /system.slice/docker.service
??2173 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.570387991-05:00" level=error msg="Failed to built-in GetDriver graph btrfs>
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617049696-05:00" level=warning msg="Your kernel does not support cgroup bl>
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617096273-05:00" level=warning msg="Your kernel does not support cgroup bl>
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617278059-05:00" level=info msg="Loading containers: start."
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.884953789-05:00" level=info msg="Default bridge (docker0) is assigned with>
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.039811428-05:00" level=info msg="Loading containers: done."
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066358016-05:00" level=info msg="Docker daemon" commit=363e9a8 graphdriver>
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066498611-05:00" level=info msg="Daemon has completed initialization"
Mar 12 03:55:24 workernode systemd[1]: Started Docker Application Container Engine.
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.119523516-05:00" level=info msg="API listen on /var/run/docker.sock"이제 다음 명령어로 설치된 Docker 버전을 확인합니다:
docker --version다음과 같은 출력을 받아야 합니다:
Docker version 20.10.5, build 55c4c88방화벽 구성
다음으로, 두 노드의 방화벽에서 포트 2376, 2377, 7946 및 80을 허용해야 합니다. 다음 명령어로 허용할 수 있습니다:
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=7946/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=7946/udp
firewall-cmd --permanent --add-port=4789/udp다음으로, 변경 사항을 적용하기 위해 firewalld를 다시 로드합니다:
firewall-cmd --reloadDocker Swarm 클러스터 초기화
다음으로, 관리자 노드에서 Docker Swarm 클러스터를 초기화해야 합니다. 다음 명령어로 수행할 수 있습니다:
docker swarm init --advertise-addr 45.58.32.185다음과 같은 출력을 받아야 합니다:
Swarm initialized: current node (cq8xpscsls2ctqhdha8lhdrph) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.위의 출력에 표시된 명령어를 Docker 워커 노드에서 사용하여 노드를 클러스터에 추가할 수 있습니다.
다음 명령어로 Docker Swarm 클러스터의 정보를 확인할 수 있습니다:
docker info다음과 같은 출력을 받아야 합니다:
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.5
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: active
NodeID: cq8xpscsls2ctqhdha8lhdrph
Is Manager: true
ClusterID: m7jrgvuw1k7pvfd1qyc3mffpl
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: 45.58.32.185
Manager Addresses:
45.58.32.185:2377이제 다음 명령어로 Docker Swarm 노드를 확인할 수 있습니다:
docker node ls다음과 같은 출력을 받아야 합니다:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5Docker Swarm 클러스터에 워커 노드 추가
다음으로, 워커 노드를 Docker Swarm 관리자 노드에 추가해야 합니다. 워커 노드에서 다음 명령어로 수행할 수 있습니다:
docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377다음과 같은 출력을 받아야 합니다:
This node joined a swarm as a worker.Docker 관리자 노드에서 다음 명령어로 워커 노드를 확인합니다:
docker node ls워커 노드가 Docker Swarm에 추가된 것을 확인할 수 있습니다:
cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5
bipfv8sfm94a9po0uame5rd1n workernode Ready Active 20.10.5Docker Swarm에서 서비스 시작
여기에서는 새로운 Nginx 웹 서비스를 생성하고 두 개의 컨테이너로 확장합니다. 관리자 노드에서 다음 명령어를 실행하여 생성할 수 있습니다:
docker service create -p 80:80 --name webservice --replicas 2 nginx다음과 같은 출력을 받아야 합니다:
agyxlaswxakrbboakkyydsh0k
overall progress: 2 out of 2 tasks
1/2: running [==================================================>]
2/2: running [==================================================>]
verify: Service converged 이제 다음 명령어로 웹 서비스를 확인할 수 있습니다:
docker service ls다음과 같은 출력을 받아야 합니다:
ID NAME MODE REPLICAS IMAGE PORTS
agyxlaswxakr webservice replicated 2/2 nginx:latest *:80->80/tcp다음 명령어로 실행 중인 컨테이너를 확인할 수 있습니다:
docker ps다음과 같은 출력을 받아야 합니다:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c887cad1df2e nginx:latest "/docker-entrypoint.…" 32 seconds ago Up 30 seconds 80/tcp webservice.2.jelyj9gmeb7ikl2scg7mz8yg8웹 서비스의 상세 정보를 얻으려면 다음 명령어를 실행합니다:
docker service ps webservice다음과 같은 출력을 받아야 합니다:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ey9zukwwrkq webservice.1 nginx:latest workernode Running Running 3 minutes ago
jelyj9gmeb7i webservice.2 nginx:latest masternode Running Running 3 minutes ago Docker Swarm 확인
이 시점에서 우리는 관리 노드를 포함한 클러스터 노드에 Nginx 컨테이너를 배포했습니다. 이제 워커 노드 또는 관리자 노드 IP 주소를 사용하여 Nginx 웹 서버에 접근할 수 있습니다:

결론
위 가이드에서는 CentOS 8에서 Docker Swarm 클러스터를 설정하는 방법을 배웠습니다. 이제 Docker Swarm 클러스터에 원하는 만큼의 워커 노드를 추가하고 애플리케이션을 확장할 수 있습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.