はじめにのはじめに / 20190207追記
このQiitaの記事も、だいぶ古くなりました!
最終更新が2015年11月なので、3年以上前のお話ですね....。その間に、Dockerを巡る技術も非常に変わりまして、最初のころに試させていただいたチュートリアルやcowsayも公式サイトからはリンク切れになってしまった模様。
(どうやら、サンプルのイメージはnginxが利用されているようです)
せっかくなので、cowsayのイメージはまだDockerHubにあるかどうか確認したところ、2000件以上はヒット。
- https://hub.docker.com/search?q=cowsay&type=image
- ただし、Docker OfficialとかVerifiedなイメージに絞り込むと0件になるのが、なんとも可笑しい感じがします
このcowsayのDocker image、久しぶりに試してみたくなったのですが、わざわざpullするのもちょっと面倒なので、今回の追記に合わせて、Play with Docker(略してPWD) 上で動かしてみます。
PWDでは、ブラウザだけでDockerのイメージを起動させたり、クラスタを試せたりできる素敵な環境です。
(ただし、機密情報や見られてまずいものは、ここではアップしたりしないこと!あくまで揮発性、Sandboxとしてご利用ください)
ということで、3年ぶりに牛さんに再会できました。
もし、古い記事ですがご興味がありましたら、以下をお読みいただければ幸いです。
はじめに
Dockerのチュートリアルのページには whalesay や cowsay と言ったキーワードが出てきます。
文字通り、「クジラがなにか言う」のだとは想像できますし、実際にDockerを起動するとお馴染みのクジラのアスキーアートが出てきます。
おそらくこのことだろうとは思いますが、せっかくなのでネタとして調べることにしてみました。
cowsayってなに?
Dockerのチュートリアルにあるサンプルでは、このようなコマンドを打ちます。
% docker run docker/whalesay cowsay boo
Unable to find image 'docker/whalesay:latest' locally
latest: Pulling from docker/whalesay
.... [ 中略 ] ....
_____
< boo >
-----
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
実行の結果、「boo」と言っているようなクジラのアスキーアートが表示されました。
つまり、run で、cowsayというコマンドに「boo」という引数を渡して実行させるというわけですね。(ただし、cowではなくて、whaleがセリフを言っていますが)
では、このcowsayって何でしょう?
『「cowsayとは、メッセージをつぶやくウシのアスキーアートを生成するプログラムである。』(Wikipedia:cowsay より引用)
どうやら、Docker専用ではなく、だいぶ昔からある由緒あるコマンドのようです。
オプションを付けて実行してみよう!
cowsayが使えるということは、Wikipedia の解説にあるように、オプションも付けて実行できそうです。
早速 -l オプションで利用可能なcow(動物、キャラクター)をリストアップしてみます。
どうやら、docker もいるようです。
$ docker run --rm -i docker/whalesay cowsay -l
/usr/local/share/cows:
beavis.zen bong bud-frogs bunny cheese cower daemon default docker dragon
dragon-and-cow elephant elephant-in-snake eyes flaming-sheep ghostbusters
head-in hellokitty kiss kitty koala kosh luke-koala meow milk moofasa moose
mutilated ren satanic sheep skeleton small sodomized squirrel stegosaurus
stimpy supermilker surgery telebears three-eyes turkey turtle tux udder
vader vader-koala www
アスキーアートを変えてみよう!
オプションで、出力される動物を上記にリストアップしたものに変更できます。
特に指定が無い場合、この docker/whalesay のイメージだとクジラが出てきますので、おそらく -f default だとクジラなはず。
$ docker run --rm -i docker/whalesay cowsay -f default hello!
________
< hello! >
--------
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
上記のように、やっぱりクジラがでました!
Dockerfileにも、確かにそのようにデフォルトをwhaleに向けている記述がありますね。
COPY docker.cow /usr/share/cowsay/cows/
RUN ln -sv /usr/share/cowsay/cows/docker.cow /usr/share/cowsay/cows/default.cow
vaderがいるぞ!
なんとcowsayの中には、vaderとかlukeっぽいものがあります!
これは試してみるしかありません!
『そうではない。私がお前の父親だ』で実行!
$ docker run --rm -i docker/whalesay cowsay -f vader "No, I am your Father.."
________________________
< No, I am your Father.. >
------------------------
\ ,-^-.
\ !oYo!
\ /./=\.\______
## )\/\
||-----w||
|| ||
Cowth Vader
『Yes, master.』はどう?
$ docker run --rm -i docker/whalesay cowsay -f vader-koala "Yes master."
_____________
< Yes master. >
-------------
\
\ .
.---. //
Y|o o|Y//
/_(i=i)K/
~()~*~()~
(_)-(_)
Darth
Vader
koala
『父さん、助けて!』はどう?
$ docker run --rm -i docker/whalesay cowsay -f luke-koala Father, please, help!
_______________________
< Father, please, help! >
-----------------------
\
\ .
___ //
{~._.~}//
( Y )K/
()~*~()
(_)-(_)
Luke
Sywalker
koala
イメージの中に入ってみよう!
なかなか面白かったので、イメージの中に入ってcowファイルを眺めてみます。
(cowsay自体は、perlで書かれたスクリプトになっています)
# イメージの中に入ってみます
$ docker run --rm -i -t docker/whalesay bash
# cowファイルのある場所に異動
root@d17e90b906c6:/cowsay# cd /usr/local/share/cows
root@d17e90b906c6:/usr/local/share/cows# ls
beavis.zen.cow dragon.cow koala.cow satanic.cow telebears.cow
# --- [ たくさんあるので略 ] ---
# 一番サイズの小さい、bunnyを表示してみます
root@d17e90b906c6:/usr/local/share/cows# cat bunny.cow
##
## A cute little wabbit
##
$the_cow = <<EOC;
$thoughts
$thoughts \\
\\ /\\
( )
.( o ).
EOC
$thoughts のところにメッセージが入る模様。このフォーマットでファイルを作れば、いろいろできそうです。
以上、Dockerからつい脱線してしまいましたが、自作のcowファイルを入れてイメージを配布するのも楽しそうですね^^