Dockerは、コンテナーを使用してアプリケーションを作成、デプロイ、実行するために使用できるオープンソースツールです。コンテナを使用すると、必要なすべての依存関係を含むアプリケーションをパッケージ化し、単一のパッケージとして出荷できます。
Docker Swarmは、Dockerホストの管理に使用されるクラスタリングツールです。これにより、Dockerホストのグループを単一の論理仮想サーバーにすることができます。このようにして、アプリケーションを水平方向にスケーリングし、コンテナーインスタンスの数を増やすことができます。 Docker swarmは、コンテナーの自己修復、負荷分散、コンテナーのスケールアップとスケールダウン、サービスディスカバリ、ローリング更新などの非常に便利な機能を提供します。
この投稿では、CentOS8でDockerSwarmクラスターをセットアップする方法を紹介します。
- CentOS8を実行している2台のサーバー。
- ルートパスワードは各サーバーで構成されます。
まず、両方のノードにDockerをインストールする必要があります。デフォルトでは、最新バージョンのDockerはCentOS8のデフォルトリポジトリに含まれていません。そのため、システムに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
DockerSwarmクラスターを初期化します
次に、マネージャーノードでDockerSwarmクラスターを初期化する必要があります。次のコマンドで実行できます:
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ワーカーノードで上記の出力に示されているコマンドを使用して、ノードをクラスターに参加させることができます。
次のコマンドを使用して、DockerSwarmクラスターの情報を確認できます。
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
これで、次のコマンドを使用してDockerSwarmノードを確認できます。
docker node ls
次の出力が得られるはずです:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5
次に、ワーカーノードをDockerSwarmマネージャーノードに追加する必要があります。ワーカーノードで次のコマンドを使用して実行できます。
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
ワーカーノードがDockerSwarmに追加されていることを確認する必要があります:
cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5 bipfv8sfm94a9po0uame5rd1n workernode Ready Active 20.10.5
DockerSwarmでサービスを起動します
ここでは、新しいNginx Webサービスを作成し、2つのコンテナーでスケーリングします。 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
これで、次のコマンドを使用してWebサービスを確認できます。
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
Webサービスの詳細情報を取得するには、次のコマンドを実行します。
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
DockerSwarmを確認する
この時点で、管理ノードを含むクラスターノード全体にNginxコンテナーをデプロイしました。これで、ワーカーノードまたはマネージャーノードのIPアドレスのいずれかを使用してNginxウェブサーバーにアクセスできます。
上記のガイドでは、CentOS8でDockerSwarmクラスターをセットアップする方法を学習しました。これで、Docker Swarmクラスターに任意の数のワーカーノードを追加して、アプリケーションをスケーリングできます。