かざいむ日誌

IT関係で知ったことなどを記事としてあげていきます。内容に不備や質問などあればぜひコメントをよせてください。

後輩SEとの勉強会(2018/11/17)制約と誓約 #docker入門

後輩SEからDockerを分かるようになりたいので勉強会のトピックにさせてほしいと提案があり、今日のテーマはDocker。以前、Swiftの案件でDockerを入れたそうで最近またDockerを記事とかで目にして知りたくなったんだとか。今振り返ると、もう少し良い説明があった気がするので再現でなく、ポイントを絞って掘り下げます。

 

制約と誓約

漫画ハンター×ハンターを知っている人なら分かると思いますが、Dockerはまさにこれ。Dockerでは普通のサーバなら出来るようなファイルシステムへのアクセスや、プロセス間の連携はできません。これはまさにコンテナ、箱に閉じ込められたようなものです。これが制約です。そして、開発者はお作法に従った開発を行います。これが誓約。こういう不自由さがあるゆえに、形の決まった箱、コンテナであるがゆえに、箱を載せる載せるOSは中身が何かを意識する必要はありません。どこに持って行ってもDocker上で動くことが保証されています。これがDocker、コンテナ技術で得られるメリットです。

と言っても、全く意識しなくていいかというとそうでもないかもしれない。以前、航空会社の貨物部門で働いてる友人から、貨物は積載量に応じてどのように配置するか計算しないといけないという話を聞いたことがあります。

コンテナ技術というのはとてもうまい例えで、少し前にコンテナ物語という本がはやってましたが、規格化して中身を意識しなくてもよくなるというのはすごいことですよね。

コンテナ物語―世界を変えたのは「箱」の発明だった

コンテナ物語―世界を変えたのは「箱」の発明だった

 

 

演習 

今日はDockerを動かしてみるというのを目標にしていたので、Dockerをインストールして公式サイトのチュートリアルに従ってDockerでHello Worldをした。基本この手順でやると、ものの10分でDockerを動かしてみることができた。

Part 2:コンテナ — Docker-docs-ja 17.06.Beta ドキュメント

ただ、2か所ほどはまったのでメモ。

docker build でイメージを作る時にエラーが出る。

app.pyファイルに日本語のコメントがあるのだが、それがdocker buildでエラーになる。このコメント行を削除するとdocker buildは通るようになる。

localhost:4000でアクセスできない

これはどうも実行したDockerがIPをデフォルトでもっているらしく、そのIPにアクセスすると作ったページが表示される。このURL↓

http://192.168.99.100:4000

stackoverflow.com

 

話したこと

この資料の始めの方を見ながら話したけど、Dockerの必要性を理解するにはある程度企業やサービスでどうやってサーバを運用しているか知識が必要だと思った。

 

まずは4枚目の、物理サーバ、仮想サーバ、クラウドコンピューティングについていまいちそれぞれの特徴や、解決する課題が腑に落ちないとのこと。そこでまずは物理サーバから話を進めた。物理サーバは分かりやすい構成。
 次に、仮想サーバを企業で導入する理由について。1台に1サーバだと社内システムを複数立てている時に問題になることがある。例えば、勤退システムは帰る時に入力が多いからその時間帯のアクセス数に合わせてサーバのスペックを考える。でも、それ以外の時間はサーバはあまりアクセスがない。一方で、グループウェアのサーバーは朝一にスケジュールを確認するためにアクセスが集中する。でも、それ以外の時間はサーバはあまりアクセスがない。そうするとサーバを1つにまとめて、CPUやメモリを共有したら1+1=2じゃなくて、1.5くらいの予算で済むんじゃないかというのが導入する理由の1つ。あとは、モノが多くなれば壊れる確率が上がるけど、企業とかで導入する仮想サーバーだとそういった時に壊れた部分とは別の部分でサーバを立ち上げることですぐに復旧することができる。
 最後に、クラウドコンピューティング。この資料ではおそらく、AWSやAzureが提供する仮想マシンのサービスを想定している。コンシューマ向けのサービスを提供している場合、アクセスの増減に合わせて、仮想マシンを増やしたり、減らしたりする、はず。これをルーチンでできるようにサーバの構築をAnsible、Chefなどのツールで自動的に展開できるようにする。そうすることで、闇雲にサーバを用意してお金を払う必要がなくなるし、アクセスが急に増えてアクセスがさばけなくなることもない。
 このような話が前提にあったうえで、このクラウドコンピューティングの構成では、台数を増やしてもOSを立ち上げるのに時間がかかったり、OSに入っているライブラリのバージョンが違ってて動かないことがある。そこで、登場したのがDockerだ。