我有一个运行我的应用程序的工作的对接映像,但是我有一个问题:每当我添加新的依赖项时,我必须重新安装我的所有依赖项。这太糟糕了。我知道我可以通过将依赖项放在不同的行上来解决这个问题,但这很笨重,如果我想从不同的位置构建,就不会像可移植的那样。我更愿意做的是用我现在所需要的需求(尤其是那些需要很长时间安装的需求)来创建一个基本映像,然后用它构建所有的新映像,这样我就可以在任何机器上拥有快速的构建时间。因此,所有这些都说明,从Dockerfile创建基本映像的好方法是什么,还是有更好的方法来完成我正在寻找的可移植性和快速构建时间?
发布于 2014-12-17 15:00:30
任何对接者图像都是基本图像。您可以使用from tag使用您已经构建或从存储库中提取的任何映像作为您的基本映像。
正在进行中的工作(码头issue332)能够更快地下载基本图像,但它还没有完成。只要您没有在基本映像中定义任何端口和卷,就可以使用所罗门在有关此问题的评论中建议的黑客,即
目前,“压缩”图像的唯一方法是从它创建一个容器,将该容器导出到原始的tarball中,并将其作为图像重新导入。不幸的是,这将导致所有图像元数据丢失,包括其历史记录,但也包括端口、env、默认命令、维护人员信息等。--所罗门海克斯
要实现这一点,您可以运行:
# Run a NOOP command that creates a container
container_id=$(docker run -d <BASE-CONTAINER> ls)
# Run export the image as a tarball
docker export $container_id > image.tar
# Import the image into a new container
cat image.tar | docker import - yourname/BASE:TAG
# Now you can use ```from yourname/BASE:TAG``` in your docker files.
# Or you can push to dockerhub with the following
# commands so you can use on other machines
docker login
docker push yourname/BASE:TAGhttps://stackoverflow.com/questions/27516900
复制相似问题