MySQL 8.0 リファレンスマニュアル


2.5.6.1 Docker を使用した MySQL Server デプロイメントの基本ステップ

警告

MySQL チームによって管理される MySQL Docker イメージは、Linux プラットフォーム専用に構築されています。 他のプラットフォームはサポートされておらず、これらの MySQL Docker イメージを使用するユーザーは独自のリスクでこれを実行しています。 Linux 以外のオペレーティングシステムでこれらのコンテナを実行する際の既知の制限については、the discussion here を参照してください。

MySQL Server Docker イメージのダウンロード

別のステップでサーバーイメージをダウンロードする必要は厳密にはありませんが、Docker コンテナを作成する前にこのステップを実行すると、ローカルイメージが最新の状態になります。 MySQL Community Edition イメージをダウンロードするには、次のコマンドを実行します:

docker pull mysql/mysql-server:tag

tag は、プルするイメージバージョン (5.6, 5.7, 8.0latest など) のラベルです。 :tag を省略すると、latest ラベルが使用され、MySQL Community Server の最新の GA バージョンのイメージがダウンロードされます。 「Docker Hub の mysql/mysql-server ページ」で使用可能なバージョンについては、タグのリストを参照してください。

MySQL Enterprise Edition イメージをダウンロードするには、My Oracle Support の web サイトにアクセスし、Oracle アカウントにサインインして、ランディングページで次のステップを実行します:

  • 「パッチと更新版」タブを選択します。

  • 「パッチ検索」リージョンに移動し、「検索」タブで「製品またはファミリ (拡張)」サブタブに切り替えます。

  • Product フィールドに MySQL Server と入力し、「リリース」フィールドに目的のバージョン番号を入力します。

  • 追加フィルタのドロップダウンを使用して「説明」を選択 - 「次を含む」で、テキストフィールドに Docker と入力します。

    次の図に、MySQL Server 8.0 用の MySQL Enterprise Edition イメージの検索設定を示します:

    MySQL Enterprise イメージの検索設定を示す図
  • 検索ボタンをクリックし、結果リストから目的のバージョンを選択してダウンロードボタンをクリックします。

  • 表示される「ファイルのダウンロード」ダイアログボックスで、Docker イメージの .zip ファイルをクリックしてダウンロードします。

ダウンロードした .zip アーカイブを解凍して (mysql-enterprise-server-version.tar) 内の tarball を取得し、次のコマンドを実行してイメージをロードします:

docker load -i mysql-enterprise-server-version.tar

次のコマンドを使用して、ダウンロードした Docker イメージをリストできます:

shell> docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
mysql/mysql-server   latest              3157d7f55f8d        4 weeks ago         241MB
MySQL Server インスタンスの起動

MySQL Server の新しい Docker コンテナを起動するには、次のコマンドを使用します:

docker run --name=container_name  --restart on-failure -d image_name:tag

MySQL Server Docker イメージのダウンロード で説明されているように、イメージ名は docker images コマンドを使用して取得できます。

サーバーコンテナのカスタム名を指定するための --name オプションはオプションです。コンテナ名が指定されていない場合はランダムに生成されます。

--restart オプションは、コンテナの「再起動ポリシー」を構成するためのものです。クライアントセッション内でのサーバーの再起動のサポートを有効にするには、値 on-failure に設定する必要があります (たとえば、RESTART ステートメントがクライアントによって実行された場合や configuration of an InnoDB cluster instance 中に実行された場合)。 再起動のサポートを有効にして、クライアントセッション内で再起動を発行すると、サーバーとコンテナが停止してから再起動します。 サーバーの再起動のサポートは、MySQL 8.0.21 以降で使用できます。

たとえば、MySQL Community Server の新しい Docker コンテナを起動するには、次のコマンドを使用します:

docker run --name=mysql1 --restart on-failure -d mysql/mysql-server:8.0

My Oracle Support からダウンロードした Docker イメージを使用して MySQL Enterprise Server の新しい Docker コンテナを起動するには、次のコマンドを使用します:

docker run --name=mysql1 --restart on-failure -d mysql/enterprise-server:8.0

指定した名前およびタグの Docker イメージが以前の docker pull または docker run コマンドによってダウンロードされていない場合、イメージはダウンロードされます。 コンテナの初期化が開始され、docker ps コマンドを実行すると、実行中のコンテナのリストにコンテナが表示されます。 例:

shell> docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED             STATUS                              PORTS                NAMES
a24888f0d6f4   mysql/mysql-server   "/entrypoint.sh my..."   14 seconds ago      Up 13 seconds (health: starting)    3306/tcp, 33060/tcp  mysql1

コンテナの初期化には時間がかかる場合があります。 サーバーを使用する準備が整うと、docker ps コマンドの出力のコンテナの STATUS(health: starting) から (healthy) に変わります。

前述の docker run コマンドで -d オプションを使用すると、コンテナがバックグラウンドで実行されます。 次のコマンドを使用して、コンテナからの出力を監視します:

docker logs mysql1

