Zakku-Spot.com

気になる情報のリサーチブログ - Reserch blog of information you care about -

[レビュー]Docker Swarmクラスターに、MySQLコンテナをデプロイしてみた

6月 18, 2023
0 0
Read Time:1 Minute, 26 Second

 Docker Desktop上では、Swarmクラスターを作成し、(MySQL等のコンテナを)デプロイすることで、スケーラビリティと冗長性を持ったDockerアプリケーションとしての実行が可能になります。

 ここでは、WebアプリケーションのデータベースとしてMySQLを使用する環境において、冗長性と可用性を確保する目的で、MySQLコンテナをSwarmクラスター上にデプロイしてみました。

1.Swarmクラスター構築

 以下の手順でSwarmクラスターを構築しました。

(1)Docker Swarmクラスター作成

 以下の手順で、Docker Swarmクラスターを作成しました。

 ① Swarmクラスター作成

 > docker swarm init

 ② マネージャーノード情報(IPアドレスとポート番号)

 クラスターの作成が成功したら、マネージャーノードのIPアドレスとポート番号をメモします。
 ここでは、(上図の赤丸の部分から)
 ・IPアドレス: 192.168.65.4
 ・ポート番号: 2377
 になります。

(2)MySQLコンテナ作成

 以下の手順で、MySQLコンテナを2つ作成します。

① Dockerコンテナの元にするイメージの確認

 ここでは、Docker Desktopの[Images]で表示されている「mysql8.0.33-image」を使用しました。
 ※もしまだイメージをダウンロードしていない場合は、「mysql:latest」と指定することで、自動的にダウンロードされます。

② 使用できるネットワークの確認

 ここでは、(下図の)bridgeネットワークを使用します。

③ docker runコマンドを使用して、MySQLコンテナを作成します。

> docker run -d –name mysql8.0.33-container01 –network bridge -e MYSQL_ROOT_PASSWORD=<パスワード> mysql8.0.33-image

 ※コンテナ名:mysql8.0.33-container01
  使用するネットワーク:bridge
  元にするイメージ:mysql8.0.33-image

 上記で、名前がmysql8.0.33-container01という名前のMySQLコンテナが作成されました。
 また、bridgeという名前の共有ネットワークに接続されました。

2.MySQLコンテナのデプロイ

(1)MySQLコンテナのSwarmクラスター上へのデプロイ

 次のコマンドで、Swarmクラスター上にMySQLコンテナをデプロイします。

 > docker service create

実施例)

 > docker service create 
    –name mysql8-0-33-container01-service ※①MySQLコンテナ名
    –replicas 2 ※②冗長化する数
    –network bridge ※③使用しているネットワーク名
    -e MYSQL_ROOT_PASSWORD=<パスワード> ※④MySQLのパスワード
    mysql8.0.33-image ※⑤使用するDockerイメージ

(上記に一部含まれるワーニングについて)

(ワーニング(抜粋))
image mysql8.0.33-image:latest could not be accessed on a registry to record its digest. Each node will access mysql8.0.33-image:latest independently, possibly leading to different nodes running different versions of the image.

 これについては、仕様上、Docker Swarmでは、サービスを複数のノードで実行する場合、各ノードが同じイメージの同じバージョンを使用するようにするために、イメージのデジェストをレジストリに記録する、という仕様になっているそうです。(これにより、異なるノード間で異なるイメージバージョンが実行されることを防ぐことができるわけです)

 しかし、ワーニングによると、指定したイメージ「mysql8.0.33-image:latest」のデジェストをレジストリに記録することができなかった、ということです。(その結果、各ノードは独立してイメージにアクセスし、異なるノードで異なるイメージバージョンが実行されてしまう可能性があるらしいです)

 上記については、別記事をご参照下さい。

(2)サービスの確認

 (上記でデプロイした)サービスを確認します。

 > doker service ls

 上記でデプロイしたSwarmクラスターが確認できました。

(3)Docker Desktop上でのサービスの確認

 上記(赤丸の部分)で、MySQLコンテナのサービスが2つ起動されていることが確認できました。

3.Swarmクラスター上のDockerコンテナの削除方法

 上記1~2の手順で作成した(Swarmクラスター上の)コンテナは、可用性と冗長性が確保されているため、Docker Desktop上で普通に(チェックを入れて削除ボタンをクリックして)削除しようとしても、復活、再起動を繰り返す場合があります。(下図参照)

 ↓ チェックを入れて停止しても・・・

 この様に、どんどんサービスが復活(新規作成)されて再起動されます。

 上記の様な場合は、以下の手順で削除出来る様です。

(1)Swarmノードのリスト表示

 Swarmクラスターに参加しているノードの一覧を表示します。

 > docker node ls

(2)Swarmサービスのリスト表示

 現在実行中のサービスの一覧を表示します。

 > docker service ls

(3)サービスの停止

 サービスの名前またはIDを確認し、それを使用してサービスを停止します。

 > docker service rm mysql8-0-33-container01-service

(4)直接コンテナを削除します。

 上記(3)実施後、もしコンテナがまだ実行中であれば、直接コンテナを削除します。

Happy
Happy
100 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

コメントを残す