Docker 설정 · 3 min read · Feb 07, 2026

우분투에서 Docker Swarm 클러스터 설정 및 구성하는 방법

Docker Swarm은 Docker 호스트 클러스터를 배포할 수 있게 해주는 도구입니다. 이는 Docker에서 제공하는 네이티브 클러스터링 도구로, 스웜 클러스터 내의 모든 노드에 애플리케이션을 분산시켜 고가용성과 고성능을 제공합니다.

이 튜토리얼에서는 우분투 16.04를 사용하여 스웜 클러스터를 만드는 방법을 단계별로 보여드리겠습니다. 2개의 우분투 서버 머신을 사용하여 1개의 서버 노드를 관리자로, 다른 1개를 작업자로 설정합니다. 그리고 간단한 Nginx 서비스를 스웜 클러스터에 배포해 보겠습니다.

전제 조건

  • 2개 이상의 - 우분투 16.04 서버 - 관리자 132.92.41.4
  • 작업자01 132.92.41.5
  • 루트 권한

우리가 할 일은?

  1. 호스트 구성
  2. Docker-ce 설치
  3. Docker Swarm 초기화
  4. 클러스터에 첫 번째 서비스 배포

1단계 - 호스트 구성

스웜 클러스터를 위한 패키지를 설치하기 전에 두 서버의 호스트 파일을 구성합니다.

모든 서버, ‘관리자’와 ‘작업자01’에서 아래 명령어를 실행합니다.

vim 편집기를 사용하여 ‘/etc/hosts’ 파일을 편집합니다.

vim /etc/hosts

다음 구성을 줄의 끝에 추가합니다.

132.92.41.4    manager  
132.92.41.5    worker01

저장하고 종료합니다.

이제 IP 주소 대신 ‘hostname’을 사용하여 모든 노드에 ping을 보냅니다.

ping -c 3 manager  
ping -c 3 worker01

모든 호스트에서 작동하는지 확인합니다.

호스트 구성

2단계 - Docker-ce 설치

스웜 클러스터를 만들기 위해 모든 서버 노드에 Docker를 설치해야 합니다. 이 단계에서는 관리자와 작업자01 두 서버에 Docker-ce 커뮤니티 에디션을 설치합니다.

아래의 apt 명령어를 사용하여 Docker-ce 종속성을 설치합니다.

sudo apt install apt-transport-https software-properties-common ca-certificates -y

이제 Docker 키와 Docker-ce 저장소를 서버에 추가합니다.

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -  
sudo echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" > /etc/apt/sources.list.d/docker-ce.list

저장소를 업데이트하고 아래의 apt install 명령어를 사용하여 Docker-ce 패키지를 설치합니다.

sudo apt update  
sudo apt install docker-ce -y

설치가 완료되면 Docker 서비스를 시작하고 시스템 부팅 시마다 실행되도록 활성화합니다.

systemctl start docker  
systemctl enable docker

이제 Docker-ce가 서버 노드에 설치되었습니다.

다음으로, Docker를 일반 사용자 또는 비루트 사용자로 실행하도록 구성합니다.

‘mohammad’라는 새 사용자를 만들고 ‘docker’ 그룹에 추가합니다.

useradd -m -s /bin/bash mohammad  
sudo usermod -aG docker mohammad

이제 ‘mohammad’ 사용자로 로그인하고 아래와 같이 docker hello-world 명령어를 실행합니다.

su - mohammad  
docker run hello-world

그러면 아래와 같이 Docker에서 hello world를 받을 수 있습니다.

Docker-ce 설치

3단계 - 스웜 클러스터 만들기

이 단계에서는 노드의 스웜 클러스터를 생성합니다. 스웜 클러스터 노드를 만들기 위해 ‘관리자’ 노드에서 스웜 모드를 초기화한 다음 ‘작업자01’ 노드를 클러스터에 추가해야 합니다.

‘관리자’ 노드에서 아래의 docker 명령어를 실행하여 Docker Swarm 모드를 초기화합니다.

docker swarm init --advertise-addr 132.92.41.4

그러면 아래와 같은 결과를 얻을 수 있습니다.

‘관리자’ 노드에서 ‘join-token’이 생성되었음을 확인할 수 있습니다.

다음으로 ‘작업자01’ 노드를 클러스터 ‘관리자’에 추가해야 합니다. 이를 위해 클러스터 ‘관리자’ 노드에서 ‘join-token’을 가져와야 하므로 메모해 두시기 바랍니다.

‘작업자01’ 노드에서 docker swarm join 명령어를 실행합니다.

docker swarm join --token SWMTKN-1-5p5ujrr67rl2rlmyvrj56fksblbcrtaeirf7fj5r4snid2vn6y-918gbqr02m64xct43i2ssi4qs 132.92.41.4:2377

이제 아래와 같은 결과를 얻을 수 있습니다.

‘작업자01’ 노드가 클러스터에 추가되었습니다.

‘관리자’ 노드에서 다음 명령어를 실행하여 확인합니다.

docker node ls

이제 ‘작업자01’ 노드가 스웜 클러스터에 추가된 것을 확인할 수 있습니다.

스웜 클러스터가 생성되었습니다.

4단계 - 클러스터에 첫 번째 서비스 배포

이 단계에서는 스웜 클러스터에 첫 번째 서비스를 생성하고 배포합니다. 기본 HTTP 포트 80에서 실행되는 새로운 Nginx 웹 서버 서비스를 생성하고 이를 호스트 서버의 포트 8080에 노출한 다음, 스웜 클러스터 내에서 nginx 서비스를 복제해 보겠습니다.

서비스 생성

‘내 웹(my-web)’이라는 새로운 Nginx 서비스를 생성하고 컨테이너의 HTTP 포트를 호스트의 포트 8080에 노출합니다.

docker service create --name my-web --publish 8080:80 nginx:1.13-alpine

생성되면 아래의 docker service 명령어를 사용하여 확인합니다.

docker service ls

아래와 같은 결과를 얻을 수 있습니다.

Nginx 서비스가 생성되어 ‘my-web’이라는 서비스로 스웜 클러스터에 배포되었습니다. 이는 Nginx Alpine Linux를 기반으로 하며, 컨테이너 서비스의 HTTP 포트를 호스트의 포트 ‘8080’에 노출하고, 복제본은 1개입니다.

복제본 및 서비스 확장

이제 ‘my-web’ 서비스의 복제본을 만들겠습니다. ‘my-web’ 서비스의 2개의 복제본을 만들어 ‘관리자’와 ‘작업자01’ 노드에서 접근할 수 있도록 하겠습니다.

‘내 웹(my-web)’ 서비스를 복제하려면 다음 명령어를 실행합니다.

docker service scale my-web=2

완료되면 다시 docker service 명령어를 사용하여 확인합니다.

docker service ls

이제 서버에 2개의 복제본이 있습니다.

복제본 및 서비스 확장

웹 브라우저를 열고 관리자 노드 IP 주소에 포트 8080을 입력합니다.

http://manager:8080/

그러면 Nginx 기본 페이지를 확인할 수 있습니다.

아래는 ‘작업자01’ 노드의 결과입니다.

http://worker01:8080/

스웜 클러스터가 생성되었고 Nginx 서비스가 스웜 클러스터에 성공적으로 배포되었습니다.

참고

Share: X/Twitter LinkedIn

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

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