我有一个运行中的docker映像正在运行我的应用程序,但是存在一个问题,每当我添加新的依赖项时,都必须重新安装所有依赖项。糟透了。我知道我可以通过将依赖项放在单独的行中来解决此问题,但这很笨拙,并且如果我想从其他位置构建,则不那么可移植。我更愿意做的是根据我现在知道的需求制作一个基础映像(特别是那些需要花费很长时间安装的映像),然后仅以此为基础构建所有新映像,这样我就可以缩短构建时间从任何机器上。那么,所有这些都说明了,从Dockerfile创建基础映像的好方法是什么,或者有更好的方法来实现我正在寻找的可移植性和快速的构建时间?
任何docker映像都是基本映像。您可以使用from tag
从存储库中构建或提取的任何图像作为基础图像。
正在进行一些工作(Docker问题332),它可以使基本映像变平以便更快地下载,但是尚不完整。只要您没有在基本映像中定义任何端口和卷,就可以使用所罗门在此问题的评论中建议的hack,即
当前,“挤压”图像的唯一方法是从中创建一个容器,将该容器导出到原始tarball中,然后将其重新导入为图像。不幸的是,这将导致所有图像元数据丢失,包括其历史记录以及端口,env,默认命令,维护者信息等。--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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句