概要
WEB+DB PRESS vol.86 に「Docker実戦投入」という特集記事を書かせていただきました
Docker 特集以外だと、チーム開発の心得、Atom エディタ、React.js、Ruby コーディングアンチパターンと面白そうな記事が並んでます
2015年04月23日発売です。
Docker 特集の内容紹介
記事は 34 ページで、目次は以下です。
- 第1章:Docker入門
- 成り立ちから学ぶ基本と全体像
- 第2章:Dockerを活かすための原則
- 実戦投入に向けて押さえておきたい勘所
- 第3章:ビルド環境の構築とDockerイメージのビルド
- 本番運用を見据えたイメージの作り方
- 第4章:本番環境の構築とDockerコンテナのデプロイ
- Capistrano,Swarmによるオーケストレーションの実践
- 第5章:Docker運用ノウハウ
- CI,モニタリング,ログ管理,メンテナンス
対象読者は Docker 中級者です。「Docker の基本は一通り抑えたので、ローカル環境を超えて実戦で使ってみたい」という方の何かしらの参考になればと思います。
また、Docker 界隈は変化が非常に速いので、Docker の機能や Docker を取り巻くツール群の使い方ばかりを紹介することは避けました。それよりも、できるだけ今後も廃れない Docker / コンテナベースのインフラにおける考え方 みたいなものを大事にして書いています。
第1章 Docker入門
1 章のテーマは Docker の基本です。2 章以降は実戦的な内容になるのですが、1 章だけは特集の入り口として初めて Docker を触る人向けに書いています。紙幅的に基本を全て網羅するのが厳しかったこともあり、Web 上に既に多々存在している入門記事に詳細は譲るとして、Docker の成り立ちから Docker が何を解決しようとしているのか を知る、という Docker の根底にあるものを説明しています。(もちろん Docker の構成要素や基本的なコマンドについても解説しています)
第2章 Dockerを活かすための原則
2 章では、特集全体で繰り返し述べる Docker / コンテナベースのインフラにおける考え方 を書いています。これは自分が Wantedly で Heroku から AWS + Docker を使った自前環境に移行して半年以上運用してきた経験から、ここは良かったな、ここは良くなかったなということをベースにまとめています。
第3章 ビルド環境の構築とDockerイメージのビルド
3 章のテーマは Docker イメージのビルドです。
- 何をコンテナとして動かすかの選定
- Docker レジストリの選定
- ビルド環境の構築
- Dockerfile の書き方ベストプラクティス
- Docker Compose を使ったイメージのビルド
といった内容が書いてあります。
第4章 本番環境の構築とDockerコンテナのデプロイ
4 章は一番苦労した章でコンテナのオーケストレーション、デプロイがテーマです。紙面でも触れていますが、コンテナのオーケストレーションやデプロイ部分は本当に色々なツールが次々に出てきていて、成熟しきってない分野です。正直な話、これがベストプラクティスだとは中々言えない中で記事を書く必要があり、本当に悩みました。デプロイなどはインフラのサイズや、企業独特のニーズとかが密に絡むのである程度柔軟性が必要だと思ってます。なので現実的な案として Capistrano の例と、未来を感じる Docker Swarm の例 2 つを取り上げています。(fleet について書きたかったな)
第5章 Docker運用ノウハウ
5 章のテーマは運用です。
- Infrataster を使ったコンテナのテスト、
- GitHub + Wercker を使ったコンテナの CI
- Datadog や Mackerel を使ったモニタリング
- logspout や fluentd を使ったコンテナのログ収集
- パフォーマンスチューニング
- セキュリティ
- ホストマシンのメンテナンス
について書いています。
幻の第6章
- ダイナミックオーケストレーション
- サービスディスカバリ
- ダイナミックルーティング
- スケジューラ
- データを持つコンテナの取り扱い
みたいな話を書こうと思っていましたが、時間的にも紙幅的にも知見的にも不十分で断念しました。今後がんばる。
執筆裏話
GitHub での執筆作業
執筆作業は GitHub で行いました。とてもやりやすかったです。記事完成までに直接 @inao さんにお会いしたのは 1 回限りで、それ以外は全て Issue と Pull Request で進めました。最終的に @inao さんと 2 人で 1000 コミット超えていたりします。
Docker 界隈変化速い
執筆中に Docker 本体のバージョンが上がったり、Swarm や Machine の 0.1 が出たり、Lattice みたいにオーケストレーションツール候補がまた増えたりして大変でしたが可能な限り最新のを載っけてます(と言ってるそばから Docker 1.6 になったし、Swarm, Compose も 0.2 になったし...)
30 ページを超える文章を書くということ
読者として読んでる時は何気なく読んでいましたが、いざ書く側になると大変でした。
30 ページを超える記事の全体のまとまりを考えたり、わかりやすい文章、分量の調整など、普段は中々やらないことなので。「CoreOS とは」という節を書いた後まるごと削っていたりします...
そして、編集者の存在が当然ですが大きかったです。
謝辞
Docker に詳しい方は他に多々いらっしゃる中で、ご縁があってこういう機会を頂けたことにすごく感謝しています。WEB+DB PRESS に寄稿するというのは自分のエンジニアとしての目標の 1 つだったので、今回それを達成することができました。そして非常に良い経験になりました。一緒に特集を作り上げ、長期間サポートして頂いた @inao さん、執筆でちょっと余裕がなかった自分を暖かく見守ってくれた同僚の皆様、ありがとうございました!