[解決済み] Dockerfilesとイメージコミットのどちらを使うべきですか?
質問
この2つのオプションについて、少し混乱しています。 これらは関連しているように見えます。 しかし、実際には互換性がありません。
例えば、Dockerfile を使用するということは、イメージにコミットすべきではないということです。なぜなら、実際には git で Dockerfile を追跡し、それに変更を加えるだけで良いからです。 そうすれば、何が権威あるものであるかについて曖昧さがなくなります。
しかし、イメージのコミットは本当に素晴らしいものだと思います。 コンテナを直接変更し、その変更にタグを付けて別のイメージを作成することができるのはとても素晴らしいことです。 イメージのコミット履歴からファイルシステムの差分のようなものさえ得られると理解しています。 すごいな。 でもそれならDockerfilesは使わない方がいい。 そうでなければ、イメージをコミットした場合、Dockerfileに戻り、あなたが行ったことを表す何らかの変更を行わなければならなくなります。
ですから、私は悩んでいます。 イメージの状態を Dockerfile で表現する必要がなく、直接追跡することができるのです。 しかし、イメージの中に何があるのかの簡単な概観を与えてくれるある種のマニフェスト ファイルという考えをあきらめるのは不安です。 また、同じソフトウェア パッケージの中に、互換性がないように見える 2 つの機能があることにも違和感を覚えます。
このことについて何か考えをお持ちの方はいらっしゃいますか? イメージのコミットを使用するのは悪い習慣だと思われますか。 それとも、Puppet 時代からのマニフェスト ファイルへの愛着を捨て去るべきでしょうか? 私はどうしたらよいでしょうか?
アップデートについて :
これが意見に基づく質問だと思う皆さん、私はそうではありません。 主観的な部分もありますが、ほとんど客観的な質問だと思います。 さらに、このトピックに関する良い議論は、有益なものになると思います。
最終的には、この投稿を読んだ人が、Dockerfileと画像コミットがお互いにどのように関連しているかについて、より良い理解を持って帰ってくることを望みます。
アップデート - 2017/7/18 :
つい最近、イメージコミットの正当な使い方を発見しました。 私たちの会社では CI パイプラインをセットアップしたばかりで、パイプラインの 1 つのステージでは、アプリのテストがコンテナの内部で実行されます。 テストランナープロセスがカバレッジ結果を生成し(コンテナのファイルシステム内に)、コンテナの実行が停止した後、終了したコンテナからカバレッジ結果を取得する必要があります。 そのためには、停止したコンテナをコミットして新しいイメージを作成し、カバレッジファイルを表示したり stdout にダンプしたりするコマンドを実行することで、イメージコミットを使用します。 だから、これがあると便利なんです。 この非常に特殊なケースを除けば、私たちは Dockerfile を使って環境を定義しています。
どのように解決するのか?
Dockerfilesは、イメージを作成するために使用されるツールです。
を実行した結果
docker build .
はコミットされたイメージなので
コミットを作成しないDockerfileを使用することはできません。
. 問題は、何かが変更されるたびに手作業でイメージを更新する必要があり、その結果
ゴールデンイメージの呪いに自らを陥れるのか?
?
ゴールデンイメージの呪いとは、ソフトウェアを実行するために、バグだらけのセキュリティホールだらけのベースイメージを使い続けなければならない人々にかけられた恐ろしい呪いです。なぜなら、それを作った人はとっくの昔に古代人に食われ(あるいは新しい仕事に移り)、誰もそのイメージに組み込まれた imagemagic のバージョンをどこで入手したかを知らないからです。また、たとえ imagemagic がどこから来たのかわかったとしても、サポート ツールの JNI コールに使用されている libstdc++ のバージョンが、長髪のインターンが作成したサポートされていないバージョンの ubuntu にしか存在しないため、とにかく重要ではありません。
関連
-
[解決済み] dockerfileでローカルイメージをベースイメージとして使用するにはどうすればよいですか?
-
[解決済み] Dockerでイメージのクリーンビルドを強制する方法
-
[解決済み] Dockerイメージの削除方法について教えてください。
-
[解決済み] Dockerの「expose」と「publish」の違いは何ですか?
-
[解決済み] 既存のDockerコンテナにボリュームを追加するにはどうすればよいですか?
-
[解決済み】Dockerイメージとコンテナの違いは何ですか?
-
[解決済み】Dockerでnamedタグとlatestタグを作成する方法とは?
-
[解決済み】Dockerのコンテナイメージが大きいのはなぜですか?
-
[解決済み] Alpineをベースイメージとして使用している場合、ユーザーを追加するにはどうすればよいですか?
-
[解決済み] docker エラーです。/var/run/docker.sock: そのようなファイルまたはディレクトリはありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ディレクトリをファイルにマウントしようとしていませんか(またはその逆)?
-
[解決済み] Docker HostへのポートのみのEXPOSE
-
[解決済み] Dockerがコンテキスト外のシンボリックリンクをフォローする
-
[解決済み] Docker CMDを複数回使用して、複数のサービスを実行することができないのはなぜですか?
-
[解決済み] Dockerコンテナ内でCurlコマンドを実行できない
-
[解決済み] dockerイメージフィルタの使用方法
-
[解決済み] dockerfileからファイルを編集する
-
[解決済み] docker-compose のコンテキストまたはワークディレクトリー
-
[解決済み] Ansibleの二重中括弧のエスケープ
-
[解決済み] docker-composeで引数を渡すには?