初期化が終了すると、コマンド出力には root ユーザー用に生成されたランダムなパスワードが含まれます。たとえば、次のコマンドを使用してパスワードを確認します:

shell> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs

コンテナ内から MySQL Server への接続

サーバーの準備ができたら、起動した MySQL Server コンテナ内で mysql クライアントを実行し、MySQL Server に接続できます。 次のように、docker exec -it コマンドを使用して、起動した Docker コンテナ内の mysql クライアントを起動します:

docker exec -it mysql1 mysql -uroot -p

要求されたら、生成された root パスワードを入力します (パスワードの検索方法については、前述の MySQL Server インスタンスの起動 の最後のステップを参照してください)。 MYSQL_ONETIME_PASSWORD オプションはデフォルトで true であるため、mysql クライアントをサーバーに接続したあと、次のステートメントを発行してサーバーの root パスワードをリセットする必要があります:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

password を任意のパスワードに置き換えます。 パスワードがリセットされると、サーバーは使用可能になります。

コンテナシェルアクセス

MySQL Server コンテナにシェルアクセスできるようにするには、docker exec -it コマンドを使用してコンテナ内で bash シェルを起動します:

shell> docker exec -it mysql1 bash
bash-4.2#

その後、コンテナ内で Linux コマンドを実行できます。 たとえば、コンテナ内のサーバーデータディレクトリのコンテンツを表示するには、次のコマンドを使用します:

bash-4.2# ls /var/lib/mysql
auto.cnf    ca.pem	     client-key.pem  ib_logfile0  ibdata1  mysql       mysql.sock.lock	   private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   mysql.sock  performance_schema  public_key.pem   server-key.pem
MySQL コンテナの停止および削除

作成した MySQL Server コンテナを停止するには、次のコマンドを使用します:

docker stop mysql1

docker stop は SIGTERM シグナルを mysqld プロセスに送信するため、サーバーは正常にシャットダウンされます。

また、コンテナ (MySQL Server コンテナの場合は mysqld) のメインプロセスが停止すると、Docker コンテナは自動的に停止します。

MySQL Server コンテナを再起動するには:

docker start mysql1

単一のコマンドを使用して MySQL Server コンテナを停止して再起動するには:

docker restart mysql1

MySQL コンテナを削除するには、まず停止してから、docker rm コマンドを使用します:

docker stop mysql1
docker rm mysql1

Docker volume for the server data directory を同時に削除する場合は、docker rm コマンドに -v オプションを追加します。

MySQL Server コンテナのアップグレード
重要
  • MySQL へのアップグレードを実行する前に、セクション2.11「MySQL のアップグレード」 の手順に注意してください。 ここで説明されているその他の手順の中では、アップグレードの前にデータベースをバックアップすることが特に重要です。

  • このセクションの手順では、サーバーのデータと構成がホストに保持されている必要があります。 詳細は、データおよび構成の変更の永続化 を参照してください。

MySQL 5.7 の Docker インストールを 8.0 にアップグレードするには、次のステップに従います:

  • MySQL 5.7 サーバーを停止します (この例では、コンテナ名は mysql57):

    docker stop mysql57
  • MySQL 8.0 Server Docker イメージをダウンロードします。 MySQL Server Docker イメージのダウンロード の手順を参照してください。MySQL 8.0 には正しいタグを使用してください。

  • (この例では bind-mounting によって) ホストに永続化されている古いサーバーデータおよび構成 (必要に応じて セクション2.11「MySQL のアップグレード」 を参照) を使用して、新しい MySQL 8.0 Docker コンテナ (この例では mysql80) を起動します。 MySQL Community Server の場合は、次のコマンドを実行します:

    docker run --name=mysql80 \
       --mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
       --mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
       -d mysql/mysql-server:8.0

    必要に応じて、mysql/mysql-server を正しいリポジトリ名に調整し、次のように置き換えます My Oracle Support からダウンロードされた mysql/enterprise-server for MySQL Enterprise Edition イメージ。

  • サーバーの起動が終了するまで待機します。 サーバーのステータスは、docker ps コマンドを使用して確認できます (その方法は、MySQL Server インスタンスの起動 を参照してください)。

  • MySQL 8.0.15 以前の場合: MySQL 8.0 Server コンテナで mysql_upgrade ユーティリティを実行します (MySQL 8.0.16 以降では不要):

    docker exec -it mysql80 mysql_upgrade -uroot -p

    プロンプトが表示されたら、古い MySQL 5.7 Server の root パスワードを入力します。

  • MySQL 8.0 Server コンテナを再起動して、アップグレードを終了します:

    docker restart mysql80
Docker での MySQL Server のデプロイに関するその他のトピック

サーバー構成、データと構成の永続化、サーバーエラーログおよびコンテナ環境変数など、Docker を使用した MySQL Server のデプロイの詳細は、セクション2.5.6.2「Docker での MySQL Server のデプロイに関するその他のトピック」 を参照してください。


関連キーワード:  インストール, コンテナ, Server, docker, コマンド, サーバー, イメージ, 起動, ダウンロード, 実行