如何创建现有 docker 图片的副本

How to create a copy of exisiting docker image

我尝试使用 docker 有一段时间了,这些是我下载的 docker 图片。

debian                 latest    8c00acfb0175        2 weeks ago         125.2 MB
sameersbn/postgresql   latest    1da0f78d061e        3 weeks ago         231.6 MB
ubuntu                 latest    91e54dfb1179        5 weeks ago         188.4 MB
docker/whalesay        latest    fb434121fc77        4 months ago        247 MB
sameersbn/postgresql   9.4       271ad7e099d3        7 months ago        228.2 MB

我如何在本地拥有 debian 或 ubuntu 的基础映像,并在它们之上构建一些测试映像而不干扰基础映像,这样我就不必下载基础 docker 图像,我可以多次使用新下载的图像?

只需编写一个以以下开头的 Dockerfile:

FROM debian:latest
...

(使用 FROM directive

这会创建一个基于debian的本地镜像,由于debian已经下载了,所以不会再下载了。

注意:最好避开"latest"标签:见“Docker: The latest Confusion" by Stack Overflow contributor Adrian Mouat.
使用实际标签更精确:

docker拉debian:7.8 docker拉debian:wheezy

If wanted to do something in ubuntu is there a way when: I just execute command docker copy "image_name" and then do whatever I want to (run image, clone some git repo, install some packages, test it) , and then just delete it docker rmi "image_name" (when I'm done with image) .

是的:你可以 docker run --it <image> bash(来自包含 bash 的图像),然后退出 bash:你的容器将退出:然后你可以 docker commit <containerrid> newimage,然后您将获得原始图像的副本。

您使用命令“docker images”列出的图像可以重复使用。您可以通过以下 2 种方式扩展或重新使用基本映像而无需再次下载它。

1。使用 Docker 文件,link

在 Docker 文件中,您可以将指令“FROM REPOSITORY_NAME:TAG_NAME”作为第一行,以重新使用已下载的基本映像

FROM REPOSITORY_NAME:TAG_NAME

在“docker images”命令输出中,第一列给出了 REPOSITORY 名称,第二列给出了 TAG 名称。

您可以在 Docker 文件中进一步添加更多指令并构建它。

2。使用 Docker 提交功能(不像 Docker 文件方法那么简单)

一个。从基础镜像启动容器

b。登录容器,根据需要对容器进行更改,例如安装其他 rpm 等。

c。提交在基础映像上创建的新映像的结果。

docker commit -m "installed wireshark" -a "admin" "container-id" "your_repository_name"/"user_name":"New_TAG"

d。 运行 "docker images" 命令,你可以看到新的图像(这是在现有的、已经下载的图像之上准备的)