Dockerコンテナ内でMySQLデータベースを実行する方法

ローカルコンテナ化データベースを使用することで、柔軟性が高まり設定が簡素化されます。従来のデータベースインストールの複雑さなしに、本番環境を密接に再現することができます。Dockerはこのプロセスを効率化し、わずかいくつかのコマンドで隔離されたコンテナ内にデータベースをデプロイ、管理、スケールするのが簡単になります。

このガイドでは、以下のことを学びます:

  • ローカルコンテナ化データベースの実行
  • コンテナ化データベースのシェルへのアクセス
  • ホストからコンテナ化データベースへの接続
  • ボリューム内でのデータベースデータの永続化
  • ラボのクリーンアップ

前提条件

このガイドに従うためには、Dockerがインストールされている必要があります。インストール手順については、Dockerのウェブサイトを参照してください。

コンテナ化データベースのセットアップにおけるステップバイステップガイド

1. ローカルコンテナ化データベースの実行

最も人気のあるデータベースシステム、例えば MySQLPostgreSQL、および MongoDBは、Docker Hubで公式のDockerイメージが利用できます。これらの選定されたイメージは、最新の機能やセキュリティアップデートにアクセスできるようにするためのベストプラクティスに従っています。 

Docker Hubにアクセスして、興味があるデータベースを検索して始めてください。各イメージのページには、コンテナの実行、設定のカスタマイズ、データベースの設定に関する詳細な指示が記載されています。このガイドに提供されるMySQLイメージの詳細については、Docker HubのMySQLイメージページを参照してください。

データベースコンテナを実行するには、Docker Desktop GUIまたはCLIを使用できます。CLIを使用してコンテナを実行するには、ターミナルで以下のコマンドを実行します:

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

このコマンドでは:

  • --name my-mysql コンテナにmy-mysqlという名前を割り当て、簡単に参照できるようにします。
  • -e MYSQL_ROOT_PASSWORD=my-secret-pwは、MySQLのrootパスワードをmy-secret-pwに設定します。必要に応じて、my-secret-pwを自分で選んだ安全なパスワードに置き換えてください。
  • -e MYSQL_DATABASE=mydb は、任意でmydbという名前のデータベースを作成します。必要に応じて、mydbを希望するデータベース名に変更してください。
  • -dは、コンテナをデタッチモードで実行し、バックグラウンドで動作させます。
  • mysql:latestは、MySQLイメージの最新バージョンを使用することを指定します。

コンテナが動作していることを確認するために、ターミナルで docker psを実行してください:

Shell

 

run docker ps

また、Docker Desktopのコンソールでも同じ確認を行うことができます:

2. コンテナ化されたデータベースのシェルにアクセスする

データベースがDockerコンテナ内で動作している場合、データベースを管理したり、コマンドを実行したり、管理者タスクを実行するためにシェルにアクセスする必要があるかもしれません。Dockerはdocker execコマンドを使った簡単な方法を提供しています。また、グラフィカルなインターフェースを好む場合にはDocker DesktopのGUIを使用することもできます。

まだデータベースコンテナが動作していない場合は、ローカルのコンテナ化されたデータベースを実行するを参照してください。CLIを使用してMySQLコンテナのターミナルにアクセスするには、以下のdocker execコマンドを使用します。

Shell

docker exec -it my-mysql bash 

このコマンドでは:

  • docker execは、Dockerに実行中のコンテナでコマンドを実行したいことを通知します。
  • -itは、アクセス中のターミナルがインタラクティブであることを確保し、コマンドを入力できるようにします。
  • my-mysqlはあなたのMySQLコンテナの名前です。実行時にコンテナを異なる名前で命名した場合は、その名前を使用してください。
  • コンテナ内で実行したいコマンドはbashです。bashシェルを開き、コンテナのファイルシステムとインストールされたアプリケーションと対話的に操作できます。
  • このコマンドを実行した後、あなたのMySQLコンテナ内のbashシェルへのアクセスが許可され、直接MySQLサーバーを管理することができます。終了してターミナルに戻るにはExitを実行します。

Dockerコンテナが動作しているか確認してください。

Shell

 

run docker ps

コンテナのターミナルにアクセスしたら、そのコンテナで利用可能なすべてのツールを実行できます。以下の(画像)例は、コンテナ内でMySQLを使用してデータベースを一覧表示する方法を示しています。

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

