웹사이트 검색

Rocky Linux에 Docker Swarm을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 도커 설치
  3. 방화벽 설정\n
  4. Swarm Manager 초기화\n
  5. Swarm에 작업자 노드 추가
  6. Docker Swarm에서 서비스 관리
  7. Docker Swarm의 확장 서비스\n
  8. Docker Swarm에서 서비스 삭제
  9. 결론

Docker Swarm은 Docker 엔진 위에 구축된 컨테이너 오케스트레이션입니다. 이를 통해 여러 서버가 있는 Docker 노드 클러스터를 만들고 배포할 수 있습니다. Docker Swarm은 컨테이너화된 애플리케이션 배포를 서비스로 단순화합니다. 컨테이너를 관리하고 오케스트레이션하는 간단하고 쉬운 방법을 제공합니다.

Docker Swarm은 애플리케이션에 높은 수준의 가용성을 제공합니다. Docker Swarm에서는 Worker Nodes"라고 하는 여러 노드에서 단일 애플리케이션 또는 서비스를 실행할 수 있습니다. 그리고 Docker Swarm의 중앙 관리 및 오케스트레이션인 "Swarm Manager"라는 노드도 있습니다.

이 튜토리얼은 Rocky Linux 서버를 사용하여 Docker Swarm을 설정하는 방법을 보여줍니다. 각 서버에 Docker를 설치하고, 방화벽을 설정하고, Swarm Manager를 초기화하고, 노드를 추가하고, 마지막으로 컨테이너화된 애플리케이션을 배포하기 위한 Docker Swarm의 기본 사용법도 배웁니다.

전제 조건

이 가이드를 완료하려면 최소 3개의 Rocky Linux 서버와 sudo/administrator 권한이 있는 루트가 아닌 사용자가 필요합니다.

이 데모에서는 아래 세부 정보와 함께 3개의 Rocky Linux 서버를 사용합니다.

Hostname            IP Address        Used as
---------------------------------------------------
swarm-manager1     192.168.5.100     Swarm Manager
worker1            192.168.5.120     Node
worker2            192.168.5.121     Node

이러한 모든 요구 사항이 충족되면 Docker Swarm 배포를 시작할 준비가 된 것입니다.

도커 설치

Docker Swarm을 설정하려면 모든 시스템/서버에 Docker 엔진을 설치해야 합니다. Rocky Linux 배포의 경우 공식 Docker 리포지토리를 통해 Docker를 설치할 수 있습니다.

이제 모든 Rocky Linux 서버에 Docker 엔진을 설치합니다.

아래 dnf 명령을 통해 Rocky Linux 시스템용 Docker 리포지토리를 추가합니다.

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

리포지토리가 추가되면 아래의 dnf 명령을 실행하여 리포지토리 목록을 확인하고 모든 패키지를 업데이트합니다.

sudo dnf repo list
sudo dnf update

Docker 리포지토리가 추가되면 아래와 같은 출력이 표시됩니다.

다음으로 아래의 dnf 명령을 통해 Docker를 설치합니다. 설치를 확인하라는 메시지가 표시되면 y를 입력하고 ENTER를 눌러 계속 진행합니다.

sudo dnf install docker-ce docker-ce-cli containerd.io

Docker가 설치되면 아래의 systemctl 명령을 통해 docker 서비스를 시작하고 활성화합니다. docker 서비스가 실행 중이어야 하며 시스템 부팅 시 자동으로 실행됩니다.

sudo systemctl enable docker
sudo systemctl start docker

마지막으로 아래 명령을 사용하여 docker 서비스를 확인하여 서비스가 실행 중인지 확인합니다.

sudo systemctl status docker

docker 서비스가 실행 중인 경우 아래와 같은 출력이 표시되어야 합니다.

또한 루트가 아닌 사용자로 Docker를 실행하려면 아래 명령을 통해 해당 사용자를 docker 그룹에 추가해야 합니다.

sudo usermod -aG docker user

방화벽 설정

프로덕션 환경의 경우 모든 서버에서 방화벽을 활성화해야 합니다. 기본 Rocky Linux 시스템에서 firewalld는 기본적으로 활성화되어 있습니다. 따라서 Docker Swarm 배포를 위해 일부 TCP 및 UDP 포트만 추가하면 됩니다.

다음은 Docker Swarm을 배포하고 올바르게 실행하기 위해 각 서버에서 열어야 하는 일부 TCP 및 UDP 포트입니다.

  • 클러스터 관리 통신용 TCP 포트 2377 - Swarm 관리자가 여러 개인 경우입니다.
  • 노드 간 통신을 위한 TCP 및 UDP 포트 7946 - Swarm 환경의 모든 노드용.\n
  • 오버레이 네트워크 트래픽용 UDP 포트 4789\n

아래의 firewall-cmd 명령을 통해 방화벽에 Docker Swarm 포트를 추가합니다.

sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent

