我有一个运行我的应用程序的工作docker镜像,但我有一个问题,每当我添加新的依赖项时,我必须重新安装所有的依赖项。太糟糕了。我知道我可以通过将依赖项放在单独的行上来解决这个问题,但这很笨拙,如果我想从不同的位置构建,那就不是可移植的。我宁愿做的是制作一个基本图像,其中包含我现在需要的要求(尤其是那些需要很长时间才能安装的要求),然后只需构建所有新图像,这样我就可以快速构建从任何机器。所有这些都说,从Dockerfile创建基本映像的好方法是什么,还是有更好的方法来实现我正在寻找的可移植性和快速构建时间?
答案 0 :(得分:2)
任何泊坞窗图像都是基本图像。您可以使用from tag
将您在存储库中构建或提取的任何图像用作基本图像。
正在进行的工作(Docker issue332)能够展平基本图像以便更快下载,但尚未完成。只要您没有在基本映像中定义任何端口和卷,就可以使用Solomon在此问题的评论中建议的hack,即
目前,“挤压”图像的唯一方法是从中创建容器,将该容器导出到原始tarball中,然后将其重新导入为图像。不幸的是,这将导致所有图像元数据丢失,包括其历史记录以及端口,环境,默认命令,维护者信息等。 - Solomon Hykes
要实现这一目标,您可以运行:
# 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:TAG