我想使用docker-compose volume directive来跨几个容器共享代码内容
我有一个需要容器化的PHP应用程序。我设置了以下内容:我想使用docker-compose volume directive来跨几个容器共享代码内容
- 容器清漆
- 容器nginx的
- 为PHP-FPM容器
- 容器的cron
- 工装容器
- 容器PHP代码出炉到
集装箱2,3,4,5都需要有权访问相同的PHP应用程序代码库被烘焙到容器6中。
我希望通过更改代码库容器的版本标记来设置它,以便能够恢复到应用程序的先前版本。
我现在的作曲家文件是一样的东西 - >
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以及工具continer都看到了代码库容器的最新版本内容,并且我希望能够使用该php代码运行几个容器调用在容器6中。
我该怎么做才能去使用v3语法?
感谢
有几种方式来处理这个问题:
大部分工作,但更好的设计是将代码移植到每个图像中,可能改变你的架构具有的某些片段只有一个图像的代码,而不是每个图像中的所有部分。共享代码会产生严重的依赖性,这非常违背微服务设计。
继续使用指定的卷,但在启动一个密钥容器时进行初始化。较不理想(见上文),但会以最小的改变工作。要初始化它,您需要将代码添加到图像中的一个目录中,例如/ 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.
也最好的检查这个答案出来了。 stackoverflow.com/q/42958573/596285 – Istvano
可能的重复:https://stackoverflow.com/q/42958573/596285 – BMitch
嗨,是的,它是或多或少是重复的 – Istvano