1. 概要

今日の技術の時代では、組織はビジネスを引き付けて維持するためにアプリを迅速にリリースする必要があります。 これにより、チームはより少ないコストでより速いペースで展開環境を構築および構成できます。 ただし、コンテナ化テクノロジーは、軽量のインフラストラクチャを構築するために役立ちます。

この記事では、containerベースの環境でMySQLサーバーをデプロイして接続する方法について説明します。

さて、それの核心に取り掛かりましょう。

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

まず、MySQLコンテナの展開に関連する手順を見てみましょう。 基本的に、MySQLはクライアントサーバーアーキテクチャモデルに従います。 ここでは、サーバーはデータベースを含むコンテナイメージですが、クライアントはホストマシン上のデータベースにアクセスするために使用されます。

展開ワークフローを3つのセクションに分割しました。

2.1. MySQLサーバーの展開

それでは、MySQLサーバーインスタンスをDockerに取り込みましょう。 DockerHubから取得したMySQLイメージに基づいてコンテナを簡単に構築できます。 DockerHubからプルするイメージのバージョンを選択する際に考慮すべき2つのポイントがあります。

  • 公式画像スタンピング–これらはMySQL開発者チームからのより安全で厳選された画像です。
  • 最新のタグ– MySQLバージョンに予約がない限り、リポジトリで利用可能な最新バージョンを使用できます。

docker pull コマンドを使用して、DockerHubから公式のMySQLイメージをプルしてみましょう。

$ docker pull mysql:latest
latest: Pulling from library/mysql
f003217c5aae: Pull complete
…
… output truncated …
…
70f46ebb971a: Pull complete
db6ea71d471d: Waiting
c2920c795b25: Downloading [=================================================> ]  105.6MB/107.8MB
26c3bdf75ff5: Download complete

通常、画像は、マニフェストファイルで説明されているように、順序付けられた形式で緊密に結合された別個のレイヤーです。 docker pull コマンドは、blobストアから画像のレイヤーを取得し、マニフェストファイルを使用して画像を自動的に作成します。

…
… output truncated …
…
4607fa685ac6: Pull complete
Digest: sha256:1c75ba7716c6f73fc106dacedfdcf13f934ea8c161c8b3b3e4618bcd5fbcf195
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

バンドルされたイメージは、上記のように将来の参照用にハッシュコードを取得します。

さらに面倒なことはせずに、コンテナを実行してみましょう。 docker runコマンドは通常、イメージレイヤーの上に書き込み可能なコンテナーレイヤーを作成します。 -name 引数を使用してコンテナ名を指定し、最新のタグが付いたMySQLイメージを使用する必要があります。 さらに、環境変数MYSQL_ROOT_PASSWORDを使用してMySQLサーバーのパスワードを設定します。 この場合、パスワードは「baeldung」に設定されています。

最後に、 -d オプションは、コンテナーをデーモンとして実行するのに役立ちます。 出力は、将来のコンテナ管理のために別のハッシュコードをスローします。

$ docker run --name bael-mysql-demo -e MYSQL_ROOT_PASSWORD=baeldung -d mysql:latest
fedf880ce2b690f9205c7a37f32d75f669fdb1da2505e485e44cadd0b912bd35

ps コマンドを使用すると、ホスト内のすべての実行中のコンテナーを確認できます。

$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                 NAMES
fedf880ce2b6   mysql:latest   "docker-entrypoint.s…"   17 seconds ago   Up 16 seconds   3306/tcp, 33060/tcp   bael-mysql-demo

2.2. MySQLクライアントのインストール

MySQLサーバーに簡単にアクセスするには、クライアントをインストールする必要があります。 必要に応じて、ホストマシン、またはサーバーコンテナとのIP到達可能性を備えたその他のマシンまたはコンテナにクライアントをインストールできます。

$ sudo apt install mysql-client -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
mysql-client is already the newest version (5.7.37-0ubuntu0.18.04.1).
…
… output truncated …
…

次に、MySQLクライアントのインストールパスとバージョンの抽出を有効にしましょう。

$ which mysql
/usr/bin/mysql
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.37, for Linux (x86_64) using  EditLine wrapper

2.3. コミュニケーションを確立する

次に、インストールされているクライアントを使用してサーバーにログインします。 従来、サーバーログインにはユーザー名とパスワードを指定してMySQLコマンドを使用していました。 ただし、コンテナベースのソリューションの場合は機能しません :

$ mysql -u root -p
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

上に示したように、ソケットエラーが発生します。 ここで、MySQLサーバーはコンテナであり、単にホストマシンにインストールされているのではないことを理解することが重要です。 上記のセクションで強調したように、コンテナは、独自のコンピューティングリソース、ネットワーキング、およびストレージを備えた軽量サーバーです。

inspect コマンドは、IPアドレスをMySQLサーバーインスタンスに割り当てるのに役立ちます。

$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' bael-mysql-demo
172.17.0.2

クライアントのホストオプションで上記のIPアドレスを指定し、デフォルトのポート番号とプロトコルタイプをTCPとして指定します。

$ mysql -h 172.17.0.2 -P 3306 --protocol=tcp -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
…
… output truncated …
…
mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> exit
Bye

おめでとうございます。MySQLサーバーに正常にログインしました。

3. 結論

要約すると、MySQLサーバーコンテナをデプロイし、MySQLクライアントをホストマシンにインストールし、最後にコンテナ情報を使用してそれらの間の接続を確立するための手順を詳しく見てきました。