我想使用docker-compose volume directive

时间:2017-05-29 22:44:49

标签: docker docker-compose

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

  1. 清漆容器
  2. nginx的容器
  3. php-fpm的容器
  4. cron的容器
  5. 工具容器
  6. 包含PHP代码的容器
  7. 容器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语法进行操作?

    由于

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题:

  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之外的代码同步。这通常用于开发,但我不建议将其用于生产。

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