如果每天部署5-10次,那么每次部署时完全重建和推送docker镜像是否真的很实用?
我承认CircleCI的Continuous Integration and Delivery with Docker中提到的好处,即:
Note that Elastic Beanstalk also allows you to deploy a Dockerfile and associated source code instead of a built image, but pre-building the image on CircleCI and running some form of verification on it allows your deployments to be more deterministic because you remove the build environment as a variable that differs between test and production.
但是,一旦包含所有依赖项和源代码,我们完全构建的webapp映像接近1GB.我只是看不到如何部署高达200GB /月(即每天10次提交,持续部署)是多么实际,而实际上99%的构建之间没有变化.也就是说它可能只是1k的HTML,JS或CSS被改为添加功能.我更喜欢这样一种方法,其中docker镜像包含很少更改的软件,其余的作为捆绑包的一部分被压缩.这仍然会产生一个自包含的部署文件(没有需要下载的其他依赖项),但会大大减少构建时间和带宽.
最佳答案 当前接受的方法是在机器映像中包含具有依赖关系,操作系统等的基本Docker镜像.将Docker镜像用作Dockerfile中的FROM行.这将利用Docker的图像层并仅下载差异.
您可能仍希望在子Dockerfile中安装依赖项,因为它们会随着时间的推移而发生变化,但尝试将大部分依赖项保留在基本映像中,以便下载更少.