我使用的 windows,前端使用 React 框架,后端使用 Flask 框架。
安装
官网下载网址,下载 Docker Desktop。
部署 Flask 项目
在 app.py 同级目录下创建 Dockfile 文件。
FROM python:3.9 as build
WORKDIR /app
COPY . .
RUN pip3 install -r requirements.txt
EXPOSE 5000
CMD [ "python3","app.py" ]
第一行用 FROM 命令制定一个基础镜像,省去很多软件安装配置。
WORKDIR 指定之后所有 Docker 命令的工作路径,如果路径不存在,Docker 会自动帮你创建。
COPY 将所有的程序拷贝到 Docker 镜像中。COPY <本地路径> <目标路径>
,.
代表程序根目录下的所有文件;第二个参数代表 Docker 镜像中的路径,这里的 .
代表当前的工作路径,也就是之前指定的 app 目录。
RUN 允许我们在创建镜像时运行任意的 shell 命令。
EXPOSE 设置容器对外暴露的端口号为 5000。
使用 CMD 指定当 Docker 容器运行起来以后要执行的命令。
RUN 是创建镜像的时候使用的,而 CMD 是运行容器的时候使用的。
接下来在项目终端,使用 docker build
创建一个镜像。
docker build -t flask-backend .
-t:tag/标签
指定镜像的名字
.
告诉 docker 应该在当前目录下寻找这个 Dockerfile。
第一次调用 docker build 会比较慢,因为 Docker 会下载必要的镜像文件,然后一行行运行指令,但是之后就会比较快,因为 Docker 会缓存之前的每个操作。
docker run -p 5000:5000 -d flask-backend
-p
会将容器上的某个端口映射到本地主机上,前面是主机端口,后面是容器端口号
-d
让容器在后台运行,这样容器的输出不会直接显示在控制台
删除 Docker 容器,会连带着将其中的数据也一并删除。如果想保留数据,可以使用 Docker 提供的 volume 数据卷。可以把它当做一个在本地主机和不同容器中共享的文件夹。
// 创建数据卷
docker volume create 数据卷名
// 启动 docker 并把数据挂在到指定路径下
docker run -dp 5000:5000 -v 数据卷名:/etc/finance flask-backend
将数据卷名挂载到了 /etc/finance 路径下,向这个路径写入的任何数据都会被永久地保存在这个数据卷中。
前端 Dockerfile 内容
# 基于Node
FROM node:14 as build
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
# 基于nginx
FROM nginx:latest
EXPOSE 80
COPY --from=build /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
在项目总文件夹下创建 docker.yml 文件
version: "3.8"
services:
frontend:
image: frontend
ports:
- "80:80"
backend:
image: flask-backend
ports:
- "5000:5000"
volumes:
- ./flaskBackend/static:/static
在终端运行 docker compose up
就能把两个服务都起来。
简化版命令合集
就是这几个文件都放好位置,在终端运行,先创建前后端的镜像,然后直接使用 docker.yml 一并运行起来。
// 前端项目目录下
docker build -t frontend .
// 后端项目目录下
docker build -t flask-backend .
// 总目录下
docker compose up
最终在网页中输入 http//localhost:80/
就能看到前端页面了。
如果修改了本地的文件,我目前使用的方法是重新在该项目下 build 一个新的项目,然后修改 docker.yml 中指定的镜像名,直接在终端 docker compose up
。
网友评论