UPDATED我特别感兴趣的是我如何运行或回滚到一个特定版本的(二进制)图像从docker,并试图澄清这个问题.
Docker includes git-like capabilities for tracking successive versions of a container,inspecting the diff between versions,committing new versions,rolling back etc. The history also includes how a container was assembled and by whom,so you get full traceability from the production server all the way back to the upstream developer.
Google可能没有找到没有“回滚”到早期的容器,检查差异等的示例(显然,我可以为版本管理的Dockerfiles做这些事情,但二进制Docker映像/容器即使在由于更新的软件来源,Dockerfile并没有,我正在寻找一种在这些更改之间查看和回滚的方法).
一个基本的例子:想象我跑
docker build -t myimage .
在更新基础ubuntu的Docker文件上:
FROM ubuntu:14:04
RUN apt-get update -q && apt-get upgrade -y
如果我在几天之后建立相同的图像,那么我怎么能区分这些图像来查看哪些软件包已被升级?稍后重新运行相同的构建命令后,如何回滚到早期版本的映像?
看来,回滚到早期版本的码头图像的关键是简单地将docker标签指向较早的散列.
例如,考虑检查标准ubuntu的历史:最新图像:
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
想象一下,我们想回到哈夫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:最新的不是我们本地库中最新的ubuntu.请注意,我们可以使用我们想要的任何标签,例如
docker tag 25f ubuntu:notlatest
或者通过哈希简单地启动旧的图像:
docker run -it 25f /bin/bash
那么简单而又整洁请注意,我们可以将其与docker检查结合起来,以获得关于Docker FAQ引用的每个图像的元数据的更多细节.
还要注意,docker diff和docker提交与此进程无关,因为它们是指容器(例如运行图像),而不直接映射到图像.也就是说,如果我们以交互方式运行图像,然后添加或更改图像上的文件,我们可以使用docker diff< Container-id>看到更改(容器之间)并使用docker commit< Container id> ;.提交更改.