代码之家  ›  专栏  ›  技术社区  ›  Qwertie

在docker合成之前重新编译VueJS应用程序

  •  0
  • Qwertie  · 技术社区  · 6 年前

    我想在docker nginx容器中部署vueJS应用程序,但在该容器运行之前,必须通过 npm run build 我想编译到一个容器中运行,然后退出,只留给NGIX容器的编译结果。

    每一次 docker-compose up 如果运行,则必须重新编译vueJS应用程序,因为主机操作系统上有一个.env文件,必须进行卷装入,并且可以更新其中的变量。

    我认为最理想的方法是像gitlab ci那样为docker compose创建阶段,这样就有了一个构建阶段,当构建完成时,nginx容器就开始了。但当我查到这件事时,我看不出有什么办法。

    每次编译我的vueJS应用程序的最佳方法是什么 码头工人组成 是跑步吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   hexacyanide    6 年前

    如果您已经将Vue.js应用程序构建到容器(带有Dockerfile)中,则可以使用 build 你的指令 docker-compose.yml 文件。这样,你可以使用 docker-compose build 手动创建容器,或使用 run --build 在发射前建造容器。

    例如,此合成文件使用容器生成文件而不是预先生成的映像定义服务:

    version: '3'
    services:
      vueapp:
        build: ./my_app  # There should be a Dockerfile in this directory
    

    这意味着我可以分别构建容器和运行服务:

    docker-compose build
    docker-compose up
    

    或者,我可以使用“运行前生成”选项:

    # Build containers, and recreate if necessary (build cache will be used)
    docker-compose up --build
    

    如果你的 .env 文件更改(并且容器在重新启动时不会拾取更改),您可以考虑在容器生成文件中定义它们。否则,考虑将 .env环境 文件到一个目录中(挂载目录,而不是文件,因为有些编辑器将使用交换文件并更改inode—这将中断挂载)。如果挂载目录并在目录中更改文件,则更改将反映在容器中,因为父目录的inode没有更改。

        2
  •  0
  •   Qwertie    6 年前

    最后,我得到了一个nginx容器,它从卷装载读取文件,还有一个容器,它构建应用程序并将文件放在同一卷装载中。当应用程序正在编译时,nginx读取旧版本,当编译完成时,文件将替换为新版本。