MySQLサーバに格納したデータを参照したり、データを追加・更新したりする際、どのように管理するのがよいでしょうか。mysqlコマンドで直接DBサーバにアクセスし、SQLを実行してデータ管理することもあるかもしれませんが、やはり画面付きの管理ツールを利用すると、開発・運用効率はぐっと上がります。
本記事では、MySQLの管理コンソールであるMySQL Workbenchをコンテナ化し、Windows OSにインストールすることなく利用できるようにする方法を説明します。
|
目次[非表示]
前提
MySQLサーバの起動
MySQL Workbenchから接続するMySQLサーバを準備します。Dockerコンテナからアクセスできる場所に、MySQLサーバを起動します。本記事では、MySQLサーバのDockerコンテナ化で作成したMySQLサーバコンテナを起動し、3306/tcpで接続を待ち受けます。
- コマンドプロンプトを起動します。
-
MySQLコンテナ用フォルダのパスへカレントディレクトリを移動します。
cd C:\Work\docker\mysql
-
MySQLコンテナを起動します。
docker container run --rm --name mysql-local -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql
-
MySQLコンテナが実行中であることを確認します。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4b79cd095af2 mysql "docker-entrypoint.s…" 18 seconds ago Up 16 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-local
Xサーバの起動
MySQL Workbenchの画面を表示するために、Xサーバを起動します。本記事ではWindowsでDockerコンテナの画面を表示する方法でご紹介したVcXsrvを起動します。
-
「XLaunch」のショートカットをダブルクリックします。
- タスクトレイにVcXsrvのアイコンが表示されていることを確認します。
MySQL Workbench Dockerコンテナの作成
MySQL WorkbenchをLinuxコンテナ(Ubuntuベース)にインストールして、コンテナを作成します。
Dockerフォルダの作成
MySQL Workbench用のDockerフォルダを作成します。私の環境では、C:\Work\docker\mysqlworkbenchとしました。このフォルダ内に、この後作成するDockerfileやコンテナ内で利用する関連ファイルを配置していきます。
DEBパッケージの取得
MySQL
Workbench公式のインストールパッケージを利用します。コンテナの作成時に、MySQL
APTリポジトリを追加し、apt
経由でmysql-workbench-community
パッケージをインストールします。ここでは、Ubuntu向けのリリースパッケージ(DEBファイル)をダウンロードします。
- MySQL APTリポジトリのダウンロードページにアクセスします。
-
MySQL Community Downloadsページで、「No thanks, just start my
download.」のリンクをクリックします。Oracle
Webアカウントをお持ちの方はログインしてダウンロードすることもできます。
- ダウンロードしたDEBファイル(例:mysql-apt-config_0.8.19-1_all.deb)をDockerフォルダ直下に配置します。
Dockerfileの作成
- Dockerフォルダ内にdockerfileという名前でファイルを作成します。
-
以下をコピー&ペーストしてdockerfileを保存します。3行目のDEBファイル名は環境に合わせて変更してください。
- FROM ubuntu:20.04
- ENV MYSQL_APT_CONFIG_DEB mysql-apt-config_0.8.19-1_all.deb
- ADD ./${MYSQL_APT_CONFIG_DEB} /tmp/${MYSQL_APT_CONFIG_DEB}
- RUN apt update && apt install -y \
- lsb-release \
- wget \
- gnupg \
- libsecret-1-0 \
- dbus-x11 \
- gnome-keyring \
- && dpkg -i /tmp/${MYSQL_APT_CONFIG_DEB} \
- && apt update && apt install -y \
- mysql-workbench-community
- CMD mysql-workbench
参考
7行目以降のapt installでインストールしている各パッケージ(lsb-release他)はDockerを起動中あるいは起動後の操作中にエラーが発生し、その都度、足りないパッケージを追加し、最終的にこのような形になりました。また、MySQL Workbench Requirements on Linuxを参照して追加したものもあります(gnome-keyring)。MySQL Workbenchのメジャーバージョンが上がったりすると、チューニングが必要になるかもしれません。
Dockerコンテナのビルド
それでは、Dockerコンテナをビルドしてみましょう。
- コマンドプロンプトを起動します。
-
MySQL Workbench用のDockerフォルダへカレントディレクトリを移動します。
cd C:\Work\docker\mysqlworkbench
-
mysqlworkbenchというイメージ名でビルドします。
docker build -t mysqlworkbench .
ビルドが完了するまでに5分程度かかります。コマンド実行から完了までに1,570行のコマンドアウトプットが出ました。(汗)
Sending build context to Docker daemon 125.4kB Step 1/5 : FROM ubuntu:20.04 ---> adafef2e596e Step 2/5 : ENV MYSQL_APT_CONFIG_DEB mysql-apt-config_0.8.19-1_all.deb ---> Running in 68129c4a567a Removing intermediate container 68129c4a567a ---> d06e88ff9cb8 Step 3/5 : ADD ./${MYSQL_APT_CONFIG_DEB} /tmp/${MYSQL_APT_CONFIG_DEB} ---> 8fc247220d89 Step 4/5 : RUN apt update && apt install -y lsb-release wget gnupg libsecret-1-0 dbus-x11 gnome-keyring && dpkg -i /tmp/${MYSQL_APT_CONFIG_DEB} && apt update && apt install -y mysql-workbench-community ---> Running in 2fa0190499b9 WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Get:1 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB] Get:2 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB] Get:3 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [1137 kB] : : Setting up libglx0:amd64 (1.3.2-1~ubuntu0.20.04.1) ... Setting up mysql-workbench-community (8.0.26-1ubuntu20.04) ... Processing triggers for hicolor-icon-theme (0.17-2) ... Processing triggers for libc-bin (2.31-0ubuntu9) ... Processing triggers for shared-mime-info (1.15-1) ... Processing triggers for mime-support (3.64ubuntu1) ... Removing intermediate container 2fa0190499b9 ---> a2b0e5d8d190 Step 5/5 : CMD mysql-workbench ---> Running in 36c6a1f37e18 Removing intermediate container 36c6a1f37e18 ---> 390d23f98905 Successfully built 390d23f98905 Successfully tagged mysqlworkbench:latest SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
以上で、MySQL WorkbenchのDockerコンテナイメージの作成は完了です。一旦ビルドすれば、次回からはこの時間がかかる処理は不要になります。
動作確認
ビルドしたコンテナイメージを起動し、MySQL Workbenchの画面表示、MySQLサーバとの接続確認を行います。
ビルド後のコマンドプロンプトをそのまま利用します。閉じてしまった場合は、コマンドプロンプトを起動し、カレントディレクトリをMySQL Workbench用のDockerフォルダへ移動してください。
画面表示設定
Xサーバを経由してMySQL Workbenchの画面を表示させるために、環境変数の設定を行います。
-
ipconfig
コマンドを実行し、WindowsホストのIPアドレスを確認します。私の場合、今回は192.168.24.113になります。 -
DISPLAY環境変数にホストのIPアドレス、ディスプレイ番号、スクリーン番号を指定します。
set DISPLAY=192.168.24.113:0.0
Docker VMのIPアドレス取得
今回、MySQLサーバには特別なIPアドレスを設定していません。MySQLサーバコンテナ外からアクセスするには、ホストで稼働しているDocker VMのIPアドレスの3306/tcpポートにアクセスすることで、自動的にMySQLサーバコンテナに通信が転送されます。そこで、Docker VMに割り当てられているIPアドレスを調べます。
Docker VMの名前を指定しdocker-machine ip
コマンドを実行します。この結果から、192.168.17.129がDocker
VMのIPアドレスであることが分かりました。
docker-machine ip docker-host 192.168.17.129
MySQL Workbench Dockerコンテナの起動
-
ビルドしたmysqlworkbenchコンテナを起動するために、以下のコマンドを実行します。
※--cap-add="IPC_LOCK"がないと、gnome-keyring-deamnで問題が発生します。
docker run -d --name mysqlworkbench -e DISPLAY=%DISPLAY% --rm --cap-add="IPC_LOCK" mysqlworkbench
-
MySQL
Workbenchの画面が表示されました!以下のような警告メッセージがでましたが、「Don't
show this message
again」にチェックを付けて、「OK」ボタンをクリックします。
-
早速、稼働中のMySQLサーバコンテナにアクセスしてみましょう。Databaseメニューをクリックし、「Connect
to Database...」をクリックします。
-
「Connect to
Database」ウィンドウで、DB接続情報を入力します。HostnameにはDocker
VMのIPアドレス(例:192.168.17.129)、UsernameとPasswordにはMySQL
Serverサービスに接続するための情報(例:root/mysql)を指定します。
-
初めてMySQL
Workbenchコンテナでデータベース接続設定を行う場合は、Keyringのパスワードを指定するように求められます。これは安全にデータベース接続パスワードを保存するためのしくみを使うためのマスターパスワードになります。適当なパスワードを指定します。
-
「Connect to
Database」ウィンドウで、「OK」ボタンをクリックします。MySQLサーバとの接続が成功すれば、管理コンソールが表示されます。
-
左ペインのMANAGEMENT→Server
Statusをクリックしてみましょう。このように、問題なくMySQLコンテナ内のMySQLサーバサービスにアクセスできていることが確認できました。
- MySQL Workbenchを閉じます。
補足:恒久的に設定情報を保存するには?
MySQL Workbenchを閉じると、Dockerコンテナ起動時に--rmオプションを指定しているためコンテナが消失します。MySQL Workbench上で設定した情報(例:MySQLサーバ接続情報)は削除されます。これらの情報を保存し、次回新規に同コンテナを起動した際に利用できるようにするためには、Dockerコンテナ起動時のコマンドで、ホストとゲスト間でディレクトリを共有するのがよいでしょう。
-
以下コマンドでは、-vオプションを使って、ホスト側のC:\Work\docker\mysqlworkbench\configと、MySQL
Workbenchの設定情報が格納されるMySQL
Workbenchコンテナ内の/root/.mysql/workbenchを共有します。
docker run -d --name mysqlworkbench -e DISPLAY=%DISPLAY% -v /mnt/hgfs/Work/docker/mysqlworkbench/config:/root/.mysql/workbench --rm --cap-add="IPC_LOCK" mysqlworkbench
- 再度DB接続情報を登録します。
- MySQL Workbenchを閉じます。(コンテナが削除される)
- 再度、手順1のコマンドを実行します。
-
接続情報が残っていることが確認できます。
※ホスト側ではVMがC:\Workを/mnt/hgfs/Workとして認識できるように事前設定しています。VMWare Workstationをハイパーバイザーにしている場合の制約で、このマッピング設定が必要だったと認識しています。機会があればどこかで記事にしたいと思います。
おわりに
今回は、今までに紹介した内容の組み合わせで、スクラッチでLinux上にインストールしたMySQL Workbenchコンテナの画面を表示・操作することができました。何といってもWindows環境を汚さないところがよいですね。また、Dockerコンテナ同士の通信、ホスト―ゲスト間のディレクトリ共有の方法を紹介しました。
Dockerコンテナが複数稼働する環境では、操作ステップ数や順序に気を付けるなど、操作が煩雑になることもわかりました。次のステップとしてdocker-composeを使って簡易・効率的にコンテナを管理することを紹介したいと思います。