Docker コンテナで MySQL を実行する方法: シンプルでわかりやすいガイド
このステップバイステップのガイドでは、Docker コンテナーで実行される新しい MySQL サーバーをわずか数分でセットアップする方法を説明します。
Docker の優れた点の 1 つは、マシンに直接インストールしなくても、Docker を使用してアプリケーションをすぐに試せることです。たとえば、Docker を使用してコンテナ内のデータベースをリモート サーバーとして実行し、アプリケーションがデータベースとどのように対話するかをテストできます。
Docker コンテナで MySQL を実行することは、広く使用されているメカニズムです。 MySQL は、Docker コンテナで使用される最も人気のあるデータベースの 1 つです。
もちろん、MySQL を Docker コンテナとして作成するには、ホスト マシンに Docker がインストールされている必要があります。したがって、まだインストールしていない場合は、非常に役立つガイドをいくつか紹介します。
- Ubuntu に Docker エンジンをインストールする方法: ステップバイステップ ガイド
- AlmaLinux/Rocky Linux に Docker をインストールする方法
1. MySQL Docker イメージをプルする
Docker で MySQL サーバーを作成してテストするには、まず Docker Hub から MySQL 公式イメージを取得する必要があります。
8.0、5.7、5.6 などの特定のバージョンをダウンロードすることも、次のコマンドに示すように最新リリースを選択することもできます。
sudo docker pull mysql:latest
MySQL の特定のバージョンが必要な場合は、latest
をバージョン番号に置き換えます。
docker Images
コマンドを実行すると、Docker Hub から取得した Docker イメージのリストを表示できます。
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 2fe463762680 13 hours ago 514MB
ご覧のとおり、ローカルにインストールされた Docker で MySQL イメージを使用できるようになりました。
2. Docker ボリュームのセットアップ
ご存知のとおり、Docker コンテナは原則として一時的なものであり、コンテナが削除されるとデータや構成が失われることが予想されます。
ただし、Docker ボリュームは、Docker コンテナ内で作成されたデータを永続化するメカニズムを提供します。したがって、これらは Docker コンテナの永続データを保存するための Docker の推奨メカニズムです。
MySQL は、データ ファイルを /var/lib/mysql
ディレクトリに保存します。したがって、デプロイする前に、データベースを永続化するために Docker ボリュームをセットアップする必要があります。そうしないと、コンテナーの再起動時にデータが失われます。
新しいボリュームを作成し、mysql-data
という名前を付けましょう。すべてのデータベース情報を保存するために使用されます。
sudo docker volume create mysql-data
以下のコマンドを実行すると、Docker が認識しているすべてのボリュームを一覧表示できます。
sudo docker volume ls
DRIVER VOLUME NAME
local mysql-data
ご覧のとおり、新しく作成された mysql-data
という名前の Docker ボリュームがここにあり、データを提供する準備ができています。その後、新しくスピンされた MySQL コンテナーにアタッチできます。
3. MySQL Docker コンテナを実行する
これで、マシン上に MySQL Docker イメージとデータを永続化するためのボリュームができたので、コンテナーをデプロイできます。 MYSQL_ROOT_PASSWORD
環境変数を使用して、MySQL root ユーザーのパスワードを設定する必要もあります。
それでは、コンテナを実行してみましょう。
sudo docker run -d --name=mysql-server -p 3306:3306 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=your_password mysql
それでおしまい。これにより、最新バージョンの MySQL インスタンスが起動し、指定した root パスワードを使用してどこからでもリモートでアクセスできるようになります。
わかりやすくするために、この構文を分解してみましょう。まず、コマンドの各パラメータの意味は次のとおりです。
-d
は、このコンテナをバックグラウンドで分離モードで実行します。--name
は、コンテナ インスタンスに名前mysql-server
を割り当てます。これを指定しない場合、Docker はランダムな名前を生成します。-p
は、MySQL コンテナ ポート3306
をホストマシン上の同じポートにバインドします。ホスト上で実行されている MySQL クライアント (mysql
) を使用して、ポート3306
の127.0.0.1
に接続できるようになります。-v
オプションは、コンテナ ボリューム (/var/lib/mysql
) 内のデータ フォルダーをローカルの Docker ボリューム (mysql-data
) にバインドします。前のステップで作成したもの。-e
は環境変数を設定します。この場合、MySQL の root パスワード。mysql
は、コンテナの作成に使用するイメージの名前です。
実行中のコンテナをリストすることで、コンテナが実行されているかどうかを確認できます。
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0fc229e3df77 mysql "docker-entrypoint.s…" 37 minutes ago Up 34 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql-server
関連: MySQL: mysqldump を使用してデータベースをバックアップ (ダンプ) および復元する方法
4. MySQL コンテナへの接続
インタラクティブな MySQL シェルを取得するには、コンテナにアタッチして mysql
コマンドを実行します。これにより、使い慣れたコマンドとフラグをすべて使用できる完全な MySQL コマンドライン インターフェイスが提供されます。
sudo docker exec -it mysql-server mysql -u root -p
関連: コマンドラインを使用して MySQL にデータベースを作成する方法
mysql
クライアントがホストにプリインストールされている場合は、mysql
クライアントを使用して MySQL Docker インスタンスに接続することもできます。
デフォルトでは、localhost
に接続するように指示すると、mysql クライアントは UNIX ソケットを使用して接続を試行することに注意してください。そのため、localhost
ではなく 127.0.0.1
を使用してください。
mysql -u root -h 127.0.0.1 -p
もちろん、MySQL Workbench などの GUI ベースのクライアントを使用してデータベースに接続することもできます。たとえば、MySQL Workbench の「Hostname」に、Docker コンテナを起動したマシンの IP アドレスを指定します。
関連: MySQL Workbench を使用して MySQL にデータベースを作成する方法
もちろん、上記のホスト名の例では、127.0.0.1 の代わりに、MySQL Docker コンテナが動作するマシンの IP アドレスを使用できます。
このアドレスは、引数を指定せずに ifconfig
コマンドを実行すると見つかります。マシンの IP アドレスを使用して、MySQL サーバーにリモートからアクセスできます。
5. MySQL コンテナの停止、起動、再起動
このコマンドは、実行中の MySQL コンテナを一時的に停止します (後で再開/再起動できます)。
sudo docker stop mysql-server
MySQL コンテナを開始するには、次のコマンドを実行します。
sudo docker start mysql-server
以下のコマンドは、実行中の MySQL コンテナを再起動するために使用されます。
sudo docker restart mysql-server
結論
ご覧のとおり、Docker 内で MySQL を実行する方が、MySQL Server をローカルにインストールするよりもはるかに速くて簡単です。ただし、テスト以外の目的で Docker 上で MySQL を使用する場合は、さらに多くのことを考慮する必要があります。
詳細については、Docker Hub の MySQL ページと、この件に関する公式 MySQL マニュアルを確認してください。
ご質問やご提案がございましたらお知らせください。喜んでフォローさせていただきます。