一、前言
最近做项目,结合fastapi做服务器的后端部署,用到了docker,故边学边探索。本文为项目中涉及docker的项目总结记录,以便后续查阅。
二、步骤
- dockerfile文件
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
# 拉取python3.6.2基础镜像
FROM python:3.6.2
# 设置docker工作目录
WORKDIR /data/fastapi
# 把当前目录内容复制到docker工作目录
COPY . /data/fastapi
# 构建容器时运行的命令,建立一个pip下载源,升级pip,按requirements.txt安装相关依赖
RUN apt-get update && apt install libgl1-mesa-glx -y # 这里为缺的一些包
RUN mkdir ~/.pip&& mv /data/fastapi/pip.conf ~/.pip/pip.conf && pip install --upgrade pip && pip install -r requirements.txt
# RUN while read requirement; do pip3 install $requirement; done < requirements.txt
# 在启动容器时,运行下面的命令
# CMD [ "/bin/bash"] # 可以先用这个命令检测包是否完安装依赖,后再运行程序。这可以正常运行容器,进入容器后,查看运行程序所缺的包
CMD [ "python", "view.py"] # run时启动
- docker本地测试命令流程
docker build -t style_transfer:v1.0 . # 写好Dockerfile文件后,开始构建名字为style_transfer版本为v1.0 在当前目录
docker images # 镜像查询
docker run --rm -it -p10006:10006 style_transfer:v1.0 # 映射docker端口到本地端口,运行镜像
docker save style_transfer:v1.0 > style_transfer_v1.0.tar # 导出镜像包
- 部署命令
1. 启动
## 导入镜像
(root)# docker load -i style_transfer_v1.0.tar
## docker run 运行容器fastapi
(root)# docker run -itd --restart=always --name style_transfer -p10006:10006 style_transfer:v1.0
2. 查看容器运行状态
(root)# docker ps|grep style_transfer
- 上传dockerhub,这样内外网都可以拉取镜像
1.在dockerhub网页登录账号,创建仓库
(root)# username/style_transfer # username为docker账号id
2.将要上传的文件进行标签
(root)# docker tag style_transfer:v1.0 username/style_transfer:v1.0
4. 登录dockerhub账号
(root)# docker login
5. 上传镜像
(root)# docker push username/style_transfer:v1.0
三、readme文件
说明文档
0. 部署、启动服务
工业云平台部署
- 服务器地址:10.2.20.161
1. 启动
## 导入镜像
(root)# docker load -i style_transfer_v1.0.tar
## docker run 运行容器fastapi
(root)# docker run -itd --name style_transfer -p10006:10006 style_transfer:v1.0
2. 查看容器运行状态
(root)# docker ps|grep style_transfer
1. 风格转换接口
-
接口: http://10.2.20.161:10006/style_transfer
-
请求方式: POST
-
数据类型:multipart/form-data
-
请求参数:upload_file、urlflag、style_number
请求参数说明
变量名称 类型 是否为必选 备注 upload_file mutipart/form-data upload_file和urlflag二选一 上传图片文件,支持png/jpg格式,图片最短边大于80px,最长边小于1920px urlflag mutipart/x-w-www-form-urlencode upload_file和urlflag二选一 图片的url地址,支持png/jpg格式,图片最短边大于80px,最长边小于1920px style_number mutipart/x-w-www-form-urlencode 否 “0”, “1”, “2”, “3” 这个四个参数的一种,每个参数代表不同的风格转换模型,传值为空则默认"0”模型
2.返回参数说明
-
返回形式例子
{ "code": 200, "msg": "style transfer succeed", "result_img": img_b64 }
-
返回参数
变量名称 类型 备注 code application/json 状态码 msg application/json 状态信息 result_img application/json base64编码的图片数据 -
状态码说明
状态码 响应信息 状态 101 too large image size 图片太大 102 too small image size 图片太小 200 style transfer succeed 风格转换成功 300 not found ‘upload_file’ fileds 没有图片文件 303 url request error url请求失败 304 style_number request error style_number 传入参数不符合要求
3.文件结构
.
├── checkpoint # 模型文件,共4种模型
│ ├── img_1
│ ├── scream
│ ├── star
│ └── udnie
├── dhy_logging.py # 日志文件
├── Dockerfile # dockerfile文件
├── docs.md # 文档,各程序的说明
├── evaluate_hy.py # 评估文档
├── examples # 例子
│ ├── content # 例子图片目录
│ ├── fox.mp4
│ ├── jaguar.mp4
│ ├── results # 生成的图片,以及视频
│ ├── style # 不同风格产生的图片
│ └── thumbs
├── log.md # 产生的日志文件
├── models # 模型
├── pip.conf # pip 配置
├── readme.md
├── README.md
├── re.md
├── requirements.txt # 安装环境
├── setup.sh
├── src # 资源文件
│ ├── optimize.py
│ ├── optimize.pyc
│ ├── transform.py
│ ├── utils.py
│ ├── vgg.py
│ └── vgg.pyc
├── style_app.py
├── style.py # 风格训练文件
├── transform_video.py # 视频转换文件
└── view.py # fastapi启动文件
4.其他说明,本地测试
- 流程
1.用viw.py启动程序,类似于开服务器,注意uvicorn.run设置开启的端口号,此处设置的为10006,后面需要把docker的端口号映射出去。 2.(用另外一个终端)开启test.py用来测试(注意端口号要和uvicorn.run设置开启的端口号一致)
- docker 流程命令总结
docker build -t style_transfer:v1.0 . # 写好Dockerfile文件后,开始构建名字为style_transfer版本为v1.0 在当前目录 docker images # 镜像查询 docker run --rm -it -p10006:10006 style_transfer:v1.0 # 映射docker端口到本地端口,运行镜像 docker save style_transfer:v1.0 > style_transfer_v1.0.tar # 导出镜像包
- test 测试流程
工具:postman 请求方式选择:post 数据选择