CI/CD 中的 Docker 图像仅对多主机有用吗?
Is Docker images in CI/CD only useful for multi host?
我们两个人在 Docker 开发一个主机应用程序,我们希望减少一些测试时间并使用 CI/CD。
许多文章都是关于使用付费服务进行 运行 测试和构建 Docker 图像,然后部署图像。
在多主机环境中我可以看到部署镜像的优势,但是单主机呢?
在单台主机的情况下,部署映像只是增加了一层复杂性吗?
更新
我们现在做的是推送修改到Git,然后手动测试app,如果没问题,然后合并到master,然后登录到生产服务器做git pull && docker-compose build
.
当我在问题中谈到部署 Docker 图像时,在生产环境中部署几乎就是 docker pull
。关键区别在于 docker 图像不是在生产服务器上构建的,而是在其他地方构建的。
我问的就是这个。当仅部署在单个 host/machine/server/node 上时,在其他地方构建图像是否有任何优势?
我正在回答已经更新的问题:
在其他地方构建图像是否有任何优势 <...>?
是的,有一些。
- 您不必更新生产服务器上的构建工具;事实上,你根本不需要它们。这减少了 dev/QA/prod 环境之间可能的版本不匹配的可能性,减少了在您的服务器上发现一些 0-day 漏洞的可能性等。一般来说,生产服务器上的附加软件越少越好。
- 使用已经构建好的容器,您可以立即看到许多选项:
- 动态可伸缩性。一旦你发现你有大量的用户,你所要做的就是增加新的 VM 并在那里拉容器。或者甚至在同一主机上启动另一个容器并平衡它们。
- 修补程序部署。在重负载下可能会出现一些错误。当您尝试同时为大量用户提供服务时,生产服务器可能会资源不足 并且 构建新的错误修复容器。
- 灾难恢复。万一你的生产主机突然死了,你所要做的就是 运行 docker 容器到其他任何地方。在这种情况下,您可能会遇到未优化的环境,但至少您不必就 N-hours 停机时间向用户写解释 e-mail。
我可以跟上,但总而言之:这完全取决于你有多少用户,你打算如何随着时间的推移增长,你有多少资源以及需要构建多少资源,有多宽容你要停机等。当然,你可以在生产服务器上构建容器并将其上传到 docker 存储库并快乐地生活,以防这是一个小型 non-critical 内部门户。但如果你是某种社交网络初创公司,你最好开始分离环境并制定各种关于可扩展性和恢复的计划。在单独的服务器上构建应用程序是此类计划的重要组成部分。
我们两个人在 Docker 开发一个主机应用程序,我们希望减少一些测试时间并使用 CI/CD。
许多文章都是关于使用付费服务进行 运行 测试和构建 Docker 图像,然后部署图像。
在多主机环境中我可以看到部署镜像的优势,但是单主机呢?
在单台主机的情况下,部署映像只是增加了一层复杂性吗?
更新
我们现在做的是推送修改到Git,然后手动测试app,如果没问题,然后合并到master,然后登录到生产服务器做git pull && docker-compose build
.
当我在问题中谈到部署 Docker 图像时,在生产环境中部署几乎就是 docker pull
。关键区别在于 docker 图像不是在生产服务器上构建的,而是在其他地方构建的。
我问的就是这个。当仅部署在单个 host/machine/server/node 上时,在其他地方构建图像是否有任何优势?
我正在回答已经更新的问题:
在其他地方构建图像是否有任何优势 <...>?
是的,有一些。
- 您不必更新生产服务器上的构建工具;事实上,你根本不需要它们。这减少了 dev/QA/prod 环境之间可能的版本不匹配的可能性,减少了在您的服务器上发现一些 0-day 漏洞的可能性等。一般来说,生产服务器上的附加软件越少越好。
- 使用已经构建好的容器,您可以立即看到许多选项:
- 动态可伸缩性。一旦你发现你有大量的用户,你所要做的就是增加新的 VM 并在那里拉容器。或者甚至在同一主机上启动另一个容器并平衡它们。
- 修补程序部署。在重负载下可能会出现一些错误。当您尝试同时为大量用户提供服务时,生产服务器可能会资源不足 并且 构建新的错误修复容器。
- 灾难恢复。万一你的生产主机突然死了,你所要做的就是 运行 docker 容器到其他任何地方。在这种情况下,您可能会遇到未优化的环境,但至少您不必就 N-hours 停机时间向用户写解释 e-mail。
我可以跟上,但总而言之:这完全取决于你有多少用户,你打算如何随着时间的推移增长,你有多少资源以及需要构建多少资源,有多宽容你要停机等。当然,你可以在生产服务器上构建容器并将其上传到 docker 存储库并快乐地生活,以防这是一个小型 non-critical 内部门户。但如果你是某种社交网络初创公司,你最好开始分离环境并制定各种关于可扩展性和恢复的计划。在单独的服务器上构建应用程序是此类计划的重要组成部分。