GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

DockerコンテナでMySQLを実行する方法

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シェルを取得できます。 指図。これにより、完全な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コンテナとしてすばやくデプロイする方法


Docker
  1. 実行中のDockerコンテナでコマンドを実行する方法

  2. Dockerコンテナに静的IPを割り当てる方法

  3. Dockerコンテナを終了する方法

  1. DockerコンテナでMySQLを実行する方法:シンプルでわかりやすいガイド

  2. テスト用の MySQL Docker コンテナを作成する方法

  3. Dockerコンテナで実行されるプログラムにシグナルを送信するには?

  1. Dockerコンテナ内でプログラムを実行する方法は?

  2. DockerコンテナにSSHで接続する方法

  3. ユーザーを Docker コンテナに追加するにはどうすればよいですか?