웹사이트 검색

Debian 11에 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은 애플리케이션에 높은 수준의 가용성을 제공합니다. Docker Swarm에서는 "작업자 노드"라는 여러 노드에서 단일 애플리케이션 또는 서비스를 실행할 수 있습니다. Docker Swarm의 중앙 집중식 관리 및 오케스트레이션을 제공하는 "Swarm Manager"라는 노드도 있습니다.

이 자습서에서는 Debian 11 서버에서 Docker Swarm을 설정하는 방법을 보여줍니다. Docker를 설치하고 UFW(Uncomplicated Firewall)를 설정하고 "Swarm Manager"를 초기화하고 "Nodes"를 추가합니다. 또한 응용 프로그램 배포를 위한 Docker Swarm의 기본 사용법도 배웁니다.

전제 조건

이 자습서를 완료하려면 여러 Debian 11 서버와 sudo/root 관리자 권한이 있는 루트가 아닌 사용자가 필요합니다.

이 데모에서는 다음 세부 정보와 함께 3개의 Debian 11 서버를 사용합니다.

Hostname    IP Address        Used as
-------------------------------------
manager     192.168.5.100     Swarm Manager
node1       192.168.5.120     Node
node2       192.168.5.121     Node

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

도커 설치

기본 Debian 리포지토리는 Docker용 패키지를 제공합니다. 그러나 최신 버전의 Docker를 설치하려면 공식 Docker 리포지토리를 통해 Docker를 설치해야 합니다.

또한 모든 Debian 서버에 Docker를 설치해야 합니다.

리포지토리를 추가하기 전에 다음 apt 명령을 실행하여 몇 가지 기본 패키지를 설치합니다. 설치를 확인하라는 메시지가 표시되면 Y를 입력하고 ENTER를 누릅니다.

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y

기본 패키지를 설치한 후 다음 명령을 사용하여 Docker 리포지토리에 대한 GPG 키를 추가합니다. 이 명령을 사용하여 새 디렉터리 "/etc/apt/keyrings"를 만들고 Docker 리포지토리의 GPG 키를 여기에 저장합니다.

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

다음으로 아래 명령을 사용하여 Debian Linux 시스템용 Docker 리포지토리를 추가합니다.

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

이제 아래의 apt 명령을 통해 패키지 인덱스를 업데이트하고 새로 고칩니다.

sudo apt update

새로운 Docker 리포지토리가 업데이트되는 것을 볼 수 있습니다.

다음으로 다음 apt 명령을 사용하여 Docker 패키지를 설치합니다. 설치를 확인하라는 메시지가 표시되면 Y를 입력하여 확인하고 ENTER를 눌러 계속 진행합니다.

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Docker를 설치한 후 다음 명령을 실행하여 docker 서비스를 시작하고 활성화합니다. 이렇게 하면 시스템 부팅 시 도커가 자동으로 실행됩니다.

sudo systemctl start docker
sudo systemctl enable docker

마지막으로 아래의 systemctl 명령을 통해 docker 서비스를 확인합니다.

sudo systemctl status docker

docker 서비스가 실행 중인 경우 다음 스크린샷과 같은 출력이 표시되어야 합니다.

또한 배포에 루트가 아닌 사용자를 사용하려는 경우 사용자를 docker에 추가하고 사용자가 Docker 컨테이너를 실행하도록 허용해야 합니다.

sudo usermod -aG docker user

방화벽 설정

프로덕션용으로 Docker Swarm을 배포하는 경우 모든 노드 간에 방화벽을 설정해야 합니다. 이 예에서는 Debian 서버의 기본 방화벽으로 UFW를 사용합니다.

다음은 Docker Swarm이 제대로 작동하기 위해 열어야 하는 몇 가지 포트입니다.

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

다음 apt 명령을 사용하여 Debian 시스템에 UFW를 설치합니다.

sudo apt install ufw -y

UFW가 설치된 후 다음 ufw 명령을 실행하여 "OpenSSH" 응용 프로그램 프로필을 추가합니다. 그런 다음 UFW를 시작하고 활성화합니다.

프로세스 중에 UFW 방화벽을 실행하고 활성화할지 여부를 확인하라는 메시지가 표시됩니다. y를 입력하여 확인하고 ENTER를 눌러 계속 진행합니다.

sudo ufw allow "OpenSSH"
sudo ufw enable

이제 다음 ufw 명령을 실행하여 Docker Swarm용 일부 포트를 엽니다.

sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp

마지막으로 다음 ufw 명령을 통해 서버에서 활성화된 UFW 규칙 목록을 확인합니다. Docker Swarm의 모든 포트가 UFW에서 활성화되고 사용 가능한지 확인하십시오.

sudo ufw status

이 시점에서 Docker가 설치되었고 UFW가 구성되었습니다. 다음에 Swarm Manager를 초기화하겠습니다.

Swarm 관리자 초기화

Swarm Manager는 Docker Swarm 배포의 중심입니다. Swarm 상태 자체를 관리하며 관리자 노드 수에 제한이 없습니다. 여러 Swarm Manager를 배포하면 내결함성 환경이 만들어집니다.

Swarm Manager는 docker Engine과 통합된 클러스터 관리입니다. 선언적 서비스 모델, 서비스 확장, 원하는 서비스 상태, 로드 밸런싱 및 롤링 업데이트를 제공합니다.

이 예에서는 한 노드를 Swarm Manager로 초기화합니다.

Swarm Manager를 초기화하려면 다음 docker 명령을 실행합니다. 이 예에서 Swarm 관리자는 IP 주소 192.168.5.30에서 실행됩니다. Docker Swarm 환경의 컨테이너 네트워크는 10.20.0.0/16입니다.

