ウェブサイト検索

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) を使用して、ポート 3306127.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 マニュアルを確認してください。

ご質問やご提案がございましたらお知らせください。喜んでフォローさせていただきます。

関連記事: