Lean Baseball

No Engineering, No Baseball.

「Dockerによるアプリケーション開発環境構築ガイド」はプロのエンジニア必読の一冊だ(断言)

f:id:shinyorke:20180620221127j:plain

マイナビ出版社様および、著者(かつ、私から見たら元同僚)の櫻井さん(このエントリーではこの後sakuさんと称す)*1のご厚意により、一冊頂戴いたしました.

Dockerによるアプリケーション開発環境構築ガイド

Dockerによるアプリケーション開発環境構築ガイド

ありがとうございます!

結論から言うと、タイトルの通り

プロのエンジニアを名乗って一人前に仕事するなら一冊個人なり会社なりで持っておけ!!!

っていうくらい(元同僚バイアスを抜きにしても)よくできている本なので、感想(書評)と自分のDockerなお話を書きたいと思います.

TL;DR

  • Dockerはじめての人も使ってる人も「Dockerによるアプリケーション開発環境構築ガイド」は手元においておけ、それぐらい良い本だぞ!
  • サーバーサイドの人はもちろん、フロントエンドもデータサイエンスもエンジニアはDocker使いこなせると楽できるぞ

おしながき

私のDocker歴

後の方(Appendix)でも細かく書きますがザックリ言うと、

  • 自分がやりたいことは一通りやれる、なおKubernetesはまだ使ったことない(これからやる)、というレベルです
  • Dockerは2015年(3年前)から本格的に使い始めた
  • はじめは個人プロジェクトと自分のPCの開発環境に、Rettyに入社した2017年より本番での保守・運用を実践(ゼロから開発もやった)
  • サーバーサイド(Python/PHP)、フロントエンド(node.js/Vue.js)、データサイエンス(Python/Airflow/Luigiで基盤作った)で運用経験あり
  • 拙作で恐縮ですが、AirflowのDocker ImageをDocker Hub上で公開しています

「Dockerによるアプリケーション開発環境構築ガイド」の感想

感想をザックリ書くと

初心者がDockerを覚えるのにも、中〜上級者がDockerの使い方や運用のヒントを得たい時にも使える非常にバランスが良く取れた良著です.

そもそもどんな本なのか

本書は主にDocker初心者〜中級者の方に向けて、Dockerの概念やコマンドについてはわかってきたんだけど、じゃあ実際にどういうふうに現場で使えるの?といった疑問にお答えするための書籍となっております。

Dockerによるアプリケーション開発環境構築ガイド「はじめに」より引用

ホントこの通りの本で、コンセプトから終始ブレていないかつ、絵図が多い&解説も程よいこともあり、読みやすい本です.

(私がRettyにいた去年に)sakuさんからDocker本を書いてる&コンセプトも軽く立ち聞きしてたので個人的にはホント楽しみにしていたのですが、いい意味で期待値通り(いやちょっと越えてる)本で興奮しました.

目次と概要

章ごとに何が書いてるかという簡単な解説を.

Chapter01:Dockerとは

タイトルの通り、「Docker #とは」という内容.

コンテナ化・Immutable InfrastructureといったDockerに欠かせない思想・考えから二章(Chapter02)以降の内容に進むための準備・必要知識について書かれています.

Chapter02:Dockerの基本的な使い方

Dockerのインストールからコマンドの解説、イメージの作成・レジストリ共有、Docker Composeによる簡単なコンテナの管理について

Chapter03:オンプレの構成をコピーしたDocker環境を作成する

オンプレで動いてるサーバー環境をコピってDocker環境を作るのがメインコンテンツ.

Baseimage-dockerを使ってみよう!というチャレンジから始まる

Chapter04:本番環境からローカルのDocker環境にポーティングする

AWSやGCPで作った環境をアプリケーション・サーバーのみならずDB含めて完全にローカル環境に作っちゃおう!という説明.

この本のオリジナルなコンセプト・思想が味わえる醍醐味ある章です.

Chapter05:ローカルのDocker環境を本番環境にデプロイする

ローカルで最初からDocckerベースで環境構築→本番のクラウド環境に対してデプロイする流れからのKubernetes入門.

これは今求められてる(&私がすごくやりたい)内容.

Chapter06:Appendix

Dockerfileのデバッグ、CIベースのイメージビルド、プロキシやホスト容量問題への対処法etc...

開発者なら一度はハマるポイントが載ってる.

所感・感想

ザクッと箇条書きで

網羅性が高い

Docker初心者が思うところである、

  • Docker何それ美味いの?
  • インストール〜動かすまでどうやってやるの?

という初歩から、ちょっと使い慣れると考える(&ハマる)

  • Dockerfileのお作法とかdocker-composeの使い方など、細かいところ
  • 今あるオンプレの鯖からDockerに載せ替えたいのだが?
  • Kubernetesって何者&どうやって始めればいいの??

っていうポイントまで網羅的かくポイントを外さずもれなく書いてある辺りがホント良い本です.

(多すぎるPython本*2ほどではないにしても)Dockerもそれなりに本が多く、どれをチョイスするか悩ましいポイントもありますが、最初の一冊として相応しいのではと思いました.

細かいことを知りたくなったときは他の本を読む、Docker使いが多そうなコミュニティ*3に行くなど、そういう選択肢を取りながら使うのに良いんじゃないかと.

サンプルコード・絵図が充実している

ちょっとわかる人なら、本文をサラッと読んで絵図とコードを見て進められるのでは!?

っていうくらいサンプルコードや絵図がわかりやすく書かれていて良いと思いました.

私は全体把握がてらサクッと斜め読み*4したのですが、それでも内容が残るぐらいわかりやすかったです.

初心者だと初手では辛そうなAWSアカウント作りやサービスを使う部分もスクショを交えて解説してるのでサクサク進むのではと思います.

