从Dockerfile创建Docker基础镜像?

4
我有一个运行我的应用程序的工作docker镜像,但是每当我添加新的依赖项时,我都必须重新安装所有的依赖项,这很糟糕。我知道我可以通过将依赖项放在单独的行上来解决这个问题,但是那样很笨重,并且如果我想从不同的位置构建,则不太便携。更好的方法是创建一个具有我现在知道我需要的要求的基础映像(特别是那些需要很长时间安装的要求),然后只需从该映像构建所有新映像,以便我可以从任何机器快速构建。因此,说了这么多,有没有一种好的方法从Dockerfile创建基础映像,或者有没有更好的方法实现我正在寻找的可移植性和快速构建时间?
1个回答

2
任何Docker镜像都是基础镜像。你可以使用from tag将任何你已构建或从存储库中拉取的镜像用作基础镜像。
目前正在进行工作(Docker issue332),以便能够压缩基础镜像以加快下载速度,但这仍未完成。只要您不在基础镜像中定义任何端口和卷,就可以使用Solomon在此问题的评论中建议的方法,即:

目前唯一压缩镜像的方法是从其中创建一个容器,将该容器导出为原始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

太好了!Solomon的技巧对我很有用。你能更新一下你的答案,告诉我如何做吗?我会接受它的。 - Eli
更新了步骤。 - Usman Ismail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接