gpt4 book ai didi

docker - 我想使用 docker-compose volume 指令在多个容器之间共享代码内容

转载 作者:行者123 更新时间:2023-12-02 18:15:51 30 4
gpt4 key购买 nike

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

  • 清漆容器
  • nginx 容器
  • php-fpm 容器
  • cron 容器
  • 工具容器
  • 将 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 以及工具 continer 都可以看到代码库容器内容的最新版本,并且我希望能够使用容器 6 中的 php 代码运行多个容器调用。

    我需要如何使用 v3 语法来解决这个问题?

    谢谢

    最佳答案

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

  • 大多数工作但更好的设计是将代码移动到每个图像中,可能会更改您的体系结构以仅在一个图像中包含特定的代码片段,而不是在每个图像中包含所有片段。共享代码会产生紧密的依赖关系,这非常不利于微服务设计。
  • 继续使用命名卷,但在启动一个 key 容器时对其进行初始化。不太理想(见上文),但会以最少的变化工作。要初始化它,您需要将代码添加到一个目录中的图像中,例如/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 模式的代名词。如果您尝试在 swarm 模式下执行此操作,那么您需要在可能运行容器的每个主机上运行卷同步,或者指向共享目录(例如 nfs)中的外部卷。如果不升级 swarm 模式,则无需立即切换到版本 3。

    关于docker - 我想使用 docker-compose volume 指令在多个容器之间共享代码内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44251094/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com