Docker ComposeでMySQL接続をスムーズに!確認方法とサンプルコード
Docker Compose で MySQL 接続の準備状況を確認する方法
Docker Compose を使用して複数のコンテナを起動する場合、データベースコンテナ (MySQL など) の起動が遅れてアプリケーションコンテナが接続エラーになることがあります。
この問題を解決するために、Docker Compose で MySQL 接続の準備状況を確認する方法をいくつか紹介します。
方法 1: healthcheck を使用する
Docker Compose 3.8 以降では、healthcheck
オプションを使用して、サービスが起動して使用できる状態かどうかを確認できます。
MySQL の場合は、次のように docker-compose.yml
ファイルに healthcheck
オプションを追加できます。
version: "3.9"
services:
mysql:
image: mysql:5.7
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqlshow", "-u", "root", "-p", "${MYSQL_ROOT_PASSWORD}", "test"]
interval: 10s
timeout: 5s
retries: 5
上記の例では、以下の設定を行っています。
test
:mysqlshow
コマンドを使用してtest
データベースに接続し、データベースが利用可能かどうかを確認します。interval
: ヘルスチェックを 10 秒ごとに実行します。timeout
: ヘルスチェックが失敗した場合、5 秒後にタイムアウトします。retries
: ヘルスチェックが失敗しても、5 回まで再試行します。
方法 2: wait-for-postgres ツールを使用する
wait-for-postgres
ツールを使用して、MySQL 接続の準備状況を確認することもできます。
このツールを使用するには、まず wait-for-postgres
コンテナを起動する必要があります。
docker-compose up -d wait-for-postgres
次に、アプリケーションコンテナを起動する際に、wait-for-postgres
コンテナの IP アドレスとポートを指定する必要があります。
version: "3.9"
services:
application:
image: my-application-image
depends_on:
- wait-for-postgres
environment:
DATABASE_HOST: wait-for-postgres
DATABASE_PORT: 5432
方法 3: dockerize ツールを使用する
dockerize
ツールを使用して、アプリケーションコンテナが起動する前に MySQL 接続の準備状況を確認することもできます。
このツールを使用するには、まず dockerize
をインストールする必要があります。
pip install dockerize
次に、docker-compose.yml
ファイルに dockerize
コマンドを追加できます。
version: "3.9"
services:
mysql:
image: mysql:5.7
ports:
- "3306:3306"
application:
image: my-application-image
depends_on:
- mysql
environment:
DATABASE_HOST: mysql
DATABASE_PORT: 3306
command: ["dockerize", "-wait", "tcp://mysql:3306", "-timeout", "10s", "./app"]
-wait
:tcp://mysql:3306
アドレスが利用可能になるまで 10 秒間待機します。-timeout
: 10 秒後にタイムアウトします。./app
: アプリケーションコマンドを実行します。
補足
上記の方法はほんの一例です。状況に応じて、最適な方法を選択してください。
また、これらの方法は、Docker Compose 3.8 以降を使用している場合にのみ適用されます。
version: "3.9"
services:
mysql:
image: mysql:5.7
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqlshow", "-u", "root", "-p", "${MYSQL_ROOT_PASSWORD}", "test"]
interval: 10s
timeout: 5s
retries: 5
このコードは、以下の内容を定義しています。
version
: Docker Compose のバージョンservices
: サービス定義
このコードを使用するには、以下の手順を実行する必要があります。
docker-compose.yml
ファイルを保存します。- 現在のディレクトリから以下のコマンドを実行します。
docker-compose up -d
これで、MySQL コンテナが起動し、healthcheck
オプションを使用して接続の準備状況が確認されます。
注記
- このコードはあくまで例であり、状況に合わせて変更する必要があります。
MYSQL_ROOT_PASSWORD
環境変数は、実際のパスワードに置き換える必要があります。
Docker Compose で MySQL 接続の準備状況を確認するその他の方法
docker logs
コマンドを使用して、MySQL コンテナのログを確認できます。ログに "データベースが起動しました" などのメッセージが表示されていれば、接続準備が完了していることを示しています。
docker logs mysql
docker exec
コマンドを使用して、MySQL コンテナ内にシェルを起動し、手動で接続を確認できます。
docker exec -it mysql mysql -u root -p"$MYSQL_ROOT_PASSWORD"
上記のコマンドを実行すると、MySQL プロンプトが表示されます。データベースに正常に接続できれば、接続準備が完了していることを示しています。
mysql
コマンドラインツールを使用して、MySQL コンテナに直接接続できます。
mysql -h mysql -u root -p"$MYSQL_ROOT_PASSWORD"
ウェブブラウザを使用する
MySQL コンテナが Web 管理コンソールを公開している場合は、Web ブラウザを使用して接続を確認できます。
Web 管理コンソールの URL は、通常、以下の方法で確認できます。
docker-compose ps mysql
出力結果の PORTS
セクションに、Web 管理コンソールの URL が記載されています。
Web ブラウザで URL を開くと、ログイン画面が表示されます。正しいユーザー名とパスワードを入力してログインできれば、接続準備が完了していることを示しています。
注意事項
上記の方法を使用する場合は、必ず適切なユーザー名とパスワードを使用してください。デフォルトのパスワードは root
ですが、セキュリティ上の理由から変更することをお勧めします。
Docker Compose で MySQL 接続の準備状況を確認するには、さまざまな方法があります。状況に応じて、最適な方法を選択してください。
mysql docker docker-compose