jumper

コラム

DockerコンテナにMySQL 5.7をインストールする

2018年04月27日

Dockerコンテナは最近大きく注目されている仮想化技術です。大手・企業ベースでも採用が増加しているので、いずれ身近な技術になる可能性があります。
DockerコンテナへのMySQL導入から運用まで確認してみます。

MySQLコンテナの作成

MySQLコンテナの作成

さっそくMySQLをDocker内に配置してみましょう。

Dockerの操作では、FROM、RUN、ADDなど直観的に分かる非常にシンプルな作りになっています。RUNでDockerの実行が行われますが、この際に各種の設定を指定することで、容易に複数の実行指示が行えます。例えばMySQLであればデータベース作成やセットアップ情報の設定など、RUN時に一緒に行えます。

MySQLコンテナイメージは公式コンテナイメージが用意されていますので、まずはこれを使うのが確実でしょう。

$ dokcer pull mysql

バージョンを指定する場合は以下のようにします。バージョンを指定しない場合は、最新のバージョンがダウンロードされます。

$ dokcer pull mysql:5.7

これでMySQLコンテナイメージがPULLされ、ダウンロードされます。
PULLの実行後は作成されたイメージを確認してください。

$ docker images

これで各コンテナイメージの一覧が表示されますので、MySQLがあればコンテナイメージ作成は成功です。

データボリュームコンテナの作成

Dockerの仮想化技術におけるメリットはOSを共通として、その上に複数の仮想化サーバを作成するので、その作成や削除が容易にできる点です。逆にいうと永続的なデータの保管には向きません。そのためデータを扱うデータベースのコンテナ内に情報を保持しておくわけには行きません。

そこで別途にデータを扱うための仕組みが必要になります。Dockerで永続的データを扱うには「データボリューム」と「データボリュームコンテナ」の二通りの方法があります。「データボリューム」はDockerコンテナ内のファイル・ディレクトリにデータを格納しますが、「データボリュームコンテナ」では別途コンテナを作成しています。

ここではデータボリュームコンテナの活用方法で進めます。
まずはコマンドでデータボリュームコンテナを作成します。

$ docker run -d -v /dir/data --name storage busybox true

-dはバックグラウンドでの実行。-v /dir/dataはディレクトリの指定。--name storageはコンテナ名。
busyboxはデータボリュームコンテナではよく使われるようですがbusyboxでなくとも問題ありません。trueで正常終了となります。

コンテナの起動とクライアントからの接続確認

作成したデータボリュームコンテナをMySQLコンテナにマウントして起動します。

$ docker run --volumes-from storage --name mysql -e MYSQL_ROOT_PASSWORD=mysql -d -p 3306:3306 mysql

これでMySQLのデータはデータボリュームコンテナに格納されます。

同時にMySQLコンテナが起動していますので、動作を確認してみましょう。まずコンテナIDをpsコマンドで確認します。コンテナIDを付与して接続コマンドを実行します。

$ docker exec -it コンテナID
$ mysql -u root -p

これでMySQLに接続できますので、コマンドでDB操作ができます。これでDB接続が確認できます。

PHPなどのアプリケーションからの接続も基本的には通常のMySQLと同様の設定で可能です。Dockerコンテナ外からのアクセスではホストのIPアドレスに注意してください。MySQLコンテナのIPがホストです。

まとめ

クラウドの発達で仮想化技術の展開は、デジタル業界でも大変大きく広がりました。稼働本サーバと同様の環境をローカルでも再現でき、リリースも迅速に対処できる仮想化技術は益々進化する傾向にあります。

なかでもDockerコンテナは今までの仮想化技術に新たな活用方法を提示してきました。コンテナ化することで、必要な機能のみ扱うことができ、再現性にも優れたDockerは、作業負担の軽減につながります。ここ数年で広まったDockerに、今後も目が離せません。

CONTACT

製品・サービスに関するご質問、お見積もり、お問い合わせなど、お気軽にご連絡ください。

 050-5505-5509

受付時間 9:30 - 12:00, 13:00 - 17:00
(土日祝および年末年始を除く)