我有两个服务:nginx
和web
当我构建web
图像时,我通过命令npm install && npm run build
构建前端
但我需要在两个容器中准备好文件:在web
和nginx
中。
如何在容器(图像(之间共享文件?我不能简单地使用卷,因为它们只能在运行时装入。
COPY
指令可以从任意映像中复制文件。虽然它最常用于多阶段构建,但您可以将它与任何图像一起使用,即使是您自己构建的图像。
假设你的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
构建的映像,然后在您的生产系统上运行这个容器堆栈,从注册表中获取映像;没有源树的本地副本,也没有卷。