用于Flask + VueJs项目的Docker多阶段

时间:2019-08-16 17:19:18

标签: python docker vue.js flask docker-compose

我有一个项目,其中Flask作为后端,而VueJS作为前端。希望将所有内容放入将在生产服务器上运行的容器中。

我需要安装所有依赖项(npm install并从vue(npm run build)构建我的静态文件,以获取 dist 文件夹(包含HTML文件和资产),然后构建Flask项目:安装python,依赖项并在gunicorn上运行服务器。之后,将我的 dist 文件夹复制到Flask目录。

我了解了多阶段并尝试将其组合在一起,这是我的Dockerfile代码:

FROM python:3.7-alpine as backend-builder
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt

FROM node:lts-alpine as build-stage
RUN cd ..
RUN ls
RUN mkdir /frontend
WORKDIR /frontend
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM busybox
COPY --from=build-stage /frontend/dist /app/dist
RUN ls

正在执行,但请勿将 dist 复制到Flask目录

我的项目结构是:

project_folder
 - app (python + flask files)
   -- app.py
   -- wsgi.py
   -- requirements.txt
   -- etc
 - frontend (vuejs files, packages)
   -- public
   -- src
   -- package.json
   -- etc
 - Dockerfile

我做错了什么?如何编写Dockerfile,解决我的问题?

1 个答案:

答案 0 :(得分:0)

FROM busybox行创建了一个新图像,它没有引用python图像。只需在构建python之前先构建js,以便在python构建完成后就可以复制文件。

FROM node:lts-alpine as build-stage
RUN cd ..
RUN ls
RUN mkdir /frontend
WORKDIR /frontend
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM python:3.7-alpine as backend-builder
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
COPY --from=build-stage /frontend/dist /app/dist