OreillyのDocker本に続いて読んだのが、現時点では比較的最近出版された本書でした。
出来るだけ新しいDocker本で最近の情報で知識をアップデートしたかったのと、Kubernetesの説明が充実してそうというのが本書を手に取った動機です。
Dockerに正式採用されたKubernetesと、Swarmの違いなんかも体験できればなと思いました。
内容
Dockerの基本的な使い方から入るところは、先に読んだOreilly本と同じでしたが、目論見通りOreilly本の時点から色々変化があった事を知ることができました。
大きな変化はKubernetesの正式採用などがありました。
小さな変化ははDockerコマンドについてのコラムにあった docker container というコマンド形式で、 以前は省略していた “container"の指定が現在は推奨されつつある等です。
dockerコマンドではpruneオプションなんかも知ることができました。
構成としてはDockerの基本を学び、オーケストレーションを体験し、実際に運用する上での知識をつけていく流れなのですが、
サンプルで作成したToDoアプリを題材に、Swarmを経て Kubernetesへ載せていく流れでオーケストレーションについての知識が深められ非常に分かりやすかったです。
また、本番で使っているからこその著者のDockerについての考え方や知見が随所に散りばめられており、
後半の章、特に9章での軽量なDockerイメージの作り方はDockerの内部構造を意識する上でも非常にためになりました。
特に面白かった所
docker-composeで作成したToDoアプリが、最終的にKubernetesに載る所が、1つのクライマックスかと思います。
本書ではGCPでKubernetesを利用していますが、私はEKSでサンプルを試していきました。
ロードバランサの取り回しなど、細かい点は考慮が必要ですが、どちらのプラットフォームでも動作させれる点が、Docker, Kubernetesの強みであると実感できました。
また、コラムが非常に充実していて、日々運用する上で何に困って、どういうツールで解決していったかを知ることができ、運用の雰囲気を知る上で有用でした。
まとめ
Dockerの進化を感じつつも、実践という名を冠しているだけあって、著者が本番でDockerを運用し、格闘して得た知識が詰まっています。
私自身はKubernetesに移行するかは検討段階で、まだまだやる事が山積みですが、本書を片手に現在のDockerの運用を改善しつつ、来るべきオーケストレーションに備えたいと思います。
Dockerのチュートリアルを軽く触った事しかなかったのですが、本番でDockerを運用しているシステムを触ることになったので手に取りました。
しかしDockerは進化のスピードが早くてどの本を買おうか非常に迷いましたね。
この本は2016年の出版ですが、パッと見た所そこまで難しすぎず、手を動かしながらDockerを体験できそうだったのと、
迷ったらオライリーでしょっていう安易な考え方で選びました。
2年の月日はこの分野では大きな差がありそうですが、
特に進化が激しそうなオーケストレーション周りはこの本とは別に直近に出版されたものも読んで、
Dockerの進化を疑似体験しつつ知識をアップデートしていこうという目論見です。
内容
DockerでHello Worldする所から始まり、簡単なWebアプリケーションの構築を通して、Dockerの基本的な操作を学べました。
これまでVMを触る事が多かった身としては、VMとの違いや利点も知りたい所でしたが、その点もしっかり押さえられている印象でした。
ただ単にVMに比べて起動が早いというわかりやすい利点の他に、Docer Hubを介したエコシステムが開発効率を上げてくれることを体感できます。
やはりその可搬性からデプロイまでも含めた流れが、VMとの大きな違いですね。
例えばサンプルにも出てきますが、既存の構成にキャッシュを組み込む際に、redis用のコンテナをサクッとpullしてリンクしてあげるような基本的な部分から
Docker HubでのAuto Buildやステージング・本番で同一コンテナを利用する方法なども記載があり、
Dockerの思想を学びながら実際の現場で使えるようなイメージが湧きました。
要素としては、dockerコマンドやDockerfile, docker-compose, docker-machine等の基本的なコマンドや設定ファイルについて、
丁寧なサンプルが載っているので、写経していくには良かったです。
Dockerを利用したWebアプリケーションの構築やそのエンハンスを手を動かして一通り体験できるので、分かった気にさせてくれます。
特に面白かった所
これまで存在を知っていたconsul等のサービスディスカバリに触れられたことは、予想外の利点でした。
AWSのRDS等の各サービスを利用している際は内部DNSが裏で運用されて、利用する際はDNS名を意識すればよいだけですが、
Dockerで各コンテナ間で通信を行う際は、DNSでやるかどうかも含めて通信先を管理する必要があります。
そこでサービスディスカバリが必要になるわけです。
このDocker間の通信やサービスディスカバリがDockerで重要な位置を占めている点が知れた事が大きな収穫でした。
サービスディスカバリとコンテナの登録・削除を自動的に連携させるところまで細かく触れられていませんが、
手動でconsulやetcdのAPIを叩く事でコンテナの登録・削除を行う事でサービスディスカバリの働きを知る事ができました。
またホスト間をまたがったネットワークを構築するとなると、linkほど簡単に行かない点も興味深い点でした。
これまでAWSでEC2+RDSのようなオーソドックスな構成を運用する事が多かったため、
コンテナならではの考慮点がしっかり記載してある点は非常にためになりました。
まとめ
コンテナの良い所と苦労する点が非常にまとまってる本でしたが、
サンプルの通りに動かない点なども少々ありました。
それだけこの界隈の進化のスピードが早いという事でしょう。
やはりこの本だけでDockerを学ぶのではなく、直近に出た本でも知識のアップデートをしておく必要があると感じました。
特に、ネットワークやオーケストレーション周りですね。
とはいえ、Dockerをあまり触ったことのない方が一通り体験するには良い本だと思います。