Oreillyの「Docker」を読んだ

2018–09–13

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をあまり触ったことのない方が一通り体験するには良い本だと思います。