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.repo

Docker 리포가 생성되면 다음 명령어로 Docker를 설치합니다:

dnf install docker-ce --nobest

Docker를 설치한 후, 다음 명령어로 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 --reload

Docker 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.5

Docker 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.5

Docker 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 웹 서버에 접근할 수 있습니다:

Docker 컨테이너가 성공적으로 배포됨

결론

위 가이드에서는 CentOS 8에서 Docker Swarm 클러스터를 설정하는 방법을 배웠습니다. 이제 Docker Swarm 클러스터에 원하는 만큼의 워커 노드를 추가하고 애플리케이션을 확장할 수 있습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.