我有一个PHP应用程序,我需要容器化。我正在设置以下内容:
容器2,3,4,5都需要访问烘焙到容器6中的相同PHP应用程序代码库。
我想通过更改代码库容器的版本标记来设置它,以便能够恢复到应用程序的先前版本。
我当前的作曲家文件类似于 - >
version "3"
services:
web:
image:nginx
links:
- phpfpm
volumes:
- code:/var/www/html
phpfpm:
image:php-fpm
links:
- db
volumes:
- code:/var/www/html
code:
build:
context: ./
dockerfile: Dockerfile
volumes:
- code:/var/www/html
volumes:
code:
driver: local
此时已创建代码卷。从容器代码复制的PHP代码被复制到卷。
这很好,因为所有新的更改都会保留到卷中,但是当我提取新版本的代码库时,我的卷将无法更新。
我想要实现的是我的nginx和cron以及工具包含者都看到了代码库容器的最新版本的内容,并且我希望能够使用该php运行几个容器调用容器6中的代码。
如何使用v3语法进行操作?
由于
答案 0 :(得分:1)
有几种方法可以解决这个问题:
最多的工作,但更好的设计是将代码移动到每个图像中,可能会改变您的架构,只在一个图像中包含特定的代码片段,而不是在每个图像中包含所有片段。共享代码会产生严重的依赖性,这与微服务设计非常相关。
继续使用指定的卷,但在启动一个密钥容器时对其进行初始化。不太理想(见上文),但最少改变。要对其进行初始化,您需要在一个目录中将代码添加到您的图像中,例如/ var / www / html-cache,在/ var / www / html中挂载卷,入口点的第一步是cp -a /var/www/html-cache/. /var/www/html/.
。
创建一个代码同步映像,可根据需要从版本控制中更新卷。这只是卷位置上的git pull
。
使用指向Docker之外代码的卷,例如主机目录甚至是nfs挂载,用于管理Docker之外的代码同步。这通常用于开发,但我不建议将其用于生产。
对我来说,docker-compose.yml的第3版与swarm模式同义。如果您尝试在群集模式下执行此操作,则需要在容器可能运行的每个主机上运行卷同步,或者指向共享目录中的外部卷(例如nfs)。如果不升级群模式,则无需立即切换到版本3.