使用docker-compose的卷指令,我希望能够在多个容器之间共享代码内容。

3
我有一个需要容器化的PHP应用程序。我正在设置以下内容:
  1. varnish容器
  2. nginx容器
  3. php-fpm容器
  4. cron容器
  5. 工具容器
  6. 包含PHP代码的容器
容器2、3、4和5都需要访问嵌入到容器6中的同一PHP应用程序代码库。
我希望通过更改代码库容器的版本标签,能够将应用程序回滚到先前的版本。
我的当前composer文件类似于 ->
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和工具容器都可以看到代码库容器的最新内容,并且我还想能够运行使用容器6中的php代码的多个容器调用。

使用v3语法,我需要怎么做呢?

谢谢。


可能是重复问题:https://dev59.com/Z6Dia4cB1Zd3GeqPAT38 - BMitch
嗨,是的,它多多少少是一个重复。 - Istvano
1个回答

4
有几种处理方法:
  1. 工作量最大但设计更好的方法是将代码移入每个镜像中,可能需要改变你的架构,只在一个镜像中具有特定代码段,而不是所有镜像都有。共享代码会创建一个紧密依赖,这与微服务设计非常相反。

  2. 继续使用命名卷,但在启动一个关键容器时初始化它。不太理想(见上文),但需要的更改最小。要进行初始化,您需要在一个目录中为您的图像添加代码,例如/var/www/html-cache,在/var/www/html中挂载您的卷,entrypoint 的第一步将是 cp -a /var/www/html-cache/. /var/www/html/.

  3. 创建一个代码同步镜像,根据需要从版本控制更新卷。这只是在卷位置上执行git pull

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

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

还可以最好检查一下这个答案。stackoverflow.com/q/42958573/596285 - Istvano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接