差分について
そうですね。最初にやや力を込めて言っていた、差分の話はどこにいったのだ、ですね。そう突っ込みたい気持ち、わかります。僕もそう思っていました、な、なな、なんでやねん!
はい、イメージを起動したコンテナ、そこで作業されたプラスαなものの差分を、どのように管理するのか、DocketHub上で共有するのはどうやるのだ、という所をようやくやります。
取得済みの CentOS 6 のコンテナを使い、banner と figlet コマンドを入れてみます。いずれも、でっかい文字のバナーを表示するコマンドです。レガシーなジョークコマンドとして有名ですが、意外とさくっと使って便利だったりします。
え? MacOSならば banner 入ってるし、figlet もすぐ入るって? そうですけど、いやいや、 banner コマンドを実際に使えばすぐわかりますが、BSD文化から来たものと、GNU文化から来たものとは、動作が違うのですよ。
でもそれこそ、なんでやねん! ではあります。だいぶ違うものならば別の名前にすればいいのに、とか思ったりもします。
banner と figlet を導入
CentOS 6 のコンテナを立ち上げ、さくっとインストールします。
$ docker run -it --name add1 centos:6 bash
# yum install -y epel-release
# yum install -y banner figlet
おためし。
ほら入った。Yeah!!!! え? これ出したかっただけちゃうんかって? そうですけど何か問題でも? もちろん与える文字列は何でも構いません。ただしASCIIな文字しか、ちゃんと変換してくれませんのでご注意を。
コミット&DockerHubへ格納
以下により、追加・更新などが発生したファイルがわかります。ファイル単位のdiff情報ですね。
$ docker diff add1
いったんコミットします。centos6をベースに、bannerというタグを付けて、あとでこれが何だったか思い出せるようにしてみました。YOUR_ID の所はご自分のアカウント名に変えてくださいね。君との思い出は一つも忘れないよ。
$ docker commit -m "added banner and figlet" add1 YOUR_ID/centos6:banner
push してみましょう。YOUR_ID の所は(以下略)
$ docker push YOUR_ID/centos6:banner
該当イメージの存在を確認します。エラーが出ていなければ有るはずです。有ったらもうパーティしよう! いやまだ早い!
$ docker images
もし denied と叱られた場合は、以下でログインしてみてくださいね。
$ docker login -u YOUR_ID
自身のリポジトリから取得
push が終わったらば、ローカルのイメージを消してみます。押して押して気持ちを伝えたのに、もう消すのかい? これにより新しい愛が生まれていくのです。
$ docker stop add1
$ docker rm add1
$ docker rmi YOUR_ID/centos6:banner
DockerHub の自身の場所から、改めて pull してみます。おかえり、ぐんと成長したね。いや、さっきと同じものです。
$ docker pull YOUR_ID/centos6:banner
起動して遊んでみます。今夜はパーティだ!!
$ docker run -it --name add1 YOUR_ID/centos6:banner bash
# banner "(^.^)"
# figlet "*(^-^)*"
# exit
20世紀の頃のBBSかお前は、という感じのアスキーアートですね。なお、 figlet のほうはフォントが選べたりとなかなかの多機能です。
$ figlet -f trek ANGERME
$ figlet -f starwars ANGERME
なんだか楽しくなってきました。PARTY HARD!! でも、このへんで止めておきます。よーし、今夜は無礼講だ! って言われた場で、それを真に受けてはいけませんです。度を超えて調子に乗ると、あとでだいたい後悔します、ええ。
次回へ
このように、イメージの受け渡し方法として 「ID/あれ:それ」 を伝えるのも有りですが、ちょっと管理しにくいものではあります。
開発チーム内ならば、小さなテキストの Dockerfile 設定ファイルを管理するのが良いです。誰かの成果な Dockerfile から build して新イメージを作り、設定はチーム内のリポジトリで管理する感じですね。
はい、次回はこのあたりの build 手法に触れまして、入門編の第一章を終えようと思います。フィナーレの回はなんと、3時間スペシャルでお送りします。いえごめんなさい、もっと手短に書きます。