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.0
や latest
など) のラベルです。 :
を省略すると、tag
latest
ラベルが使用され、MySQL Community Server の最新の GA バージョンのイメージがダウンロードされます。 「Docker Hub の mysql/mysql-server ページ」で使用可能なバージョンについては、タグのリストを参照してください。
MySQL Enterprise Edition イメージをダウンロードするには、My Oracle Support の web サイトにアクセスし、Oracle アカウントにサインインして、ランディングページで次のステップを実行します:
「パッチ検索」リージョンに移動し、「検索」タブで「製品またはファミリ (拡張)」サブタブに切り替えます。
「MySQL Server」 と入力し、 フィールドに目的のバージョン番号を入力します。
フィールドに-
追加フィルタのドロップダウンを使用して「Docker」 と入力します。
を選択 - で、テキストフィールドに次の図に、MySQL Server 8.0 用の MySQL Enterprise Edition イメージの検索設定を示します:
表示される「ファイルのダウンロード」ダイアログボックスで、Docker イメージの
.zip
ファイルをクリックしてダウンロードします。
ダウンロードした .zip
アーカイブを解凍して (mysql-enterprise-server-
) 内の tarball を取得し、次のコマンドを実行してイメージをロードします:
version
.tar
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 のデプロイに関するその他のトピック」 を参照してください。