31
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerに出てくるcowsayってなに?

Last updated at Posted at 2015-11-10

はじめにのはじめに / 20190207追記

このQiitaの記事も、だいぶ古くなりました!
最終更新が2015年11月なので、3年以上前のお話ですね....。その間に、Dockerを巡る技術も非常に変わりまして、最初のころに試させていただいたチュートリアルやcowsayも公式サイトからはリンク切れになってしまった模様。
(どうやら、サンプルのイメージはnginxが利用されているようです)

せっかくなので、cowsayのイメージはまだDockerHubにあるかどうか確認したところ、2000件以上はヒット。

このcowsayのDocker image、久しぶりに試してみたくなったのですが、わざわざpullするのもちょっと面倒なので、今回の追記に合わせて、Play with Docker(略してPWD) 上で動かしてみます。

20190207-cowsay-on-pwd.png

PWDでは、ブラウザだけでDockerのイメージを起動させたり、クラスタを試せたりできる素敵な環境です。
(ただし、機密情報や見られてまずいものは、ここではアップしたりしないこと!あくまで揮発性、Sandboxとしてご利用ください)

ということで、3年ぶりに牛さんに再会できました。
もし、古い記事ですがご興味がありましたら、以下をお読みいただければ幸いです。

はじめに

Dockerのチュートリアルのページには whalesaycowsay と言ったキーワードが出てきます。

文字通り、「クジラがなにか言う」のだとは想像できますし、実際に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ファイルを入れてイメージを配布するのも楽しそうですね^^

31
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?