MySQL道普請便り

第5回Dockerで複数バージョンのMySQLを開発環境に用意する

MySQLを開発に使っている時に、よく問題になるのがアップデート、アップグレードの検証です。アップデート・アップグレードをする前に開発環境で問題が発生しないか、あるいは新機能がどんな機能かを確認したいと思うことがあると思います。その際にうっかり別のバージョンのMySQLで開発環境のMySQLを上書きしてしまい、以前の開発環境に戻せなくなってしまった…なんてことはありませんか? そして、本来やりたかった作業とは別にやることが増えてしまい。面倒くさくなってしまうことが時々あります。

今回はDockerを使って5.6.27と5.7.8の2つのMySQLを、ローカルの開発環境に影響を与えることなく用意してみようと思います。これによってお手軽にMySQLの最新機能を確認したり、アプリケーションへの影響を検証したりできるようになります。

デモンストレーション環境について

今回はDockerでMySQLの環境を複数用意して見るために、KitematicというDocker用のクライアントを使います。

図1 kitematic公式トップ
図1 kitematic公式トップ

KitematicはDockerのシンプルなオープンソースソフトウェアで、今なお開発が進んでいるDockerのGUIクライアントです。Dockerコマンドと違いGUI上でDockerHubから必要に応じてコンテナを落としてこれるようになっています。開発当初はMacにだけ対応していたのですが、現在ではWindowsでも利用できるようになっています。

Kitematic(Docker Toolbox)のインストール

Kitematicは現在はDockerのToolboxとして提供されています。Dockerの公式ページからOSにあったものをDownloadします。筆者の環境はMacなのでDownload(Mac)からダウンロードしました。バージョンはこの記事を書いている時の最新版1.8.3を使用しております。

図2 Kitematicダウンロード画面
図2 Kitematicダウンロード画面

インストーラを起動すると次の画面が表示されます。

図3 インストール画面1
図3 インストール画面1

続けるをどんどん押していきます。一部パスワードを求められますので、その他のアプリケーションをインストールする時と同様に入力します。

図4 パスワード入力画面
図4 パスワード入力画面

終了画面のひとつ前の画面で、Quick Start画面が開くのでそこでKITEMATICK(右側)を選択してあげます。また、ここで選択肢なかった場合はアプリケーションからKitematicを起動してあげれば問題なく進められます。

図5 QuickStart画面
図5 QuickStart画面

続けるを押してインストールが完了します。続けて初期設定に移ります。

図6 初期設定画面
図6 初期設定画面

DockerHubアカウントをお持ちの場合は入力してください。DockerHubはDockerコンテナを公開するためのWebサービスでDockerレジストリを構築することができるので便利ですが、お持ちでない場合は右下の「SKIP FOR NOW」を選択すると次に進めます。

図7 起動画面
図7 起動画面

さてこれにてインストールは完了です。続いてMySQLの任意のバージョンをインストールして使ってみましょう。

最新版のMySQLコンテナイメージをダウンロードする

起動画面の中央上部にある「Search for Docker images from DockerHub」にMySQLと入力してみましょう。そうするとDockerHub内にあるmysqlのコンテナに関して検索が始まります。

図8 検索結果画面
図8 検索結果画面

今回はRecommendedの中にあるofficialを利用しますが、その他にもDockerHubに自作のコンテナを登録している場合は、そちらを選択することもできます。

CREATEを押すとmysqlのlatestのバージョンに関してDockerコンテナのダウンロードが始まります。

図9 ダウンロード画面
図9 ダウンロード画面

ダウンロードが完了すると自動でDockerのコンテナが実行されます。しかし、下のようにログが表示されています。

図10 初期画面
図10 初期画面

何やらエラーメッセージのようなものが表示されています。

エラーメッセージの内容
Database is uninitialized and MYSQL_ROOT_PASSWORD not set
  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?

内容を読んでみるとrootパスワードが設定されていないというエラーメッセージが表示されているので、次ではちゃんと起動ができるように設定を行っていきます。

Dockerイメージの設定を変更する

右上のSettingsからメニューを開くと、General, Ports, Volums, Advancedの4つのメニューが開きます。

