CentOS 8에서 Docker Swarm 클러스터를 설치 및 구성하는 방법
이 페이지에서
- 전제 조건
- 두 노드 모두에 Docker 설치
- 방화벽 구성\n
- Docker Swarm 클러스터 초기화\n
- Docker Swarm 클러스터에 작업자 노드 추가
- Docker Swarm에서 서비스 시작
- Docker Swarm 확인\n
- 결론
Docker는 컨테이너를 사용하여 애플리케이션을 생성, 배포 및 실행하는 데 사용할 수 있는 오픈 소스 도구입니다. 컨테이너를 사용하면 필요한 모든 종속성과 함께 애플리케이션을 패키징하고 단일 패키지로 배송할 수 있습니다.
Docker Swarm은 Docker 호스트를 관리하는 데 사용되는 클러스터링 도구입니다. Docker 호스트 그룹을 단일 논리적 가상 서버로 만들 수 있습니다. 이렇게 하면 애플리케이션을 수평으로 확장하고 컨테이너 인스턴스의 수를 늘릴 수 있습니다. Docker Swarm은 컨테이너 자가 복구, 로드 밸런싱, 컨테이너 확장 및 축소, 서비스 검색, 롤링 업데이트를 비롯한 매우 유용한 기능을 제공합니다.
이 게시물에서는 CentOS 8에서 Docker Swarm 클러스터를 설정하는 방법을 보여줍니다.
전제 조건
- CentOS 8을 실행하는 두 대의 서버.\n
- 루트 암호는 각 서버에 구성됩니다.\n
두 노드 모두에 Docker 설치
먼저 두 노드 모두에 Docker를 설치해야 합니다. 기본적으로 최신 버전의 Docker는 CentOS 8 기본 리포지토리에 포함되어 있지 않습니다. 따라서 시스템에 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
다음으로 방화벽을 다시 로드하여 변경 사항을 적용합니다.
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 Manager 노드에서 다음 명령을 사용하여 작업자 노드를 확인합니다.
docker node ls
작업자 노드가 Docker Swarm에 추가되었는지 확인해야 합니다.
cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5 bipfv8sfm94a9po0uame5rd1n workernode Ready Active 20.10.5
Docker Swarm에서 서비스 시작
여기에서는 새로운 Nginx 웹 서비스를 만들고 두 개의 컨테이너로 확장합니다. Manager 노드에서 다음 명령을 실행하여 생성할 수 있습니다.
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 eye9zukwwrkq 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 클러스터에 작업자 노드를 원하는 수만큼 추가하고 애플리케이션을 확장할 수 있습니다.