Docker

さくさくDocker実践入門 第四回 … MySQL環境

更新日:

何でも、手や身体を動かしながらだと、習熟の速度は爆発的に上昇します。要するに、やってみればわかるし、やってみなければ机上の空論、ということです。それでですね、そろそろ実用的な例を示していきます。やや突然ですが、MySQL 5.7 の環境を用意してみます。急に本格的になりました(笑)。

その前に、起動などに関するコマンドの一覧と例を、以下にまとめます。ライフサイクル(輪廻転生)に関するものは、指に覚えさせておくのが良さそうです。細かいことはGoogle先生に検索して聞けば良いのですが、よく使うものは覚えてないと脳みそが疲れますので。疲れていても君に逢いに行くよ。

起動・実行に関するコマンド例

run コマンド (イメージからコンテナを起動)

入出力の接続
docker run -it
 -i 実行側の標準出力(stdin) → コンテナのstdin ※interactive
 -t コンテナの標準出力(stdout) → 実行側stdout ※tty
 -it 上記二つの両方を指定。実行ターミナルの入出力を接続して作業する。よく使う

バックグラウンド起動(detach)
docker run -d

ポートフォワード
docker run -p 実行側port番号:コンテナのポート番号
 例: -p 8080:80 ローカルの8080ポートにWebサーバを接続

ボリューム結合・ファイル共有(volum)
docker run -v 実行側のパス:コンテナのパス
docker run -v コンテナ名:コンテナのパス

例:
$ docker run -dp 8080:80 -v /Users/ANY/disk1:/tmp/disk1 --name webserver nginx
$ docker run -it --name tmp1 -v /Users/ANY/disk1:/tmp/disk1 centos bash /ANY/aScript.sh

exec コマンド (実行中のコンテナ内でのコマンド実行)

例:
$ docker run -d -p 8080:80 --name nginx nginx
$ docker exec nginx cat /etc/redhat-release

停止コンテナを全部消すには ※いろいろ試したのち、ゴミ屋敷になったら使う
$ docker rm docker ps -a -q

MySQL起動

MySQL をただ動かすだけでは面白くないのです。使い捨て環境を用意するだけでは、入門編とはいえライト過ぎます。ここでは、永続的ストレージなボリュームを用意し、MySQLのコンテナと連携させて動作させます。かけがえのない、あなたのために。

MySQL の Mac 用 GUI クライアントは、とりあえず Sequal Pro を導入しましょう。もちろん他のものでも構いませんし、コマンドラインからの操作でも良いのですが、とりあえず老舗を一つ入れておくのが良いのです。誰かに見せるとき、定番を使うとわかりやすいのです。定番曲はもれなく盛り上がります。

ライブを始めます。一曲目。以下にて MySQL を単独でいったん実行させてみます。単独ライブツアー。

$ docker pull mysql:5.7
$ docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=AnyPass \
-d -p 3306:3306 mysql:5.7

※rootアカウントのパスワード「AnyPass」の所は、適当に変えてください

さて、、いきなりですが、 Sequal Pro から接続してみてください。そうです、localhost:3306 に、 IDがrootで、パスがAnyPass ですね。接続できたら、以下によりローカルOS上に、要所のファイルをコピーします。いきなりこぴー。シェル操作のたびに肉マイルが溜まればいいのに。

$ cd
$ mkdir -p mysql/var/lib
$ mkdir mysql/conf
$ cd mysql
$ docker cp mysql:/var/lib/mysql ./var/lib

少し経ってコピーが終わりましたね。では、volumeを作成します。名前を db1 とします。いったん覚えやすさを重視。ぶっちゃけた話、年を取るたびに頭と指がバカになってくるので、長い名前を覚えたり打ったりすると、だいだいミスするようになります。いえ、僕だけかもしれません。

$ docker volume create db1

この volume を用いて動作する、コンテナを実行します。小さそうな busybox のイメージを起動します。小さいながらもがんばっちゃいます。

$ docker run -d --name db1c -v db1:/var/lib/mysql busybox

要所なファイルたちをコピーします。割とすぐ終わるかとです。早!

$ docker cp var/lib/mysql db1c:/var/lib/mysql

コミットしときます。

$ docker commit db1c

いったん、 MySQLのコンテナを停止・削除します。

$ docker stop mysql
$ docker rm mysql

エンジンを掛けて少し暖まったところで、忘れ物をしたのでいったん止めてから、再発進です。そう、ボリュームをのっけないと。さきほど用意した volume の db1 さんを用いる形で、再び MySQL を起動します。食卓に乗せる感じです。

$ docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=AnyPass \
-v db1c:/var/lib/mysql \
-d -p 3306:3306 mysql:5.7

また君に会えました。しばらくぶり。

試しに Sequal Pro から、DBスキーマやテーブルをちょっと作ってみてください。本記事をここまで読むようなかたは、 CREATE DATABASE や CREATE TABLE は出来るはずです。信じています。

さて、本当にボリューム側のファイルが変わっているのか? という疑問があるかとです。こっそりマウントに失敗し、MySQL本体側のコンテナのファイルだけが変わっているのでは? という疑惑

はい、確かめておかないとなりません。該当コンテナを載せたCentOSにつないでみます。君の気持ち、信じているよ。

$ docker run -it --name term -v db1c:/var/lib/mysql centos:6 bash
% ls /var/lib/mysql
% exit

作成したDB名のファイルが有るかと思います。これで証明できました、君への想い。動かしたものは止めておきます。止まらない君への想い。

$ docker stop term
$ docker rm term

特に負荷は無いと思いますが、動作しっぱなしが気になる場合は、はい、MySQLコンテナの停止や削除をします。

$ docker stop mysql
$ docker rm mysql

今回はここまでとします。

-Docker
-, , , ,

Copyright© Legend stardust, amazing takety's labo. , 2024 All Rights Reserved Powered by STINGER.