我有一个问题,涉及将应用程序部署到基于Docker群集的生产的最佳实践。Docker Swarm - 跨主机部署带共享代码库的堆栈
我们的群包含:
- 6台服务器(不同的主机) 在每台服务器
- ,我们将有一个服务
- 每个服务将只有一个任务/副本泊坞窗运行
- Memc ached1和Memcached2使用公共图片来自搬运工毂
- “循环数据1”和“循环数据2”,从私有库使用自定义图像
- “客户端1”和“客户端2”使用自定义图像从私有库
因此最后,对于我们的示例应用程序,我们有6个docker在6个不同的服务器上运行。 2个docker是memcached,其中4个是与memcached进行通信的客户端。 “客户端1”和“客户端2”将基于某种规则将数据插入到memcached中。 “回收数据1”和“回收数据2”将根据某种规则更新或删除memcached中的数据。就那么简单。
我们与memcached通信的应用程序是自定义的,它们是由我们编写的。这些应用程序的代码驻留在github(或任何其他存储库)上。什么是这个应用程序部署到生产的最佳方式:
- 建设将包含复制的图像中的代码,你可以使用的东西部署到群
- 生成图像将使用量,其中代码的图像位于图像之外。
考虑到我第一次将swarm部署到生产环境中,我可以看到许多第一种方式的问题。将代码合并到图像中似乎对我来说不合逻辑,在99%的时间内,即将发生的更新将基于代码。这需要在每次想要更新在特定泊坞窗上运行的代码时(不管该变化多小),都需要构建映像。
方式2对我来说似乎更合乎逻辑。但在这个特定时刻,我不确定这是可能的吗?因此,有一些问题在这里:
- 是什么情况下,我们要举办,这将在后台运行同一代码的多个码头工人,最好的办法?
- docker swarm是否有可能拥有一个中央主机,服务器(管理员,任何地方),我们可以克隆我们的存储库并在Docker群中共享那些存储卷? (在我们的示例中,所有4个客户服务都会在我们托管代码的位置安装量)
- 如果可能,那么Docker-compose.yml实现是什么?
使用码头容器为您的码头容器构建代码。容器内部没有代码,只有二进制文件。 https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds 使您的图片更小,不会让您的代码对潜在的黑客开放。 – Matt
@Matt你完全有一个点。也许不那么清楚,但我指的是与上面的答案相同(将编辑)。对于坐在c,C++或类似的解决方案,显然你只需要在你的容器中编译解决方案。但是,对于很多其他(脚本化)语言(如python,php等),代码库将需要位于容器内(除非使用某种转译器) – cool
正确!如果可能的话,只将裸露的必需品放入容器中。 – Matt