辞書代わりに使える(中級者以上の人は特に)

  • オンプレから移行どうしよう
  • Kubernetes使いたい

みたいなシチュエーションの時に「わかってるところ」を飛ばしつつ、「わからないところ」を読んで理解してすすめる、みたいな使い方がしやすい印象を受けました.

章ごとのコンセプトが明確なので、「読むべきところ」「飛ばしてもいいところ」がわかりやすく別れてるのではと.

私は今後Kubernetes覚えて使いたいので六章ちゃんと読んで覚えるぞ!みたいな判断がしやすいのは非常に助かります.

本自体は400ページ超えの大作ですが、ページ数ほどの重さは(いい意味で)無いので良いかなと思いました.

これからDockerをやろうかな?と思った方へ

Dockerによるアプリケーション開発環境構築ガイド」を使った具体的な進め方と個人的なアドバイスを2つほど.

「Dockerによるアプリケーション開発環境構築ガイド」の二章まで手を動かして理解しよう

これは私の経験則ですが、Dockerを仕事レベルで使うなら、

  • 自分で作ったモノ(アプリとか)を含めたDockerコンテナをローカル環境で動かせる
  • 動かすためのDocker imageを自作のDockerfileからビルドして使う
  • Docker Composeで複数コンテナをコントロールする

ぐらいできれば何とかなると思います.

という意味ではこの本の二章をちゃんと理解できたら何とかなります.

ということで、

  • なにか適当にWebアプリを作る(DjangoでもRailsでもnode.jsでも、得意な言語で良い)
  • 適当に作ったアプリが動くDocker imageを作る
  • DBを含めた環境をDocker Composeで立ち上げて動かす(ローカルでOK)

ぐらいまでやれればよいのではと思います.

「プロのエンジニア」として、「手を動かして、自分の理解範囲で意のままにDocker使えるぜ」っていう状態まで持ってきたらその後の事もやりやすいんじゃないかなと思います.

身近の詳しい人に教えを請う(コードレビューなど)

Dockerもだいぶ枯れてきた技術で、使ってる人も慣れてる人も3,4年前と比べれば増えていると思います.

ので、職場なりコミュニティなりで使ってる・詳しい人の教えを請うのが覚える&実践する近道かと思います.

これは私がRettyにいたときのエピソードなのですが、社内Slackのtimesチャンネル(times_shinyorkeという名前でやってた)にて、

ワイ「よっしゃ!アプリとDockerfileできたしimageビルドしてローカルでも動いたから開発環境にデプロイするぞ」

sakuさん「お、ちょっと見せて」

ワイ「ファ!?(と言いつつリポジトリのURLを渡す)」

結果、sakuさんから沢山のコメントを貰う→直してレビューしてもらってLGTMをもらう、という事が何回かあり、まさにこの本に書いてあった事もいくつか学ぶという事がありました.

社内にDocker警察エバンジェリストがいるってのはホントに大切ですね!とこの時は思いました.*5

そんなsakuさんが書いた「Dockerによるアプリケーション開発環境構築ガイド」ホントにオススメなので、夏の課題図書にぜひぜひ読んでみてください!

Dockerによるアプリケーション開発環境構築ガイド

Dockerによるアプリケーション開発環境構築ガイド

【Appendix】私とDocker

この先は「私とDocker」というちょっとしたメモです.

馴れ初め&Docker歴

  • 覚え始めたのが2014年、このときは使いこなせず
  • 翌年(2015年)に当時在籍していたリクルート(SUUMO)の社内勉強会でDockerをやることに→「中川やってよ!」っていう話で独学して覚えてなんとか使えるように
  • PyCon JP 2015のデータ分析環境(野球)をDockerで作ってAWS上で運用、これが事実上のDockerデビュー
  • その翌年2016年(ビザスク時代)にE2Eテスト環境(ローカルで実施)をDockerベースで構築・運用(Docker得意なインターン生と共に共作)
  • Rettyにいた去年(2017年)はすでにあるDocker環境(PHPだったりnodeだったりPythonだったり)を保守運用、データ管理の基盤をDocker + Luigiで構築・ローンチ
  • PyCon JP 2017の発表で使ったAIrflow環境をDocker Imageにして公開(コードと共に)
  • 現在(ネクストベース)では手元の環境を全部Docker化しつつ、本番への展開などをもくろんでいる

実績(仕事)

やった仕事レベルでいうと、

  • Webアプリケーション・サーバー(Python)
  • node.jsのビルド環境(社内配布用)
  • E2Eテスト環境
  • データ分析環境(Redash)
  • データ基盤

Redashは当時在籍していたビザスクのブログにて書きました.

tech.visasq.com

また、データ基盤については去年Rettyのアドベントカレンダーに書きました.

qiita.com

実績(個人)

このブログ内の野球エントリー及び過去の野球アプリをDocker化.

例えばAirflow

shinyorke.hatenablog.com

Djangoのアプリも(これはちょっと古いので作り直したい)*6

github.com

*1:だいたいみんなそう呼んでる気がする.ちなみに日本酒担当(元とんかつ担当)で、日本酒のことも沢山教わりました(感謝!w)

*2:今年さらに増えたのでもう一度書評エントリーを書きたいお気持ち(質問とか増えてる)

*3:Dockerそのもののミートアップもいいかもですが、meguro-devあたりが良さげ?sakuさんもメンバーなので.ちなみに#rettypy も聞けそうな人はちょいちょい居ます(私とか)

*4:というかすべての技術書を斜め読みから始めるのが私のスタイル

*5:これを社内ボランティア?オーナーシップを持ってやってたsakuさんがホントに偉いしエンジニアとして素晴らしいと思った瞬間でした

*6:Django 2.0 + Vue.jsでなんとかしたいお気持ちがあります、やるかどうかは気分と時間次第