gpt4 book ai didi

Docker - 在 docker-compose 3 中将一个卷从一个容器挂载到另一个(等效的 volumes_from)

转载 作者:行者123 更新时间:2023-12-02 18:20:00 27 4
gpt4 key购买 nike

我有两个容器: nginx & 角度 . 角度 容器包含代码,并在有新版本(带有瞭望塔)时自动从注册表中提取。

我在 之间设置了一个共享卷角度 & nginx 分享来自 的代码角度 nginx .

  ### Angular #########################################
angular:
image: registry.gitlab.com/***/***:staging
networks:
- frontend
- backend
volumes:
- client:/var/www/client

### NGINX Server #########################################
nginx:
image: registry.gitlab.com/***/***/***:staging
volumes:
- client:/var/www/client
depends_on:
- angular
networks:
- frontend
- backend

volumes:
client:
networks:
backend:
frontend:

当我第一次构建和运行环境时,一切正常。
问题是当有 的新版本时客户 ,拉取镜像,重新构建容器,新代码版本在 角度 容器,但在 nginx 容器它仍然是 的旧代码版本客户 .

共享卷不允许我做我想做的事,因为我们无法指定谁是主机,是否可以将卷从容器挂载到另一个?

提前致谢。

编辑

角度 容器仅用于提供文件。我们可以将构建的应用程序同步到主机上的服务器,然后将卷安装到容器(主机 -> guest ),但这会违背我们的 CI 流程: 构建应用程序 -> 构建镜像 -> 推送到注册表 -> 瞭望塔拉新形象

最佳答案

Docker 卷不打算共享代码,我建议重新考虑这个工作流程。

第一次启动具有空卷的容器时,并且只有第一次且仅当卷已经为空时,Docker 才会 populate it with contents from the container .由于卷旨在保存数据,并且应用程序可能会更改将要持久化的数据,因此如果容器重新启动,Docker 不会覆盖应用程序数据;卷目录中的任何内容都保持不变。

在您的设置中,这意味着会发生这种情况:

  • 您启动 angular容器第一次,自从 client命名卷为空,Docker 将内容复制到其中。
  • 您启动 nginx容器。
  • 您删除并重新启动 angular容器;但自从 client命名卷为空,Docker 将旧内容留在那里。
  • nginx容器仍然可以看到旧内容。

  • 对于典型的浏览器应用程序,您实际上不需要运行“程序”:一旦您运行了 Typescript/Webpack/... 序列,输出就是完全静态文件的集合。对于 Angular,有一个 Ahead-of-Time compiler生成这些静态文件。我在这里推荐的顺序是:
  • 在本地查看您的应用程序源代码树。
  • 使用面向开发人员的工具(如 ng serve)单独开发您的浏览器应用程序或 npm start .由于这一切都在本地运行,因此您不需要与任何特定于 Docker 的东西(文件系统映射、权限、端口映射......)作斗争;这是一个完全正常的 Javascript 开发序列。您需要的系统组件只是 Node;它比安装和配置 Docker 更容易。
  • 使用 Angular AOT 编译器或 Webpack 或 npm build 将应用程序编译为静态文件.
  • 将这些静态文件发布到 CDN;或将它们绑定(bind)安装到 nginx容器;或者也许将它们构建到自定义图像中。

  • 在最后一种情况下,您不会使用命名的 Docker 卷。相反,您会将本地文件系统安装到容器中。一个完整的 docker-compose.yml这种情况下的文件可能如下所示:
    version: '3'
    services:
    nginx:
    image: registry.gitlab.com/***/***/***:staging
    volumes:
    - ./client:/var/www/client
    ports:
    - '8000:80'

    关于Docker - 在 docker-compose 3 中将一个卷从一个容器挂载到另一个(等效的 volumes_from),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55649467/

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