docker swarm init --advertise-addr 192.168.5.30 --default-addr-pool 10.20.0.0/16

Swarm Manager가 초기화되면 다음 출력이 표시됩니다. 또한 노드를 Swarm 관리자에 조인하기 위한 세부 토큰을 볼 수 있습니다.

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

docker info

다음 스크린샷에서 IP 주소 풀이 \10.20.0.0/16"인 Swarm 모드가 \활성\인 것을 볼 수 있습니다. 또한 Docker Swarm에서 사용할 수 있는 현재 노드는 "1"입니다.

아래의 docker 명령을 통해 Docker Swarm의 노드 목록을 확인할 수 있습니다. 현재 Docker Swarm에는 Swarm Manager인 노드가 하나만 있어야 합니다.

docker node ls

Swarm에 작업자 노드 추가

작업자 노드는 컨테이너가 실행되고 실행되는 곳입니다. 작업자 노드에는 Docker Engine이 각 서버에 설치되어 있어야 하며 작업자 노드도 Swarm Manager로 승격될 수 있습니다.

작업자 노드를 추가하려면 "docker swarm join" 명령 다음에 Swarm Manager를 초기화할 때 생성되는 토큰을 사용할 수 있습니다.

아래의 "docker swarm join" 명령을 통해 node1 및 node2 서버를 모두 Docker Swarm에 추가합니다. Swarm Manager 초기화 중에 생성된 토큰으로 토큰을 교체할 수 있습니다.

docker swarm join \
--token SWMTKN-1-5tui5dveqw6n2b0m6suut0w7nf9w0wb5jyvfhmykb4jdehps1j-ag99f7750mmnim6ao5yp0x3s2 \
192.168.5.30:2377

노드가 추가되면 "This node Join a swarm as a worker"와 같은 출력 메시지가 표시됩니다.

다음은 node1 및 node2 서버 모두에서 표시되는 출력입니다.

또한 작업자 노드 조인을 위한 swarm 토큰을 분실한 경우 다음 명령을 사용하여 표시할 수 있습니다.

docker swarm join-token worker

마지막으로 "manager" 서버로 돌아가서 아래의 "docker" 명령을 통해 Docker Swarm 환경의 노드 목록을 확인합니다.

docker node ls

다음 스크린샷에서 \node1\ 및 \node2\가 모두 Docker Swarm에 \Ready\ 상태 및 docker 엔진 \20.10.18\로 추가된 것을 볼 수 있습니다.

Docker Swarm 배포가 완료되었습니다. 이제 컨테이너화된 애플리케이션을 Swarm에 배포할 수 있습니다.

Docker Swarm에서 서비스 관리

서비스는 Docker Swarm에 애플리케이션을 배포하는 용어입니다. 마이크로 서비스의 이미지이며 HTTP 서버, 데이터베이스 서버 또는 Docker Swarm에서 실행될 기타 애플리케이션이 될 수 있습니다.

Docker Swarm에서 서비스를 설정하려면 사용할 이미지, 노출할 포트 및 복제본 수를 지정해야 합니다.

Docker Swarm을 배포한 후에는 이제 Docker Swarm에 대한 서비스의 기본 배포를 배우게 됩니다.

아래와 같이 "docker service create" 명령을 통해 새로운 서비스 "test-httpd"를 생성합니다.

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

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

"test-httpd" 서비스가 실행되면 다음 명령을 사용하여 확인합니다. "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 ps" 명령을 통해 "test-httpd" 서비스에서 실행 중인 컨테이너도 확인할 수 있습니다.

docker service ps test-httpd

"test-httpd.1" 컨테이너가 "manager" 서버에서 실행되고 있는 것을 볼 수 있습니다.

이제 아래 ufw 명령을 통해 모든 서버에서 포트 "8000"을 엽니다.

sudo ufw allow 8000/tcp

그런 다음 아래와 같이 curl 명령을 사용하여 "test-httpd" 서비스를 확인합니다. "192.168.5.30"은 Swarm Manager IP 주소이고 "test-httpd" 서비스는 포트 8000에서 실행 중입니다.

curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

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

Docker Swarm의 확장 서비스

이제 Docker Swarm에서 서비스를 확장하는 방법을 배웁니다.

다음 명령을 실행하여 "test-httpd" 서비스를 3개의 복제본으로 확장합니다.

docker service scale test-httpd=3

이제 아래 명령을 사용하여 "test-httpd" 서비스에서 실행 중인 컨테이너를 확인하십시오. 서버 관리자, node1 및 node2에서 실행 중인 "test-http" 서비스에 세 개의 서로 다른 컨테이너가 표시되어야 합니다.

docker service ps test-httpd

마지막으로 다음 docker 명령을 실행하여 node1 및 node2 서버에서 실행 중인 컨테이너를 확인합니다. 이름이 "test-httpd.random name"인 컨테이너가 두 서버에서 실행 중인 것을 볼 수 있습니다. 또한 TCP 포트 8000을 통해 컨테이너에 액세스할 수 있음을 알 수 있습니다.

node1에서 컨테이너를 확인 중입니다.

docker ps
curl node1:8000

node2에서 컨테이너를 확인 중입니다.

docker ps
curl node2:8000

Docker Swarm에서 서비스 삭제

이제 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개의 Debian 11 서버와 함께 Docker Swarm을 배포했습니다. 또한 Linux 서버에서 Docker Engine의 기본 설치와 Debian 시스템에서 UFW 방화벽의 기본 구성을 배웠습니다. 마지막으로 "docker service" 명령을 통해 Docker Swarm에 기본 애플리케이션을 배포하는 방법도 배웠습니다.

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