MySQL Dockerコンテナの作成と実行方法を徹底解説
はじめに
Dockerコンテナ化の最も重要な特徴のひとつは、必要な依存関係やパッケージがすべて揃った、境界のある実行環境をアプリケーション向けに構築できる点です。多くのアプリケーションではデータを保存するためにバックエンドデータベースが必要になります。OracleはMySQLをコンテナ内で動作させるためのDockerイメージを公式提供しており、データベースアプリケーションのテスト環境として最適な選択肢となっています。
Dockerを利用すれば、MySQLのバイナリと依存関係を含むイメージをダウンロードし、仮想ファイルシステムを構築できます。さらに、--rmフラグを付けてコンテナを起動すると、停止時にファイルシステムごとコンテナインスタンスが自動削除されるため、runコマンドと組み合わせることで、テスト後のクリーンアップを自動化できます。
本記事では、アプリケーションのテスト用にMySQL Dockerコンテナを作成する手順を詳しく解説します。
MySQL用Dockerコンテナの作成
以下のコマンドを実行すると、最新バージョンのMySQLイメージからコンテナインスタンスが作成されます。--rmフラグにより、コンテナ停止時にファイルシステムも含めて自動的に削除されます。
sudo docker run --rm --name=mysql-test -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server
各オプションの意味は以下の通りです。
- --rm: コンテナ停止後にDockerデーモンへファイルシステムの削除を指示する
- --name: コンテナに「mysql-test」という名前を付ける
- -e MYSQL_ALLOW_EMPTY_PASSWORD=yes: rootユーザーに空のパスワードを設定することを許可する(テスト用途向け)
MySQL Dockerコンテナの実行
MySQLクライアントプログラムは、ローカルソケット接続(localhost経由)で接続します。ローカルでMySQLに接続するには、次のコマンドを使用します。
sudo docker exec -it mysql-test mysql -uroot
exec命令は、指定したコマンドをDockerコンテナ内部で実行するようデーモンに指示します。-itフラグは対話型シェルでコンテナを開くための指定で、コンテナ内で実際に実行されるシェルコマンドが「mysql -uroot」です。
TCP/IPによるクライアントアクセス
前述の手順を実行すると、DockerはコンテナにプライベートIPアドレスを割り当て、ホストシステム上にネットワークインターフェースを生成します。これらはTCP/IP接続のエンドポイントとして利用できます。
TCP/IP接続を確立しない限り、MySQLサービスにはアクセスできません。そのためには、ホスト側の仮想ネットワークインターフェースとDockerコンテナインスタンスそれぞれのIPアドレスを調べる必要があります。
ホスト側ネットワークインターフェースのIPアドレス確認
自端末のネットワークインターフェースのIPアドレスは、以下のコマンドで確認できます。
ip addr show docker0
このコマンドで取得したIPアドレスが、クライアントアプリケーションが接続するエンドポイントの一つとなり、MySQLユーザーの作成にも使用します。
コンテナ側のIPアドレス確認
もう一方のエンドポイント、つまりMySQL用DockerコンテナインスタンスのIPアドレスは、以下のコマンドで確認できます。
sudo docker inspect mysql-test
この2つのIPアドレスを使えば、TCP/IP接続を確立し、クライアントアプリケーション用のユーザーを作成できます。
rootユーザーの作成と権限付与
パスワードなしのrootユーザーとしてローカルシステムからアクセスできるようにするには、以下の手順を実行します。
まず、ターミナル上でmysql-testコンテナを起動し、mysqlシェルにアクセスします。
sudo docker exec -it mysql-test mysql -uroot
mysqlシェルに入ったら、以下のコマンドでローカルシステムをrootユーザーとして登録します。
create user root@<仮想ネットワークインターフェースのIP> identified by '';
注意点として、このコマンドで指定するIPアドレスは、前の手順で確認したローカルマシン上の仮想ネットワークインターフェースのIPアドレスである必要があります。
続いて、作成したユーザーにすべての権限を付与します。
grant all on *.* to root@<仮想ネットワークインターフェースのIP> with grant option;
テスト後のクリーンアップ
すべてのテストが完了したら、stopコマンドとrmコマンドを使ってコンテナを停止・削除するだけで、環境をきれいに片付けられます。--rmフラグ付きで起動していれば、停止するだけで自動的に削除されます。
まとめ
本記事では、MySQL Dockerコンテナの作成・起動方法と、Linuxマシン上の仮想ネットワークインターフェースとDockerコンテナ間のTCP/IP接続によるアクセス方法を解説しました。また、rootユーザーの作成と権限付与の手順、テスト後の自動クリーンアップ機能についても紹介しました。Dockerを活用すれば、軽量かつ再現性の高いMySQLテスト環境を手軽に構築・廃棄でき、開発効率の向上が期待できます。
-
【Spring Boot】HibernateでMySQLのテーブルを自動作成する方法
Spring BootとHibernateを組み合わせると、エンティティクラスから自動的にMySQLのテーブルを作成できます。本記事では、application.propertiesの設定だけでテーブルを自動生成する手順を、実際のコード例とともにわかりやすく解説します。1. application.propertiesの設定テーブルを自動作成するには、まずapplication.propertiesに以下の1行を追加します。spring.jpa.hibernate.ddl-auto=updateddl-auto=updateを指定すると、アプリケーションの起動時にHibernateがエンティテ
-
DockerでMongoDBをコンテナとしてデプロイする手順を徹底解説
最も扱いやすいNoSQLデータベースの一つであるMongoDB®には、さまざまなデプロイ方法が用意されています。この記事では、Docker®を使用してMongoDBをコンテナとしてデプロイし、シェルクライアントからそのコンテナを操作する方法を解説します。 はじめに パソコンやサーバーにDockerをインストールしたら、以下の手順に従ってMongoDBをDockerコンテナとしてデプロイしていきます。 最新版または特定バージョンのMongoDB Dockerイメージをダウンロードする MongoDBのインスタンスをコンテナとしてデプロイする 基本的なシェル操作でMongoDB Dockerコン