web-dev-qa-db-ja.com

既存のイメージに対するDockerコミット

Docker commitは、commitコマンドが発行されるたびに新しいイメージを作成します。現在実行中のコンテナーでコミットを発行し、変更を既存のイメージに保存することは可能ですか(ここでの既存のイメージは、コンテナーが生成されたイメージです)。このようにして、コミットを実行するたびに新しいイメージが作成されることはありません。

これが可能かどうか教えてください。

10
vijaygopal

名前とタグを使用すると、必要な画像が既に更新されています。コミット中は、コンテナIDの後に同じイメージの名前を付けてください。 doc から:

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS              NAMES
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            focused_hamilton

$ docker commit c3f279d17e0a  svendowideit/testimage:version3

編集:続行する前にコンテナを停止することを強くお勧めします。これにより、次の実行で陳腐化する可能性を減らすことができます。また、別のタグを使用してテストし、実際のターゲットにタグを再設定することをお勧めします。

Edit2:@MilindDeoreによって指摘されているように、これは物理的に前のイメージを上書きするのではなく、名前を再アドレス指定します。そのため、手動で削除するか、ガベージコレクションが行われるまで待機する必要があります(配置されている場合)。

12
yasc

Dockerイメージは不変であり、ドキュメントのテキストの下にあります。

Dockerイメージは読み取り専用です。 Dockerがイメージからコンテナーを実行すると、アプリケーションが実行されるイメージ(UnionFSを使用)の上に読み取り/書き込みレイヤーが追加されます。

したがって、@ hurturkによる提案は、新しい画像を作成するものであり、質問で尋ねられるものではありません。

6
Milind Deore

コンテナの変更から新しいイメージを作成するには、コマンドを1つだけ実行するだけです。ただし、その前に、コンテナを変更しましょう。

このコンテナー内では、Fedoraで通常行うことは何でも自由に行えます。この場合、Gitをインストールしてからコンテナをコミットします。リンクされている手順はCentOS 6にGitをインストールするためのものですが、このFedoraコンテナーでも機能します。

これらの手順を完了したら、終了せずにシェルから切断または切り離すことができます。エスケープシーケンスCtrl-p + Ctrl-qを使用します。

最後に、名前付きイメージへの変更をコミットします。このコマンドは、コンテナー9c09acd48a25をFedora-base-with-gitという名前のイメージに変換します。

docker commit 9c09acd48a25 Fedora-base-with-git

Dockerの設計では、「コミットは安価」という概念を使用しています。バージョン管理と同様に、イメージの履歴の中でいつでも、頻繁にコミットすることをお勧めします。

0
Code7885