使用 mutagen-compose 会比多阶段 docker 构建更好吗?

发布于 2025-01-11 02:12:11 字数 847 浏览 2 评论 0原文

使用 MacOS,我有一个 docker compose,它按以下方式使用三个服务当前

services:
  service_1:
    volumes:
      - ./apps:/usr/src/app/apps
      - ./packages:/usr/src/app/packages\
    build:
      dockerfile: Dockerfile

  service_2:
    volumes:
      - ./apps:/usr/src/app/apps
      - ./packages:/usr/src/app/packages
    build:
      dockerfile: Dockerfile

  service_3:
    volumes:
      - ./apps:/usr/src/app/apps
      - ./packages:/usr/src/app/packages
    build:
      dockerfile: Dockerfile

Dockerfile:

FROM node as builder

COPY . /app

RUN yarn install

FROM node

ARG app_name

COPY --from=builder /app /app

WORKDIR /app/$app_name

RUN yarn start

在 dockerfile 中使用构建器或使用 mutagen 或 NFS 挂载之类的东西会更高效吗?我读到过有关 Yarn/NPM 安装在 MacOS 上的容器中花费的时间明显更长的信息,这导致了一些困惑:是否可以通过将我的卷更改为 nfs/mutagen 同步来增加我的用例。

Using MacOS, I have a docker compose that uses three services in the following way

services:
  service_1:
    volumes:
      - ./apps:/usr/src/app/apps
      - ./packages:/usr/src/app/packages\
    build:
      dockerfile: Dockerfile

  service_2:
    volumes:
      - ./apps:/usr/src/app/apps
      - ./packages:/usr/src/app/packages
    build:
      dockerfile: Dockerfile

  service_3:
    volumes:
      - ./apps:/usr/src/app/apps
      - ./packages:/usr/src/app/packages
    build:
      dockerfile: Dockerfile

Current Dockerfile:

FROM node as builder

COPY . /app

RUN yarn install

FROM node

ARG app_name

COPY --from=builder /app /app

WORKDIR /app/$app_name

RUN yarn start

Would it be more performant to use a builder in the dockerfile or to use something like mutagen or an NFS mount? I have read about Yarn/NPM installs taking significantly longer in containers on MacOS and this has led to some confusion about whether my use case could be increased by changing my volumes to nfs/mutagen synced.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

过潦 2025-01-18 02:12:11

Docker 的标准模型是应用程序代码内置于不可变的镜像中。通常,您不需要将代码与映像中内置的代码分开分发或注入。在上面显示的示例中,我通常希望在 Dockerfile 中看到构建器 RUN,并且不会显示您显示的单独的 volumes: 挂载。

在性能方面,非 Linux 平台上的绑定安装存在已知问题。使用 NFS 服务而不是 Docker Desktop 的本机文件系统处理程序的一些解决方法会更快一些,但不如使用本地文件系统快。使用图像中内置的代码可以完全避免这些性能问题。

services:
  service_1:
    build:
      context: .
      args:
        app_name: app1
    # but no volumes:

Docker's standard model is that the application code is built into immutable images. You shouldn't normally need to distribute or inject the code separately from what's built into an image. In the example you show above, I would normally expect to see the builder RUN in the Dockerfile, and to not have the separate volumes: mounts you show.

Performance-wise, there are known issues with bind mounts on non-Linux platforms. Some of the workarounds using an NFS service instead of Docker Desktop's native filesystem handler will be a little faster, but not as fast as using the local filesystem. Using code built into an image avoids these performance issues entirely.

services:
  service_1:
    build:
      context: .
      args:
        app_name: app1
    # but no volumes:
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文