図11 設定画面
図11 設定画面

設定できる項目や内容は以下の表のようになります。

名前設定できる項目の種類
Generalコンテナ名やDockerで起動するときの環境引数をここで指定できます
Ports外部のネットワークから接続する場合に、IPとPortの設定を確認変更することができます。
Volumsコンテナがマウントするディレクトリを選択することができます。
AdvancedKitematicを終了した時のVMの扱いなどを設定することができます。

今回はrootパスワードを設定したいのでGeneralのメニューからパスワードを引数として渡してあげます。Generalのメニュー内にあるEnviroment VariablesにMySQLのDockerのイメージ起動方法に書かれているように、MYSQL_ROOT_PASSWORDを設定してあげます。

図12 パスワード設定
図12 パスワード設定

その他にも今回は使っていませんが、いくつか設定できる項目があるようです。設定できる項目に関しては同じページ内のEnviroment Variablesに記載されてます。

入力が終わったあとSAVEを押すと設定が保存され、再起動が自動で走ります。再起動後の画面が以下のようなものになります。

図13 MySQLの起動画面
図13 MySQLの起動画面

先ほどのエラーとは違うログが出力されていることがわかります。無事起動が完了しました。

mysqlコマンドラインツールを使って繋いでみましょう。ここではhomebrewを使ってインストールをしたものを利用してます。hostのipとportはSettingsのPortから確認できます。

$ mysql -uroot -p -h 192.168.99.100 -P 32776
Enter password:  ← MySQL_ROOT_PASSWODで設定したパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.27 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

ということで、latest(記事作成時には5.6.27)に無事接続できました!

アプリケーションを使用している人は設定でhostとportをDockerのものに変更してあげるだけで、今まで使ってたアプリケーションから簡単に違うバージョンのmysqlを試すことができるようになります。

続けて、これから皆さんが移行を検討することになるであろう5.7の最新版に接続をしてみたいと思います。

最新のMySQL5.7を試してみる

左上にあるContainersの右にある+NEWボタンを押して新規のコンテナを追加します。

図14 新規コンテナ追加
図14 新規コンテナ追加

すると初回起動をした時と同じ画面に移ります。

図15 起動メニュー
図15 起動メニュー

そこで先ほどと同様にMySQLを検索バーに入力します。すると下のような検索結果がやはり表示されると思います。

図16 検索結果
図16 検索結果

前回はそのままCREATEボタンをクリックしましたが、5.7をインストールしたいので、バージョンの指定を行います。CREATEの左にあるメニューをクリックします。今回は任意のバージョンを選択したいのでSELECT TAGをクリックします。

図17 メニュー内部
図17 メニュー内部

すると下のような画面が開き、TAGが選択できることがわかります。ここで5.7.8を選択し、検索結果の画面まで戻ります。

図18 タグ選択画面
図18 タグ選択画面

その後CREATEを行うとMySQL5.7.8のイメージを利用したコンテナが作成されます。ただし、何も設定せずに起動をしようとすると、先ほどと同じように以下のエラーメッセージが表示されてしまいます。

  Database is uninitialized and MYSQL_ROOT_PASSWORD not set
  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?

lastestで行った時と同様にMySQL_ROOT_PASSWORDの設定やその他の設定を必要に応じて行いましょう。

$ mysql -uroot -p -h 192.168.99.100 -P 32779

Enter password:  ←  MySQL_ROOT_PASSWODで設定したパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.8-rc MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

このように簡単にMySQL5.7の実験環境が手に入りました。

今回はMySQL5.7をインストールしてみましたが、この方法を使って任意のバージョンのMySQL環境をディスクの許す限り用意することができます。

まとめ

今回はKitematic(Docker)を利用して、開発環境にMySQLを複数バージョン用意する方法を紹介してみました。Kitematicに限らずDockerをうまく使うとMySQLのアップデート時、アップグレード時に機能の比較やアプリケーションの検証をする際に、ローカルにすでにある環境を汚さずにコンテナとして実行できます。今すぐに最新機能を試してみようと思った際には、ぜひ活用してみてください。

おすすめ記事

記事・ニュース一覧