【问题标题】:How do you deliver your application using the concept of containers (Docker containers)如何使用容器(Docker 容器)的概念交付应用程序
【发布时间】:2017-05-14 03:22:51
【问题描述】:
这是一个关于使用容器交付和开发微服务的问题。
您如何使用容器的概念交付您的应用程序?我真的需要在每次构建时为我的应用程序生成一个 Docker 容器吗?甚至本地构建?
我是否需要将我的 Spring Boot 应用、Node.js 应用或其他类型的应用复制到我的 Docker 容器中?或者用我的应用程序挂载一个卷是最好的方法吗?
我是否也需要在本地环境中使用容器进行开发?或者在 Spring Boot 中,例如,最好的方法是在 Eclipse 或 Idea 等 IDE 中运行 Application.class 以在本地环境中测试我的代码?
【问题讨论】:
标签:
docker
continuous-integration
containers
development-environment
continuous-delivery
【解决方案1】:
首先,如果您想部署使用 docker 容器,您的构建系统应该生成 docker 镜像,并且您的暂存环境应该运行这些镜像。
本地发展是另一回事。有几种方法可以解决这个问题,每种方法都有自己的优缺点:
即使是本地构建,也始终构建 docker 映像。好处是您的本地测试是“真实的”,因为您正在测试与最终部署在生产中的容器相同的容器。明显的缺点是 docker build 可能很慢(即使有缓存)。
使用与生产映像相同的运行时环境构建 docker 映像,但将您的实时代码挂载到其中。有些人喜欢这种方法,因为它在花费大量时间构建图像与拥有真实的运行时环境之间取得了更好的平衡。它还有一个好处是您可以与同事共享您的环境,这样每个人都可以使用相同的运行时环境进行测试。
使用您当前的本地环境,忘记本地开发中的 docker。这是最简单的方法,如果您不需要在本地运行大量端到端测试,我认为这也是一种很好的方法。如果您在本地需要做的只是编写代码并运行一堆单元测试,并且您已经有一个单独的暂存环境来运行真实容器的端到端测试,那么在本地使用 docker 并不会增加更多价值.
简而言之,在本地运行 docker 是一种进行“真实”端到端测试的廉价方式,但它增加了复杂性,而且坦率地说不能(也不应该)取代良好的暂存设置。