tiangolo/uvicorn-gunicorn:python3.8 fastapi docker部署

运行命令和生成镜像命令

[redis V2.0]  使用官方镜像直接运行
docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-redis -p 6379:6379 --privileged=true 
-v /yunhuoV2/redis/redis.conf:/etc/redis/redis.conf -v /yunhuoV2/redis/data:/data 
redis:6.0 redis-server /etc/redis/redis.conf --requirepass "123456"

[fastapi V2.0]
docker build -f fastapi_dockerfile_v2 -t xy-fastapi:2.0 .

docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-fastapi -p 9001:9001 
-v /yunhuoV2/fastapi/code:/code -v /yunsuoV2/fastapi/code/logs:/code/logs 
xy-fastapi:2.0 /bin/bash

docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-fastapi -p 9001:9001 
-v /yunhuoV2/fastapi/code:/code -v /yunsuoV2/fastapi/code/logs:/code/logs 
xy-fastapi:2.0 /bin/bash 
-c "gunicorn main:app -k uvicorn.workers.UvicornWorker -c gunicorn.conf.py"

 

 

docker部署全过程:

一、生成requirements.txt文件

1、使用虚拟环境venv,项目能在pycharm中正常运行,全部依赖包正常;

2、命令:pip freeze > requirements.txt

作用范围:pip的freeze命令保存了保存当前Python环境下所有类库包,包括那些你没有在当前项目中使用的类库。

二、dockfile文件如下:

 

 

FROM tiangolo/uvicorn-gunicorn:python3.8

WORKDIR /code

COPY ./fastapi/code/requirements.txt /code/requirements.txt
RUN python -m pip install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple/
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt  
-i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple/

COPY ./fastapi/code /code
 
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "9001"] 

 

三、生成镜像命令: (docker build -f fastapi_dockerfile_v2 -t xy-fastapi:2.0 .)

四、运行容器命令:

docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-fastapi -p 9001:9001 
-v /yunhuoV2/fastapi/code:/code -v /yunsuoV2/fastapi/code/logs:/code/logs 
xy-fastapi:2.0 /bin/bash

五、进入容器命令:docker exec -it e1cd43c4f0a5 /bin/bash

六、在容器中运行:gunicorn main:app -k uvicorn.workers.UvicornWorker -c gunicorn.conf.py

七、查看运行错误log文件:(如果启动不成功会有error提示)

      gunicorn_error.log    目录/code/logs

八、查看正常运行log文件:

      gunicorn_accesslog.log、uvicorn_2022-08-31.log     目录/code/logs

 

 

最大教训:

1、尽量使用虚拟环境venv,保证一个项目单独的包文件;

2、在项目目录下运行下列命令生成包需求文件,只能用这个方法,生成的包文件准确,其他方法不行的。 

方法一:整个环境下的安装包都保存到requirements.txt中

pip freeze > requirements.txt
作用范围:pip的freeze命令保存了保存当前Python环境下所有类库包,包括那些你没有在当前项目中使用的类库。

(如果你没有的virtualenv)

常用docker命令

 
进入容器:docker exec -it a6fe8d12febc /bin/bash
查看容器:docker ps -a
查看日志:docker logs c7ffe3c212c2
查看镜像:docker images
删除容器:docker rm 60a643861c76
删除镜像:docker rmi 60a643861c76
运行容器:docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-fastapi -p 9001:9001 
-v /yunhuoV2/fastapi/code:/app xy-fastapi:2.0 /bin/bash
运行容器:docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-fastapi -p 9001:9001 
-v /yunhuoV2/fastapi/code:/app xy-fastapi:2.0 /bin/bash 
-c "gunicorn main:app -k uvicorn.workers.UvicornWorker -c gunicorn.conf.py"
拷贝文件:docker cp dos.sh e1cd43c4f0a5:/code
生成镜像:docker build -f fastapi_dockerfile_v1 -t xy-fastapi:2.0 .

 

 

 

经验教训:

1、gunicorn log文件固定放置在容器中目录:/code/logs ,所以这个目录必需映射出来;

2、按照fastapi官方建议,uvicorn运行目录:/app ,所以这个目录要映射到代码目录;

3、通过查找目录(/code/logs )中gunicorn错误信息和(/app/logs)中uvicorn的logger错误信息,就可以定位docker部署的问题所在。

4、通过命令(docker exec -it a6fe8d12febc /bin/bash),进入容器中查看目录/code/logs下错误信息,在容器不能正常启动时,错误信息会无法同步出来主机中。

5、完全版run命令会无法启动docker:

>>>>>docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-fastapi -p 9001:9001 -v /yunhuoV2/fastapi/code:/app xy-fastapi:2.0 /bin/bash -c "gunicorn main:app -k uvicorn.workers.UvicornWorker -c gunicorn.conf.py"

先运行简化版启动docker,就可以进入容器:

>>>>>docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-fastapi -p 9001:9001 -v /yunhuoV2/fastapi/code:/app xy-fastapi:2.0 /bin/bash

进入容器后进行命令,然后进去logs目录查看错误信息:

>>>>>gunicorn main:app -k uvicorn.workers.UvicornWorker -c gunicorn.conf.py

6、常用命令:

进入容器:docker exec -it a6fe8d12febc /bin/bash
查看容器:docker ps -a
查看日志:docker logs c7ffe3c212c2
查看镜像:docker images
删除容器:docker rm 60a643861c76
删除镜像:docker rmi 60a643861c76
运行容器:docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-fastapi -p 9001:9001 -v /yunhuoV2/fastapi/code:/app xy-fastapi:2.0 /bin/bash
运行容器:docker run -itd -e TZ="Asia/Shanghai" --restart=always --name V2-fastapi -p 9001:9001 -v /yunhuoV2/fastapi/code:/app xy-fastapi:2.0 /bin/bash -c "gunicorn main:app -k uvicorn.workers.UvicornWorker -c gunicorn.conf.py"

 

 

 

posted @ 2022-08-29 12:36  pearlcity  阅读(942)  评论(1编辑  收藏  举报