Puppetとdockerは多くの同じことを実行できますが、異なる方法でアプローチします。
Puppetはファイル+パッケージ+サービスを管理します。(三連と呼ばれる)。Dockerは、コンテナ内にバイナリと構成ファイルをカプセル化します。
この記事の執筆時点では、dockerはまだ不安定であり、実稼働環境では使用しないでください。APIの多くは、バージョン1.0がリリースされるまで変更される可能性があります。
Dockerが安定したとしても、すべてのプロセスと構成ファイルをdockerコンテナーに変換するのは大仕事です。
一方、Puppetは安定した製品であり、ツールのエコシステム全体(heira、mcollective、facter、razor)が付属しています。これらのツールは、破損を心配することなく、迅速に実装できます。
次のリソースを強くお勧めします。
パペットでアプリケーションスタックを管理する方法のビデオ
https://www.youtube.com/watch?v=KSo_mcJxFIA
ドッカーとパペットがどのように連携するかについてのポッドキャスト
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html
dockerとの統合方法に関するpuppetブログ記事
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker
http://puppetlabs.com/blog/can-containers-and-configuration-management-co-existが共存するパペットとドッカーに関する別のブログ記事
dockerと対話するためのpuppetモジュール
http://docs.docker.io/use/puppet/
devopsの用語に関する若干の修正。Devopsは、特定のツールよりも、開発者と運用が協力するソフトウェア開発手法です。
更新
現在、私の会社はパペットとドッカーの両方を使用しています。puppet conf 2014でパペットとdockerを使用する理由を説明した素晴らしいプレゼンテーションがあります。人形劇の元雇用主であり、ドッキングブックの著者であるジェームズターンブルによって与えられました。
https://puppetlabs.com/presentations/using-docker-puppet-james-turnbull-kickstarter
また、sysadmincasts.comから提供されたdockerに関する短いビデオチュートリアルもあります。
https://sysadmincasts.com/episodes/31-introduction-to-docker
Dockerの長所:
- インスタンスをすばやくスピンアップできます
- 人形よりも学びやすい
- 簡単にダウンタイムなし
Dockerの短所:
- devicemapperバックエンドを使用する場合、コンテナには10GBの制限があります
- コンテナの再構築には、小さな構成変更に長い時間がかかります
- hub.docker.com、quay.ioなどのdockerレジストリを使用するには費用がかかります(セルフホストのdockerレジストリは非常にバグが多く、GUIがありません)
- 適切な初期化システムがありません。一部のアプリケーションはうまく動作しません。
- ネットワークをきめ細かく制御しない
- サブシェルを必要とするアプリケーション(RVM + rubyを見る)は、適切に動作するために非常に注意が必要です。
- Windowsホストを管理できず、SLESやその他のあまり人気のないオペレーティングシステムは管理できません
- 現在、Dockerオーケストレーションは非常に若いです。
- 現在、ビルド時に/etc/resolv.confを設定できません
- ホストのlocaltimeおよびurandomディレクトリにマップするために/ etc / localtimeおよび/ dev / urandomをマウントする必要があるさまざまなバグ。
- パフォーマンスはそれほど速くありません(dockerはベアメタルの速度の99%であるという主張にもかかわらず、他のマシンよりも30%遅い場合があります)。
- 小さいコンテナにはまだ数百メガバイトのオーバーヘッドがあります。コンテナはすべて数ギガバイトです。
パペットの長所:
- 拡張が簡単
- 既存のサーバー(windows、linux、sles)で動作します
- 小さな変更をすばやく行う
- 他のパペットユーザーとモジュールの強力なコミュニティ
- すべてのプラットフォームにパッケージをインストールするための標準化されたAPI
人形の短所:
- 大規模なインフラストラクチャは非常に複雑になります
- 条件付きモジュールの依存関係により、spagettiコードが作成されます
- より重い
現在、パッカーを使用して、Dockerコンテナをプロビジョニングしています。Dockerコンテナはjenkinsビルドに使用され、各ビルド後に破棄されます。それはうまく機能し、一貫した環境を提供します。つまり、コードを1回記述するだけで、ubuntu、sles、centosの両方のマシンを再構築するだけで済みます。コンテナの再構築には約15〜30分かかりますが、それでも手動プロセスです。Dockerは、クイックテストVMの起動に最適です。
つまり、Puppetは既存のインフラストラクチャの管理に優れています。Dockerは、100%linuxのグリーンフィールドがあり、小さな一時的なインスタンスで囲むことができるテクノロジースタックがある場合に適しています。一部の機能は重複していますが、相互に排他的ではありません。