Lean Baseball

No Engineering, No Baseball.

WebをやるならDockerを試して学ぼう - 実務にDevOpsを持ち込むまでのハナシ

f:id:shinyorke:20190828223807j:plain

著者(かつ私の元チームメイト)のsakuさん(櫻井さん)*1のご厚意により, 頂戴いたしました.

試して学ぶ Dockerコンテナ開発

試して学ぶ Dockerコンテナ開発

昨年出版された「Dockerによるアプリケーション開発環境構築ガイド」の続編的な内容(このブログでも去年紹介しました)かつ,

「試して学ぶ」を繰り返すことにより,「実務」での活用を前提にした内容でとても良い本でした.

このエントリーでは,そんな「試して学ぶDockerコンテナ開発」の紹介を簡単にやりつつ, 「Dockerを学んでから,仕事で使うまでのススメ方」を自分の経験と意見を交えた上で紹介します.

TL;DR

  • Webアプリケーション開発に慣れて, DevOpsやりたいぜ!っていうタイミングでDockerをはじめるといいよ!
  • DevOps的になにかやる, チーム開発に興味を持ったタイミングで「試して学ぶDockerコンテナ開発」を読んで試すとすごく良さそう.
  • DevOps的に導入する,第一弾は「受け入れ・オンボーディング時にエイッとやってしまう」

おしながき

このエントリーの対象読者

プログラミング初心者および駆け出しエンジニア*2...と言いたいところですが,

  • 任意の言語(PHPでもRubyでもPythonでも)でWebアプリケーション開発ができる(人の助けを借りてOK)
  • bash, zsh等の環境でコマンドラインベースで操作ができる(GUIじゃなくて)
  • 何かしらのエディタを使える

上記を最低の対象読者要件とさせてもらいます.*3

言語・Web開発やコマンドライン・エディタに自信が無い方はこちらをそっ閉じしてもらって, この辺から学習した上で再度挑戦してもらえると良いかもです.

試して学ぶ Dockerコンテナ開発

早速こちらの本の感想です.

試して学ぶ Dockerコンテナ開発

試して学ぶ Dockerコンテナ開発

読んでいてよかったなと思うのが,

  • Webアプリ・データサイエンスの環境といった「動く」ものを作りながら学べる
  • 実務で必要な視点が書かれている

この3つです.

「試して」動かしながら「学ぶ」

この本にのっている事例が,

  • PHPのイメージを元にLaravel製Webアプリ
  • nodeのイメージを元にNuxt.jsのSPA(シングルページアプリケーション)
  • Rubyのイメージを元にSinatra製Webアプリ

と, まずは単体のアプリからはじまり,

  • Rails + Vue.jsの全部のせアプリ用イメージ

を作って開発環境を運用し,

  • JupyterLabでのPyData環境
  • PyTorchを入れる・GPUを使う

といったデータサイエンス領域まで「試して」動かしながら「学ぶ」ことを,段階的に試せるような構成になってて読みやすいし試しやすいなと思いました.

Dockerの仕組みを理解しながら,必要なもの(Rails + Vue.jsなら, Rubyのimageにどうやってnodeを足すか?とか)に徐々に触れていく順序も,初学者・やろうかなと思っている人たちには合いそうな気がします.*4

現場で必須の視点がある

また, 単にDockerを試して動かすだけでなく,

  • docker-composeを使った複数コンテナのオーケストレーション
  • Dockerfileの記述・運用のノウハウ(例:RUNやビルドの順序を考慮してなるべくキャッシュ使うなど)

といったところも触れおり, 中級者以上にも良い内容だなと思いました.

オススメの使い方(個人的な感想)

個人的には「Dockerでなにかやりたいときのレシピ・ヒント集」的な使い方に最適だなと思いました(し,実際そういう使い方すると思います).

Dockerをはじめよう!という方はぜひ本を最初から舐めて真似するところからやると良さそうです.

実務にDevOpsを持ち込むまで

Docker(もしくはコンテナ技術)を使う理由はいくつもありますが,あえて身近な所で絞るとするならば,

「自分が作ったモノを他の人・環境でも再現可能にする」

ことかなと思っています.

実務的にあるあるなシチュエーションだと,

  • 開発環境を「動くモノ」として共有する.
  • 定義を変えるだけで開発・STG・本番でも動く.

的な, 「エンジニアが開発する(Dev)」と「実際に運用する(Ops)」を再現可能かつイミュータブルにやる,ということかなと.

オススメのスタイル

一番のオススメは,

自ら率先してDocker使って開発, 成果をチームに共有する

ことかなと.

  • 新しく入ったチームメンバーの受け入れ(オンボーディング)タイミングでDocker化するタスクをやる
  • 自分が新入メンバーの場合,環境構築&今後のためにDockerで環境を作る

といったことをしちゃうのが良いかなと思っています.

この方法のメリットとして,

  • Dockerをより詳しく知れる
  • 何よりも自分がキャッチアップしたり,メンバー教育する際に同時に動く環境を入手できる!

というメリットがあり,うまく進むとチームのDevOps化も捗ると思います.*5

若干手間はかかる(≒工数はかかる)のがデメリットかなと思いますがやる価値は大いにあると思います.

ただ, 最初のうちは結構ハマる(なぜならDockerは比較的学習コストが高い)と思うので, 新人や若い人にやってもらうときは慣れている人のサポートを仰ぐなど工夫を一緒にするのがよりベストです.

私がDockerをキャッチアップするまで

このハナシでいうと,

  • 最初は仕事じゃなく,趣味プロジェクトを元にDockerを実験
  • 成果を勉強会のLTやPyCon JPなどで発表

を繰り返して少しずつ覚えました.

前前職あたりから,

  • 自分の開発環境を少しずつDocker化(キャッチアップしながら)
  • Dockerを使うメンバーがいたらノウハウ共有しつつ一緒にやる
  • 仲間を増やす(例:社内勉強会などで布教)

をやって, 今では

  • 手元の開発環境作りをDockerでやる(キャッチアップ&今後の共有目的)
  • 新サービスをDockerベースで動かすアーキテクチャにする
  • 便利さを布教する

というのをやり続けています.

ちなみに,導入は「開発環境用のDBをDocker化する」的なあたりからやるとすごくやりやすいです.*6

というわけで,迷っている方もぜひDockerを始めてもらえると嬉しいです.

*1:Retty時代のチームメイトであり, Dockerと日本酒に関する師匠でもあります.

*2:ちなみにこれってどっから流行りはじめてのだろう?謎だ.

*3:このレベル感は, 「試して学ぶDocker開発」に記載の「対象読者」情報に「Webアプリケーション開発ができる」という独自条件を加えたものになっています.Webを加えた理由は本文を読みすすめると理解してくれると信じてます(真顔)

*4:私はそこそこDocker使ってるのでそういった意味では対象じゃないですがDockerはじめたばかりのときにあったら良かったなあと思っています(こなみ)

*5:Docker便利だよ,仮想化大切だよ!が動くものとして伝わればすぐかと思います.そういう意味.

*6:ローカル環境はだいたいデータに困るので,その困ったデータ問題を解決するとハナシを聞いてくれるようになります(真顔)