如何与docker compose在容器之间共享构建阶段准备好的文件



我有两个服务:nginxweb

当我构建web图像时,我通过命令npm install && npm run build构建前端

但我需要在两个容器中准备好文件:在webnginx中。

如何在容器(图像(之间共享文件?我不能简单地使用卷,因为它们只能在运行时装入。

DockerfileCOPY指令可以从任意映像中复制文件。虽然它最常用于多阶段构建,但您可以将它与任何图像一起使用,即使是您自己构建的图像。

假设你的docker-compose.yml文件看起来像:

version: '3.8'
services:
web:
build: .
image: my/web
nginx:
build:
context: .
dockerfile: Dockerfile.nginx
ports: [8000:80]

请注意,我们已经明确地为web映像指定了一个名称;还要注意,在这个设置中没有CCD_ 10。

在代理映像中,我们可以从该映像中复制文件:

# Dockerfile.nginx
FROM nginx
COPY --from=my/web /app/static /usr/share/nginx/html

这里唯一复杂的是Compose不知道一个图像是由另一个图像构建的。您可能需要手动告诉它重新生成应用程序映像,以便它在代理映像之前生成。

docker-compose build web
docker-compose build
docker-compose up -d

您可以在更面向生产的设置中使用它来部署此应用程序,而无需直接使用代码。您可以创建一个基本docker-compose.yml,为两个容器命名一个image:,然后添加一个单独的具有build:块的docker-compose.override.yml文件。在运行两次docker-compose build之后,您可以docker-compose push构建的映像,然后在您的生产系统上运行这个容器堆栈,从注册表中获取映像;没有源树的本地副本,也没有卷。

最新更新