多くのWebアプリケーションやサービスはデータベースに依存しています。おそらく、あなたのビジネスもWebアプリケーションやサービスに依存しているでしょう。リモートデータベースをホストするために専用サーバーをセットアップしたくない場合は、コンテナ化されたソリューションを選択することもできます。これはエンタープライズレベルにまで拡張するアプリケーションには最適な選択肢ではないかもしれませんが、中規模以下のインスタンスでは、特に専用データベースサーバーとして使用できるハードウェアがないアプリケーションにとって、非常に大きなメリットとなる可能性があります。
この悩みを軽減するために、MySQL Dockerコンテナをデプロイし、他のコンテナやアプリケーションから接続できるようにする手順を詳しく説明します。ここでは、既にDockerが起動していることを前提としています。Ubuntu 16.10 Serverプラットフォームでデモを行いますが、手順はオペレーティングシステムに関わらず同じです(Dockerが動作していれば)。
それでは、デプロイしてみましょう。
イメージを引っ張る
まず最初に、適切なイメージをダウンロードする必要があります。ここではMySQLの最新リリースを使用します。特定のリリースが必要な場合は、「最新」タグを5.5、5.6、5.7、8.0などに置き換えてください。
MySQL Docker イメージをプルダウンするには、次のコマンドを発行します。
docker pull mysql/mysql-server:latest
注: 上記のコマンドは、docker グループのメンバーであるユーザーが実行する必要があります。そのグループにユーザーがいない場合は、sudo usermod -a -G docker USERNAMEコマンドを実行してください(USERNAME は追加するユーザー名です)。コマンドが完了したら、ログアウトして再度ログインすれば、問題なく実行できます。
コンテナのデプロイ
MySQLイメージをマシンにインストールしたら、コンテナをデプロイします。これは以下のコマンドで完了します。
docker run --name=mysql01 -d mysql/mysql-server:latest
上記のコマンドでは、コンテナにmysql01という名前を付けました。コンテナの名前は自由に付けることができます。
この時点で、コマンド docker ps を発行して、MySQL コンテナが実行中であることを確認できます (図 A )。
図A
参照:特別レポート:クラウド vs. データセンターの決定(無料PDF)(TechRepublic)
MySQLのパスワード
LinuxマシンにMySQLをインストールすると、インストール中またはインストール後にデータベース管理者のパスワードを作成するように求められます。しかし、今回は既にデータベースがインストールされ実行されているDockerコンテナをデプロイしました。パスワードを設定せずにデータベースを使用するにはどうすればよいでしょうか?幸いなことに、これは実はとても簡単です。デプロイ中にランダムなパスワードが生成されます。そのパスワードを確認するには、次のコマンドを実行します。
docker logs mysql01
このコマンドの出力から、MySQL の root ユーザーのパスワードが表示されます (図 B )。
図B
MySQLサーバーへのログイン
次に、コンテナ化されたサーバーにログインする必要があります。これは次のコマンドで実行できます。
docker exec -it mysql01 mysql -uroot -p
rootユーザーのパスワードの入力を求められます。docker logs mysql01 コマンドで表示されたパスワードを入力してください。MySQLサーバーにログインしたら、以下のコマンドでパスワードを変更できます。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
ここで、newpassword は使用する新しいパスワードです。exit コマンドでMySQLシェルを終了すると、コンテナ化されたMySQLデータベースを使用する準備が整います。
コンテナのシンプルさへようこそ
MySQLコンテナのセットアップはこれで完了です。専用のデータベースサーバーをセットアップするための予備ハードウェアがない場合、またはテスト目的でデータベースサーバーが必要な場合でも、Dockerを使えばコンテナ化されたデータベースサーバーを非常に簡単にデプロイできます。ぜひ試してみて、ニーズにぴったり合うかどうかを確認してください。