何でも、手や身体を動かしながらだと、習熟の速度は爆発的に上昇します。要するに、やってみればわかるし、やってみなければ机上の空論、ということです。それでですね、そろそろ実用的な例を示していきます。やや突然ですが、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
今回はここまでとします。