【问题标题】:How to create a copy of exisiting docker image如何创建现有 docker 映像的副本
【发布时间】:2015-09-27 04:40:50
【问题描述】:

我一直在尝试使用 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 镜像,我可以使用新鲜的多次下载图片?

【问题讨论】:

    标签: ubuntu docker debian dockerfile


    【解决方案1】:

    只需编写一个 Dockerfile 开头:

    FROM debian:latest
    ...
    

    (使用FROM directive

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

    注意:最好避免使用“最新”标签:请参阅 Stack Overflow 贡献者 Adrian Mouat 的“Docker: The latest Confusion”。
    使用实际标签更准确:

    docker pull debian:7.8 docker pull debian:wheezy

    如果想在 ubuntu 中做某事,有一种方法:我只需执行命令 docker copy "image_name",然后做任何我想做的事情(运行映像,克隆一些 git repo,安装一些包,测试它),然后就删除它docker rmi "image_name"(当我完成图像时)。

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

    【讨论】:

    • 感谢您的回答,它可以满足我的需求。只是一个小问题,有没有像 'docker copy ' image-name' 这样的命令,我们可以开始处理该图像?
    • @proton1h1 “开始工作”,你的意思是运行它吗?或者添加新指令(在这种情况下,这就是 Dockerfile 的用途)
    • 是的,Dockerfile 会做我想做的事,但以防万一:如果想在 ubuntu 中做某事,有没有办法:我只是执行命令 docker copy "image_name",然后做任何我想做的事(运行镜像,克隆一些 git repo,安装一些包,测试它),然后删除它docker rmi "image_name"(当我完成镜像时)。 Dockerfile 会为我做同样的事情,这是个好方法,但是有没有这样的命令?
    • 图像上没有像“docker copy”这样的命令可以允许将一个图像复制到另一个图像。您可以使用 docker save 和 export 功能,当您想在不同的 Docker 主机中使用保存的 docker 映像时,这很有帮助。另一种方法是将“Dockefile”逻辑(例如“FROM ubuntu:14.04”)包装在 shell 脚本中,该脚本将构建基本映像的副本。
    • @proton1h1 您可以尝试使用 docker commit:查看我编辑的答案。
    【解决方案2】:

    您使用“docker images”命令列出的图像可以重复使用。这里有 2 种方法可以扩展或重复使用基础映像,而无需再次下载。

    1。使用 Dockerfile,link

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

    FROM REPOSITORY_NAME:TAG_NAME
    

    在“docker images”命令输出中,第 1 列给出 REPOSITORY 名称,第 2 列给出 TAG 名称。

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

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

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

    b.登录到容器,根据需要对容器进行更改,例如安装额外的 rpm 等。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多