다음으로, firewalld 규칙을 다시 로드하고 아래 명령을 사용하여 firewalld의 포트 목록을 확인합니다.

sudo firewall-cmd --reload
sudo firewall-cmd --list-port

Docker Swarm 배포를 위한 일부 TCP 및 UDP 포트가 firewalld에 추가된 것을 볼 수 있습니다.

모든 서버에 설치된 Docker 엔진과 방화벽 구성을 사용하여 이제 첫 번째 노드를 "Swarm 관리자"로 초기화하여 Docker Swarm 배포를 설정할 수 있습니다.

Swarm 관리자 초기화

Swarm Manager는 Docker Swarm 환경의 두뇌입니다. 대규모 배포의 경우 여러 서버를 Swarm 관리자로 추가하여 Swarm 관리자의 고가용성과 내결함성을 활성화할 수 있습니다.

Swarm Manager는 Docker Swarm의 클러스터 관리자로, 애플리케이션 배포 상태를 관리하고 Docker 엔진과도 통합됩니다. Swarm Manager는 선언적 서비스 모델 및 서비스 확장, 원하는 서비스 상태를 제공하고 롤링 업데이트도 제공합니다.

이 예제에서는 IP 주소가 \192.168.5.100"인 "swarm-manager1" 서버를 Swarm Manager로 초기화합니다.

"swarm-manager1" 서버에서 "docker swarm init" 명령을 실행하여 배포에서 Swarm Manager 초기화를 시작합니다.

이 예에서 Swarm Manager는 IP 주소 "192.168.5.100"에서 실행 중이며 Docker Swarm의 서비스에 대한 기본 네트워크는 "10.10.0.0/16"입니다.

docker swarm init --advertise-addr 192.168.5.100 --default-addr-pool 10.10.0.0/16

이제 Swarm Manager가 초기화되면 다음 스크린샷과 유사한 출력이 표시됩니다. 또한 사용해야 하는 생성된 토큰을 포함하여 Docker Swarm 배포에 작업자 노드를 추가하는 데 필요한 지침을 볼 수 있습니다.

다음으로 다음 docker 명령을 실행하여 Swarm 모드가 활성화되고 활성화되었는지 확인합니다.

docker info

Swarm 모드가 "활성"이고 서비스에 대한 네트워크 IP 주소가 "10.10.0.0/16"인 것을 볼 수 있습니다. 이는 초기화 프로세스 동안의 구성과 동일합니다. 또한 현재 Docker Swarm에서 사용 가능한 노드는 "1"뿐입니다.

아래의 "docker node" 명령을 통해 Docker Swarm에서 사용 가능한 노드 목록을 확인하세요. Docker Swarm 배포에는 노드가 하나만 있는 것을 볼 수 있습니다.

docker node ls

Swarm에 작업자 노드 추가

Docker Swarm에서 작업자 노드는 컨테이너가 실행되고 실행되는 다른 컨테이너 오케스트레이션과 동일한 개념을 갖습니다. Docker 엔진은 각 작업자 노드에 설치되어야 하며 작업자는 "Swarm Manager"로 승격될 수 있습니다.

동시에 Swarm Manager를 작업자 노드로 사용할 수도 있습니다. 즉, Swarm Manager에서 애플리케이션을 실행할 수도 있습니다.

다음 "docker swarm join" 명령을 실행하여 "worker1" 및 "worker2" 서버를 Docker Swarm에 추가합니다. 또한 토큰을 사용자 환경에서 생성된 토큰으로 교체해야 합니다.

docker swarm join \
--token SWMTKN-1-4qxedy87gygenejrw06hlqpuwfm6erulccfj1jhnmsn0kehbnb-2ld4g3zo36bzu8d8ss4115rhq 192.168.5.100:2377

\This nodejoin a swarm as a worker\와 같은 출력 메시지를 받으면 작업자 노드가 추가된 것입니다.

"worker1" 및 "worker2"가 Docker Swarm에 조인될 때 유사한 출력을 볼 수 있습니다.

그런 다음 Swarm Manager로 다시 이동하고 아래의 docker 명령을 실행하여 Docker Swarm의 노드 목록을 확인합니다.

docker node ls

Docker Swarm 환경에 3개의 노드가 표시되어야 합니다. 이 예에서 swarm-manager1\은 Swarm Manager로 사용되고 \worker1\ 및 \worker2\ 서버는 작업자 노드로 사용됩니다.

또한 아래의 docker 명령을 사용하여 노드 목록을 확인할 수도 있습니다.

docker info

Swarm Manager 서버에서 다음 스크린샷의 출력을 볼 수 있습니다. 1개의 관리자와 3개의 노드가 있습니다(swarm-manager는 작업자로도 사용됨).

그러나 "worker1" 및 "worker2" 서버에서는 다음과 같은 출력이 표시됩니다. 기본 TCP 포트 2377로 Swarm Manager IP 주소를 볼 수 있습니다.

