技術的には、必ずしも履歴をロールバックするわけではなく、AUFS レイヤーをロールバックするだけです。ワークフローがコンテナーをインタラクティブに変更し、変更をコミットすることで構成されている場合、docker commitこれは、後のレイヤーで適用したパッケージの更新を削除し、以前のレイヤーにインストールされたバージョンを残すという意味で、実際には履歴をロールバックします。Dockerfile からイメージを再構築する場合、これは非常に異なります。次に、ビルドした以前のバージョンに戻すことはできません。Dockerfile からステップ (レイヤー) を削除することしかできません。docker commitつまり、 の履歴をイメージ にロールバックすることしかできません。
以前のバージョンの docker イメージにロールバックするための鍵は、docker タグを以前のハッシュに向けることにあるようです。
たとえばhistory、標準ubuntu:latestイメージの を調べることを検討してください。
docker history ubuntu:latest
ショー:
IMAGE CREATED CREATED BY SIZE
ba5877dc9bec 3 weeks ago /bin/sh -c #(nop) CMD [/bin/bash] 0 B
2318d26665ef 3 weeks ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.903 kB
ebc34468f71d 3 weeks ago /bin/sh -c rm -rf /var/lib/apt/lists/* 8 B
25f11f5fb0cb 3 weeks ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB
9bad880da3d2 3 weeks ago /bin/sh -c #(nop) ADD file:de2b0b2e36953c018c 192.5 MB
511136ea3c5a 14 months ago
0 B
hash で示される画像に戻りたいとします25f。
docker tag 25f ubuntu:latest
docker history ubuntu:latest
そして、次のことがわかります。
IMAGE CREATED CREATED BY SIZE
25f11f5fb0cb 3 weeks ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB
9bad880da3d2 3 weeks ago /bin/sh -c #(nop) ADD file:de2b0b2e36953c018c 192.5 MB
511136ea3c5a 14 months ago 0 B
もちろん、ubuntu:latestローカル ライブラリで実際には最新の ubuntu にはならないため、この方法でロールバックすることはおそらくありません。必要な任意のタグを使用できることに注意してください。
docker tag 25f ubuntu:notlatest
または単にハッシュによって古いイメージを起動しました:
docker run -it 25f /bin/bash
とてもシンプルでありながらとてもきれいです。これを と組み合わせてdocker inspect、Docker FAQ が参照する各イメージのメタデータについてもう少し詳細を取得できることに注意してください。
また、docker diffとdocker commitはイメージを直接参照するのではなく、コンテナー (実行中のイメージなど) を参照するため、このプロセスとはあまり関係がないことに注意してください。つまり、イメージをインタラクティブに実行し、イメージにファイルを追加または変更すると、 を使用して (コンテナ間の) 変更を確認し、 を使用docker diff <Container-id>して変更をコミットできますdocker commit <Container id>。