docker - 在 docker-compose up 之前重新编译 VueJS 应用程序
问题描述
我想在 docker nginx 容器中部署 vueJS 应用程序,但在该容器运行之前,vueJS 源必须通过npm run build
我想编译以在容器中运行然后退出,只为 nginx 容器留下编译结果。
每次docker-compose up
运行时,都必须重新编译 vueJS 应用程序,因为主机操作系统上有一个 .env 文件必须进行卷挂载,并且可以更新此处的变量。
我认为理想的方法是像在 gitlab ci 中那样为 docker compose 创建阶段,这样就会有一个构建阶段,当它完成时,nginx 容器就会启动。但是当我查看这个时,我看不到这样做的方法。
每次docker-compose up
运行时编译我的 vueJS 应用程序的最佳方法是什么?
解决方案
如果您已经将 Vue.js 应用程序构建到容器中(使用 Dockerfile),则可以使用文件中的build
指令docker-compose.yml
。这样,您可以docker-compose build
手动创建容器,或run --build
在容器启动之前构建容器。
例如,这个 Compose 文件使用容器构建文件而不是预构建的镜像来定义服务:
version: '3'
services:
vueapp:
build: ./my_app # There should be a Dockerfile in this directory
这意味着我可以分别构建容器和运行服务:
docker-compose build
docker-compose up
或者,我可以使用 build-before-run 选项:
# Build containers, and recreate if necessary (build cache will be used)
docker-compose up --build
如果您的.env
文件发生更改(并且容器在重新启动时不会接收更改),您可能会考虑在容器构建文件中定义它们。否则,请考虑将.env
文件放入目录(并挂载目录,而不是文件,因为某些编辑器将使用交换文件并更改 inode - 这会破坏挂载)。如果挂载目录并更改目录中的文件,更改将反映在容器中,因为父目录的 inode 没有更改。
推荐阅读
- tfs - 如何在 TFS 2018 中查找 queryGuid
- tsql - 如何从 DB2 IBM 导出结果 SQL
- excel - 仅当它们与查找中的类别 ID 匹配时,如何在 excel 中对值求和
- node.js - 无法读取未定义的属性“ClientSession”
- arrays - 使用 groovy 将 xml 数据排序到数组中
- c - 如何使用 lwip 将数据包从 stm32f4、192.xxx 发送到 10.xxx
- javascript - Array.filter 没有返回预期的输出
- r - 在 R 中查找 2 个数据集之间的公共部分字符串
- tensorflow - 使用图像字幕的预训练检查点以零概率获取一个单词作为字幕-im2txt
- mysql - MySQL考勤计算