이제 Rocky Linux를 사용하여 Docker Swarm 배포를 완료했습니다. 다음으로 애플리케이션/서비스를 Swarm 환경에 배포합니다.

Docker Swarm에서 서비스 관리

애플리케이션을 Docker Swarm 환경에 배포하면 해당 애플리케이션을 "서비스"라고 합니다. 마이크로서비스 애플리케이션의 이미지이며 HTTP 서버, 데이터베이스 서버 또는 기타 애플리케이션일 수 있습니다.

Docker Swarm에 서비스를 배포하려면 사용할 기본 이미지, 포트, 서비스의 특정 이름 및 서비스의 복제본 수를 지정해야 합니다.

이제 Docker Swarm에 대한 서비스의 기본 배포를 배웁니다.

이 예에서는 1개의 복제본으로 새 서비스 "test-httpd"를 생성하고 Swarm 노드에서 포트 "8000"을 노출합니다. 사용할 이미지는 "httpd:alpine"입니다.

다음 "docker service" 명령을 실행하여 새 서비스를 생성합니다.

docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine

이제 아래 docker 명령을 통해 Docker Swarm에서 서비스를 확인합니다. "test-httpd" 서비스가 실행 중이고 복제본이 1개뿐인 TCP 포트 8000도 노출되어 있어야 합니다.

docker service ls

다음으로 아래 명령을 통해 "test-httpd" 서비스의 세부 정보를 확인합니다.

docker service inspect test-httpd
docker service inspect --pretty test-httpd

아래에서 "test-httpd"의 자세한 서비스를 볼 수 있습니다.

또한 아래와 같이 "docker service" 명령을 통해 "test-httpd" 서비스에서 실행되는 컨테이너를 확인할 수 있습니다.

docker service ps test-httpd

"test-httpd.1" 컨테이너가 "swarm-manager1" 서버에서 실행 중인 것을 볼 수 있습니다.

이제 다음 firewall-cmd 명령을 사용하여 모든 서버에서 포트 "8000"을 엽니다.

sudo firewall-cmd --add-port=8000/tcp

그런 다음 아래와 같이 curl 명령을 사용하여 "test-httpd" 서비스를 확인합니다. 이 예에서 \swarm-manager1\ IP 주소는 \192.168.5.100\입니다.

curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

"test-httpd" 서비스의 기본 index.html 페이지가 표시됩니다.

Docker Swarm의 확장 서비스

Docker Swarm에 서비스를 배포한 후 이제 서비스 및 애플리케이션을 확장하는 방법을 배웁니다.

다음 명령을 실행하여 "test-httpd" 서비스를 3개의 복제본으로 확장합니다. 이 명령은 작업자 노드에 "test-httpd"의 또 다른 두 서비스를 생성합니다.

docker service scale test-httpd=3

이제 다음 명령을 사용하여 실행 중인 서비스 목록을 확인합니다. 다른 "test-httpd" 서비스가 "worker1" 및 "worker2" 서버 모두에서 실행되고 있는 것을 볼 수 있습니다.

docker service ps test-httpd

마지막으로 "worker1" 및 "worker2" 서버 모두에서 아래와 같이 curl 명령을 통해 서비스를 확인합니다. 서비스가 실행 중인 경우 화면에 기본 index.html 페이지가 표시되어야 합니다.

worker1에서 서비스를 확인하고 있습니다.

docker ps
curl worker1:8000

worker2에서 서비스를 확인하고 있습니다.

docker ps
curl worker2:8000

Docker Swarm에서 서비스 삭제

Docker Swarm에서 기본 배포 및 확장 서비스를 배웠습니다. 다음으로 "test-httpd" 서비스를 삭제하여 Docker Swarm 환경을 정리합니다.

다음 명령을 실행하여 Docker Swarm에서 "test-httpd" 서비스를 제거하십시오.

docker service rm test-httpd

그런 다음 아래의 "docker service inspect" 명령을 통해 "test-httpd" 서비스를 확인합니다. 서비스가 삭제된 것을 볼 수 있습니다.

docker service inspect test-httpd

또한 아래의 docker 명령을 통해 Swarm에서 실행 중인 컨테이너 및 이미지 목록을 확인할 수도 있습니다.

컨테이너가 제거되고 모든 서버에서 httpd:alpine 이미지를 사용할 수 있어야 합니다.

docker ps
docker images

결론

이 가이드에서는 3개의 Rocky Linux 서버와 함께 Docker Swarm을 배포했습니다. 또한 Linux 서버에 Docker Engine을 설치하고 Rocky Linux 시스템에 Firewalld를 구성하는 방법도 배웠습니다. 마지막으로 "docker service" 명령을 통해 Docker Swarm에 기본 애플리케이션을 배포하는 방법도 배웠습니다.

이제 여기에서 Docker Swarm에 대한 모든 종속성과 함께 컨테이너화된 애플리케이션을 배포할 수 있습니다. Swarm Manager를 더 추가하여 Docker Swarm 환경의 고가용성을 설정할 수도 있습니다.