想定読者
- 「Dockerって流行ってるらしいけどどこが良いの?」な方
- 「いろいろ機能があるのはわかったけど、結局何がうれしいの?」な方
まえがき
Dockerの本番環境導入を検討するにあたり、Dockerのメリットを開発のステークホルダーに説明する必要がありました。
当方は開発者としてDockerを半年程度利用していましたが、 うちの会社ではでは開発と運用が別部署ということもありDocker導入によるメリットを開発者目線と運用者目線の双方の観点で整理する必要がありました。
そこで本記事では、当方が開発現場においてDockerを半年利用して感じたメリットを簡単に整理するとともに、運用者の観点でのDockerのメリットについても自分で調べた範囲で簡単に書いてみようと思います。
※認識誤り等ありましたらご指摘いただけると幸いです。
開発者観点
1. 動作が軽量
開発端末上でVM起動してごにょごにょするよりも軽くさくっと動かせる
→単純に開発スピードが向上する
2. 環境が独立している
開発端末を汚さずに開発が可能。また、コンテナ間の依存性が低い(ミドルウェア等が干渉しない)ため、環境構築時にトラブルが起きにくい
→本来集中すべきアプリケーションの開発により専念できる
3. ライフサイクルが短い
何かおかしくなった時は、コンテナを破棄して新しく作り直せばOK(そうなるようなimageを作るという大前提があるが..)
→環境の再構築や、あれこれ原因究明をする時間・コストを削減できる
4. 便利ツール、システムの構築が簡単
dockerhubに繋げば大体ある(Jenkins, GItLab, nginx, apache, 等々)。また、これらのイメージに便利機能を追加してくれている人がいる
(GitLabで言えばsameersbn/gitlabとか。自動バックアップ機能などが利用できる)
→短時間で開発効率向上の仕組みを導入できる
5. 複数コンテナの扱いが容易
Docker Compose等を使うことで複数システムの連携を1セットで管理でき、操作がシンプル。また、名前解決を活用することで、環境に応じてホスト名を指定せずに済む。
→環境構築・設定にかかる時間・ミスを削減でき、本来集中すべきアプリケーションの開発により専念できる(2回目)
6. 自分でイメージを作成でき、簡単に共有可能
Dockerfileを書けば簡単にプロビジョニングが可能。またイメージは比較的軽量(数十MB〜数百MB程度)なので、複数人開発においては誰か一人が開発環境用イメージを作成してコンテナレジストリにpushし、他の人はそれをpullして利用すればOK。
→本来集中すべきアプリケーションの開発により専念できる(3回目)
運用者観点
1. 環境差分が出にくい
デプロイの際は基本的にイメージをpullするだけなので、従来の手作業による環境構築の手順差異だったり、ミドルウェアのバージョン差などが発生することがなく、開発環境では動いたが本番では動かないということが起こりにくい。
→環境構築・検証にかかる時間・コストを削減
2. アップデートが楽
アプリケーションをアップデートする際、イメージのタグを書き換えるだけで実現が可能。
→環境構築・検証にかかる時間・コストを削減(2回目)
3. 死活監視しやすい
Kubernetes等のコンテナオーケストレーションサービス1を利用することで2、コンテナの死活監視や自動復旧が可能。
→運用時のトラブル対応コスト減、システムの安定稼働率向上
4. スケーラブル
こちらもKubernetes等を利用することで2、コンテナのスケールが可能。アクセス増などによるCPU使用率等に応じたコンテナ数の増減ができる。
→運用時のトラブル対応コスト減、システムの安定稼働率向上(2回目)
まとめ
開発者、運用者のそれぞれの観点で考えてみましたが、
- 開発のスピード・効率の向上
- システム運用コスト減・安定稼働率増
にまとめられるのかなあという感じです。ざっくりですみません。。