「ただし」
Linuxのベースイメージを基盤にしているのでホストOSは、その派生である「ubuntu」や「centOS」などしか使えない。
※Windowsの中でLinuxの仮装OSを立ち上げ、その上でDockerを使用する「Docker for Windows」という仕組みも存在する。
「ただし」
サーバ仮想化製品なので、VMに比べるとリソース消費量が少ないだけで、ベースOSに直接アプリを立てたほうがリソース消費量は少なくなる。
集団で開発する場合、個々の環境に左右されにくくなるので品質が安定しやすい。
開発者が開発するための環境を用意するには、ハードウェア、ソフトウェアの調達や設置場所の考慮など様々な要因に対する検討が必要となるが、Dockerであれば少ないリソースで必要な開発環境を素早く揃えることが出来る。
個々でホストOSとして完結しているので、他のコンテナに影響が出ない。
「VMに比べて、リソース消費量が少ない」の項を参照。
大規模になればなるほど、小さかったリソース消費量も大きくなる。
一つの動作に一つのコンテナなんて作ってると、コンテナだらけになる。
問題の原因箇所も分かりづらくなってしまう。
「ただし」
大規模なサービスはDockerを使わなくても複雑な状態になってしまう。
本番環境で、安全かつ確実な方法でDockerを動作させるには、多くの変数を慎重に管理する必要がある。
- セキュリティで保護された、非公開のイメージリポジトリ (index)
- 組織的にコンテナのデプロイをダウンタイムゼロで実行
- 組織的にコンテナのデプロイをロールバックする
- 複数ホスト間のコンテナのネットワーキング
- コンテナログの管理
- コンテナデータの管理(dbなど)
- initやログを正しく扱えるイメージの作成
などなど
安定が求められる本番環境には向かない。
いつ落ちても支障がない事を前提に
- 複数の環境で使うか
- 頻繁に変更するか
- 増えたり減ったりするか
の内、2つ以上当てはまるならコンテナ化を検討したほうが良い。