Dockerコンテナーを使用すると、依存関係でシステムを汚染することなく、新しいアプリケーションをすばやく起動できます。 MySQLデータベースは、Webベースのソフトウェアの一般的な要件です。 Dockerで新しいMySQLインスタンスをわずか数分で実行する方法は次のとおりです。
Docker Hubの公式MySQLイメージは、開始するために必要なすべてを提供します。イメージは、MySQLバージョン5.6、5.7、および8.0で使用できます。画像タグとして使用するものを指定します:
docker pull mysql:8.0
デプロイする前に、データベースを永続化するためにDockerボリュームまたはバインドマウントをセットアップする必要があります。そうしないと、コンテナの再起動時にデータが失われます。マウントは/var/lib/mysql
に対して行う必要があります コンテナ内。
また、MySQLrootユーザーのパスワードを設定する必要があります。 MYSQL_ROOT_PASSWORD
を使用します 環境変数。この変数が設定されていない場合、MySQLは初期化を拒否します。安全なパスワードを選択してみてください。
これらの前提条件を満たしながらMySQLを実行する方法は次のとおりです。
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -v $HOME/mysql-data:/var/lib/mysql -d mysql:8.0
MySQLの初回実行ルーチンは、完了するまでに数秒かかります。 docker logs my-mysql
を実行すると、データベースが稼働しているかどうかを確認できます。 。 ready for connections
を含む行を確認してください 。
関連: Dockerを使用してPHPとApacheをコンテナ化する方法
docker run
特に複雑な構成要件がある場合、コマンドはすぐに長くなる可能性があります。 docker-compose.yml
を作成する ファイルはより保守しやすいです。次に例を示します:
version: "3"
services:
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD
volumes:
- mysql:/var/lib/mysql
volumes:
mysql:
MYSQL_ROOT_PASSWORD=secure docker-compose up -d
を使用してMySQLを起動できます 。
関連: LinuxにDockerとDockerComposeをインストールする方法
コンテナに接続してmysql
を実行すると、インタラクティブなMySQLシェルを取得できます。 指図。これにより、完全なMySQLコマンドラインインターフェイスが提供されるため、使い慣れたすべてのコマンドとフラグを使用できます。
docker exec -it my-mysql mysql -p
このコマンドは、rootユーザーとしてシェルを開き、パスワードの入力を求めます。
ファイルシステムからSQLファイルをインポートするには、次のコマンドにパイプします。
docker exec -it my-mysql mysql -psecret database_name < path-to-file.sql
ホストからMySQLにアクセスする場合は、ポートバインディングを設定する必要があります。ホストポートをコンテナのポート3306にバインドします。docker-compose.yml
に以下を追加します mysql
内のファイル サービス定義:
ports:
- 33060:3306
これにより、ホストマシンのポート33060がコンテナのポート3306にバインドされます。DockerComposeを使用していない場合は、-p 33060:3306
を渡します。 docker run
へ コンテナを起動するとき。これで、localhost:33060
に接続できるようになります ホストで実行されているMySQLクライアントを使用します。
別のから接続する必要がある場合 Dockerコンテナ、DockerComposeを使用するのが最適です。新しいコンテナに別のサービスを定義します。両方のコンテナは同じDockerネットワークに存在します。 MySQLコンテナのホスト名のポート3306を使用して接続できるようになります(これは、作成ファイルで定義されたサービス名と一致します)。
MySQL Dockerイメージは、初回実行データベースのセットアップを管理できるオプションの環境変数をサポートしています。次の変数を設定して、新しい空のデータベースとユーザーアカウントを自動的にプロビジョニングします。
-
MYSQL_DATABASE
–サーバーが初めて初期化されるときに作成するデータベーススキーマの名前。 -
MYSQL_USER
およびMYSQL_PASSWORD
–root
とは別に、新しい初期ユーザーアカウントを作成します ユーザー。MYSQL_DATABASE
も設定した場合 変数の場合、新しいユーザーアカウントは自動的に 新しく作成されたデータベースに対するすべての権限が付与されます。 -
MYSQL_RANDOM_ROOT_PASSWORD
–この変数を設定して、MySQLがroot
の新しいパスワードを自動的に生成するようにします。 ユーザー。これは、MYSQL_ROOT_PASSWORD
を置き換えます 変数。生成されたパスワードは、最初の実行時に標準の出力ストリームに送信されます。このため、CI環境でこの変数を使用する場合は注意が必要です。パスワードは、ジョブログにアクセスできるすべての人に表示される可能性があります。
多くの場合、データベースが作成されるとすぐに、データベースにシードしたいテーブルとデータがあります。 MySQLイメージは、.sh
を検索するように構成されています 、.sql
および.sql.gz
コンテナの/docker-entrypoint-initdb.d
内のファイル ディレクトリ。
見つかったファイルはすべて順番に実行されます。順序は常にアルファベット順になります。ファイル名のプレフィックスを適用できます(例:1-seed_tables.sql
/ 2-seed_data.sql
)操作が意図した順序で完了することを確認します。
このメカニズムにより、新しいデータベースインスタンスに初期データを簡単にシードできます。 MySQLをベースイメージとして使用して独自のDockerfileを作成し、シードファイルを/docker-entrypoint-initdb.d
に追加できます。 。または、ホスト上のディレクトリをコンテナディレクトリにバインドマウントします。
データディレクトリにデータベースがない場合を除き、MySQLは初期化ファイルを無視します。データディレクトリの内容をワイプすると、コンテナを再起動したときに新しい初期化がトリガーされます。
MySQLサーバー構成ファイルは/etc/mysql/conf.d
からロードされます 。 Dockerfileオーバーライドまたはバインドマウントを使用して、独自の構成ファイルをこのディレクトリに追加し、サーバー設定を調整します。使用可能なオプションのリストは、MySQLサーバーのマニュアルから入手できます。
オプションファイルを使用すると、将来の構成の表示と編集が簡単になります。プロジェクトと一緒にファイルをバージョン管理にチェックインします。ただし、コマンドラインフラグは、1回限りの調整や実験にも使用できます。
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest --general-log=on
docker run
のこのバリアント 一般的なクエリログを有効にしてMySQLを起動します。 mysql
バイナリは画像のエントリポイントであるため、docker run
に渡されるフラグ 画像名がmysql
に転送された後 。
Docker内でのMySQLの実行は、MySQLサーバーの「ベアメタル」をインストールするよりもはるかに迅速かつ簡単です。競合のリスクなしに複数のMySQLインスタンスを実行できます。
公式のDockerイメージには、便利な構成オプションと、初回実行データベースシードの組み込みサポートが付属しています。これにより、最初から始める場合でも、既存のスキーマを使用する場合でも、すぐに着手できます。
関連: WordPressをDockerコンテナとしてすばやくデプロイする方法