テストテーブルに作成したテーブルと保存したデータは、同じコンテナを使用している間だけ永続的です;新しいコンテナを再作成または構築するとすべてのデータが失われます。

コンテナを終了して再度データベースにログインし、データが存在するか確認することで検証できます。コンテナが動作している限り、データはデータベースに存在することを確認できます。

3.ホストからコンテナ化されたデータベースに接続する。

ホストマシンからコンテナ化されたデータベースに接続するには、コンテナ内のポートをホストマシンのポートにマッピングする必要があります。このプロセスにより、コンテナ内のデータベースがホストマシンのネットワークを通じてアクセス可能になります。MySQLの場合、デフォルトのポートは3306です。このポートを公開することで、ホストマシン上のさまざまなデータベース管理ツールやアプリケーションを使用して、MySQLデータベースと対話できます。

開始する前に、このガイドに従って実行した以前のコンテナを削除する必要があります。コンテナを停止して削除するには、次のいずれかを行います:

  • ターミナルでdocker remove --force my-mysqlを実行して、my-mysqlという名前のコンテナを削除します;
  • または、Dockerダッシュボードでコンテナビュー内のコンテナの横にある削除アイコンを選択します。

次に、DockerデスクトップのGUIまたはCLIを使用して、マッピングされたポートでコンテナを実行できます。

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

このコマンドでは、-p 3307:3306でホスト上のポート3307をコンテナ内のポート3306にマッピングします。

4. ボリュームにデータベースデータを永続化する

データベースデータをDockerボリュームに永続化することは、コンテナの再起動や削除後もデータが生存するようにするために必要です。Dockerボリュームを使用することで、データベースファイルをコンテナの書き込み可能なレイヤー外部に保存できるため、コンテナをアップグレードしたり、ベースを変更したり、データを失わずに共有することができます。ボリュームをデータベースコンテナに接続するには、Docker CLIまたはDockerデスクトップGUIのいずれかを使用します。

注意:前述の「コンテナ化されたデータベースに接続」のセクションで行ったように、開始する前に、このガイドのために以前に実行したコンテナをすべて削除する必要があります。

次に、Docker Desktop GUIまたはCLIを使用して、ボリュームを伴ってコンテナを実行できます。

データベースコンテナにボリュームをアタッチして実行するには、—vオプションをdocker runコマンドに含めます。これはボリューム名と、コンテナ内でデータベースがデータを保存するパスを指定します。ボリュームが存在しない場合、Dockerは自動的にそれを为您に作成します。

ボリュームをアタッチしてデータベースコンテナを実行し、データが永続化されることを確認します。コンテナを実行し、ボリュームをアタッチします。

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

このコマンドは、ボリューム名my-db-volumeをコンテナ内の/var/lib/mysql ディレクトリにマウントします。

データベースにデータを作成します。コンテナ内でMySQLを実行してテーブルを作成するためにdocker execコマンドを使用します。

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

このコマンドは、コンテナ内のMySQLツールを使用して、mytableという名前のテーブルを作成し、column_nameという名前のカラムを追加し、最後に値を挿入します。

コンテナを停止して削除します。ボリュームなしの場合、作成したテーブルはコンテナを削除すると消失します。

Shell

docker remove --force my-mysql

ボリュームをアタッチして新しいコンテナを起動します。今回は、設定がボリュームに保存されているため、環境変数を指定する必要はありません。

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

作成したテーブルがまだ存在することを確認します。その後、再びdocker execコマンドを使用して、コンテナ内でMySQLを実行します。

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

このコマンドは、コンテナ内のMySQLツールを使用して、テーブルのすべてのレコードを選択します。以下のような出力が表示されるはずです。

SQL

 

column_name

value

5. MySQL コンテナイメージをクリーンアップする

コンテナを削除するには、docker removeコマンドを使用し、コンテナ名またはIDをスペースで区切ります。例えば:

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

結論

最終的に、Dockerを使用してMySQLを実行することは、ポータブルで拡張可能で効率的なデータベース管理ソリューションを提供します。Dockerの隔離されたコンテナは、デプロイメントをスムーズにし、互換性の問題を減少させ、リソースの使用を最適化します。バージョンコントロールと環境のリセットが簡単に行えるため、Dockerは迅速な開発とテストをサポートします。マイクロサービスでのMySQLデータベースの管理に最適で、デプロイメントとスケーリングを簡単にし、強力なパフォーマンスを維持します。

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container