我想通过使用docker-compose volume指令来跨多个容器共享代码内容

我有一个PHP应用程序,我需要Containerize。 我正在设置以下内容:

  1. 清漆容器
  2. Nginx的容器
  3. 容器为php-fpm
  4. cron的容器
  5. 工具容器
  6. 容器用PHP代码烘焙而成

容器2,3,4,5都需要访问相同的PHP应用程序代码库,这个代码库被烘焙到容器6中。

我想这样做只需更改代码库容器的版本标签即可恢复到以前版本的应用程序。

我目前的composer 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 

此时代码量已创build。 从容器代码复制的php代码被复制到卷中。

这是很好的,因为所有新的更改都会保留到卷中,但是当我拉取新版本的代码库时,我的卷将不会更新。

我想实现的是我的nginx和cron和工具continer都看到代码库容器的最新版本的内容,以及我希望能够使用容器6中的PHP代码运行几个容器调用之一。

我该怎么做才能使用v3语法?

谢谢

有几种方法来处理这个问题:

  1. 最好的工作,但更好的devise是将代码移动到每个图像,可能会改变你的架构,只有一个图像中的代码的具体部分,而不是在每个图像中的所有部分。 共享代码会产生严重的依赖性,这与微服务devise非常相关。

  2. 继续使用指定的卷,但在启动一个密钥容器时进行初始化。 较不理想(见上文),但将工作与最小的变化。 要初始化它,你需要把代码添加到一个目录中,例如/ var / www / html-cache,将你的卷挂载到/ var / www / html中,入口点的第一步是cp -a /var/www/html-cache/. /var/www/html/. cp -a /var/www/html-cache/. /var/www/html/.

  3. 创build一个代码同步图像,从版本控制按需更新音量。 这只是在音量位置上的git pull

  4. 使用一个指向Docker之外的代码的卷,例如一个主机目录,甚至一个nfs挂载,pipe理Docker之外的代码同步。 这通常是用于开发,但我不会推荐它用于生产。

docker-compose.yml的版本3与我现在的swarm模式是同义词。 如果您尝试在群集模式下执行此操作,则需要在每个可运行容器的主机上运行卷同步,或者指向共享目录中的外部卷(例如nfs)。 在不升级群模式的情况下,不需要切换到版本3。