2017-05-29 100 views
0

我有一个需要容器化的PHP应用程序。我设置了以下内容:我想使用docker-compose volume directive来跨几个容器共享代码内容

  1. 容器清漆
  2. 容器nginx的
  3. 为PHP-FPM容器
  4. 容器的cron
  5. 工装容器
  6. 容器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语法?

感谢

+0

可能的重复:https://stackoverflow.com/q/42958573/596285 – BMitch

+0

嗨,是的,它是或多或少是重复的 – Istvano

回答

0

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

  1. 大部分工作,但更好的设计是将代码移植到每个图像中,可能改变你的架构具有的某些片段只有一个图像的代码,而不是每个图像中的所有部分。共享代码会产生严重的依赖性,这非常违背微服务设计。

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

  3. 创建一个代码同步映像,可根据您的版本控制按需更新卷。这只是卷位置上的git pull

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

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

+0

也最好的检查这个答案出来了。 stackoverflow.com/q/42958573/596285 – Istvano