私は Docker に非常に興奮しています、あなたが大きなプロジェクトの開発者なら、machineであまりにも苦しんでいます-)環境とマルチプラットフォームの手。
Dockerの重要なセールスポイントの1つは、イメージの状態をスナップショット/コミットすることで、特定の依存関係の異なるバージョン(互換性がない可能性がある)で環境を構築するリスクを回避できることです。わかりました、素晴らしいです!
dockerfile でチュートリアルを実行することは、npm
、chef
またはbower
を実行することとまったく同じ概念ではありません。もちろん、UNIXライブラリは、先ほど述べたこれらのライブラリストアにあるほとんどのライブラリよりも安定していますが、これはdockerが戦っているワークフローと同じではありませんか?
コンテナをニーズに合わせて調整し、その状態をコミットして自由に乗算することが目標ではありませんか?
些細なことを見逃しているのでしょうか、それともそうですか? Dockerはスクリプトファイルから画像を作成する機会をまだ提供していますか?
Dockerは、さまざまな時点でパッケージマネージャーを実行するのは悪いことだと言っています
.。
ただし、チュートリアルで「apt-gets」のセットからマシンを構築する場合は、これに反します。
Dockerによると:
コンテナー/ドッカーは、開発者がローカル開発のために頭を抱えるのがはるかに簡単であり、Vagrantと一緒に接着された選択した構成管理システムの利用方法をチーム全体が理解する必要がなくなります。 Dockerコンテナーは仮想マシンに似ていますが、重要な違いがあります。
アプリケーションのすべての依存関係はコンテナーにバンドルされているため、デプロイ中にすべてのサーバーでオンザフライでビルドする必要はありません。これにより、展開とロールバックがはるかに高速になります。構成管理ツールを使用すると、展開ごとに同じ手順をやり直す必要があります。これは、ソフトウェアのリリースと依存関係を追跡するのが難しいことを意味します。
もう1つの違いは、Dockerfilesでは、開発、ステージング、本番環境などの環境間でアプリケーションを移行するときに、構成を同じレベルで制御できないことです。 Dockerfileが、Dockerイメージ内の構成ファイルをその場で編集する外部スクリプトを呼び出さなければならない状況に陥る可能性があります。詳細については、こちらをご覧ください container wiki。
私は今週の会議で同じことについて話し合い、多かれ少なかれ同じ質問をしました。
いくつかの重複があるように思われるため、私の理解に基づくと、Dockerfileを使用すると、コンテナーを初期状態にして、DevOpsフレームワーク(またはnpmまたはbower)を利用できるようにすることをお勧めします。
Dockerfileは、必要な場合にスライスがより良い初期状態から継承する可能性があるため、処理を高速化する可能性もあります。たとえば、Dockerfile内から「g ++」をインストールした場合、スポーンする各インスタンスはそれをダウンロードする必要はありません。これは、「ベアメタル」マシンで実行されているChefの場合です。
最後に、どのポートをマップするかなど、Dockerfile内からのみ実行できることについては、重複がない場所を検討する必要があると思います。したがって、少なくともこれが必要です。例として:
FROM ubuntu
DevOpsツールに「このノードをubuntuインスタンスにする」とは言えないと思います。
私はこの地域では少し新しいですし、この地域も新しいので、この回答の有効性は時間とともに変動する可能性があります。