首页 > 编程语言 >服务器docker上部署python项目

服务器docker上部署python项目

时间:2023-05-12 13:44:24浏览次数:51  
标签:bin 容器 gunicorn python sudo conda 服务器 docker

1. docker准备python环境与项目代码

1.1 查看docker内所有镜像:

//查看正在运行的镜像
sudo docker images
//查看所有镜像
sudo docker images -a

1.2 查看docker内所有容器:

//查看正在运行的容器
sudo ducker ps 
//查看所有容器
sudo docker ps -a

1.3 docker安装anaconda镜像

sudo docker pull continuumio/anaconda3

1.4 将镜像生成容器启动

docker run --name 容器名 -idt anaconda镜像名

docker run --name test -idt continuumio/anaconda3

1.5 进入容器查看conda位置

docker exec -it 容器名 /bin/bash

docker exec -it test /bin/bash

1.6 退出容器

exit

1.7 新建annaconda的docker容器

sudo docker run --name 容器名 -idt 镜像名

sudo docker run --name dev_belt -idt continuumio/anaconda3

1.8 进入新建的docker内部:

sudo docker exec -it 容器名 /bin/bash

sudo docker exec -it dev_belt /bin/bash

1.9 查看conda位置:

conda info --envs

1.10 退出docker容器

exit

1.11 将本地环境复制到docker容器中

sudo docker cp 本地环境路径 容器名:容器内位置

sudo docker cp /media/uai901/ssd512_2/anaconda3/envs/lt dev_belt:/opt/conda/envs

1.12 将代码复制到docker容器中

sudo docker cp 本地项目位置 容器名:容器内位置

sudo docker cp /home/uai901/PycharmProjects/huayang2th_algo/huayang_2th_flask_belt dev_belt:/root/

1.13 安装vim

apt update

apt-get install vim

参考:https://www.cnblogs.com/gejuncheng/p/16425580.html

1.14 环境直接复制到docker容器中,可能会出现python路径不一致问题,修改pip pip3中开头的路径,如果使用到gunicorn,也要一并修改

pip:

vim pip

将pip中第1行改为(#!/opt/conda/envs/你的环境名/bin/python):

#!/opt/conda/envs/lt/bin/python

pip3:

vim pip3

将pip3中第1行改为(#!/opt/conda/envs/你的环境名/bin/python):

#!/opt/conda/envs/lt/bin/python

gunicorn:

vim gunicorn

将pip3中第1行改为(#!/opt/conda/envs/你的环境名/bin/python):

#!/opt/conda/envs/lt/bin/python

=========================================================

通过上述步骤,已经将所需运行内容准备完毕,接下来准备启动

=========================================================

2. 设置容器自启

2.1 在本地任意路径新建gunicorn.conf.py文件,并写入如下内容:

workers = 5
worker_class = "gevent"
bind = "0.0.0.0:5003"

0.0.0.0代表任何IP地址

2.2 将gunicorn.conf.py复制进容器内部(与main.py同级):

sudo docker cp
本地gunicorn.conf.py的路径 容器名:容器内路径

sudo docker cp /home/uai901/PycharmProjects/huayang2th_algo/huayang_2th_flask_belt/gunicorn.conf.py dev_belt:/root/huayang_2th_flask_belt

2.3 新建start.sh文件(与项目同级):

touch start.sh

2.4 编辑start.sh:

vim start.sh 

2.5 start.sh内容如下:

cd 项目路径下

gunicorn main:app -c ./gunicorn.conf.py

#!/bin/bash

cd /root/huayang_2th_flask_belt

gunicorn main:app -c ./gunicorn.conf.py

2.6 编辑开机自启文件:

vim ~/.bashrc

2.7 文件添加内容:

=================================================

注意:一定要先写conda activate 环境名,因为项目要在环境中运行,如果先运行项目,他会找不到gunicorn命令

=================================================

conda activate lt

cd /root

source start.sh

3. 将容器封装成镜像载入

将容器封装成镜像(dnmp_php58:5.8-fpm-jessie为安全带算法,dnmp_php57:5.7-fpm-jessie为漏油算法):

3.1 查看在运行容器:

sudo docker ps 
//找到 容器Id 及 CONTAINER ID ,如:38f61e7d26dc

3.2 打包容器为 image :

sudo docker commit 38f61e7d26dc  dnmp_php58:5.8-fpm-jessie

使用 docker images 会发现多出来一个image,REPOSITORY为 dnmp_php58,TAG为 5.8-fpm-jessie

3.3 保存image到文件:

sudo docker save -o 镜像压缩包名 镜像名:5.8-fpm-jessie

sudo docker save -o dnmp_php58.20230512.tar dnmp_php58:5.8-fpm-jessie

3.4 使用已保存的image文件:

sudo docker load -i dnmp_php58.20230512.tar

3.5 根据载入的镜像生成容器:

sudo docker run -it -d --name 容器名 -p 本地端口:docker端口 镜像名:5.8-fpm-jessie /bin/bash

sudo docker run -it -d --name dev_belt1 -p 5003:5003 dnmp_php58:5.8-fpm-jessie /bin/bash

3.6 进入到生成的容器内查看容器运行状态:

sudo docker exec -it dev_belt1 /bin/bash

4. 中途遇到的错误:

4.1 libGL.so.1报错:

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

运行命令解决:

apt-get update && apt-get install libgl1

注意:运行很慢,可以换镜像,我嫌麻烦,就没有换,多等了会

4.2 no NVIDIA driver报错:

RuntimeError: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx:

将代码中用显卡处理算法变为cpu处理

4.3 在docker内部运行算法报错(python main.py时报的错):

Cannot assign requested address

原因:main.py中ip地址没有设置成127.0.0.1

4.4 记得把接口/后面内容去除

因为我们要求docker内部每个算法在一个端口运行,例如:192.168.110.200:5001,不能是192.168.110.200:5001/a,所以要把接口后缀去除,这一步视情况而做

标签:bin,容器,gunicorn,python,sudo,conda,服务器,docker
From: https://www.cnblogs.com/beijie/p/17393869.html

相关文章

  • python exit用法
    exit()一般在交互式shell中退出时使用sys.exit()的退出比较优雅,调用后会引发SystemExit异常,可以捕获此异常做清理工作。一般用于在主线程中退出。os._exit()直接将python解释器退出,余下的语句不会执行,不会抛出异常。一般用于在线程中退出。......
  • 记录开发第一个Servlet时部署tomcat出现HTTP状态 500 - 内部服务器错误问题 (已解决)
    经历了漫长的deBug过程,我搜索到的文章的报错原因都不相同,希望本片文章能够帮到你,创作不易,点个赞再走吧! 我的报错: 后来发现自己编译后只产生了class文件,没有产生包,于是在dos窗口改变了编译方式: 1javac-d.*.java 这个方法使得 打包编译时自动创建包目录,不需要自己新......
  • python配置使用
    一、配置pip源为清华源pipconfigsetglobal.index-urlhttps://pypi.tuna.tsinghua.edu.cn/simple二、新建pycharm项目#Newenvironmentusing... 表示选择虚拟python环境#previouslyconfiguredinterpreter 表示可以选择本地的python环境,可再Addinterpreter中添加本......
  • oracle11 docker-compose.yml,启动时导入sql文件
    version:'3'services:oracle:image:wnameless/oracle-xe-11g-r2container_name:oracle11gr2environment:-'NLS_LANG=AMERICAN_AMERICA.AL32UTF8'volumes:-"./create.sql:/docker-entrypoint-initdb.d/......
  • 服务器上的证书有哪几种格式 答案来自chatGPT
    在Linux服务器上常见的证书格式有以下几种:PEM格式:PEM(PrivacyEnhancedMail)是基于Base64编码的密钥证书文件格式,主要用于OpenSSL的证书以及各种Web服务器,如Nginx、Apache等。PEM格式的文件一般以.pem或.crt为后缀名。DER格式:DER(DistinguishedEncodingRules)是二进制格式的密钥......
  • python基础
    13573354434函数是把实现某功能的很多语句写在一起,又起了个名字。函数input()能实现等待从键盘输入数据。a=input()等待键盘输入的数据,把输入的数据放在了箱子a中执行上句,我们输入123时,箱子a中存放字符串123a=a*2执行后,把a*2的结果放a中,a中是字符串123123函数int()能把整数......
  • python rgb位运算合成一个数
    pythonrgb位运算合成一个数在pcd中,经常会把颜色通道rgb三个值合成一个值,具体方法如下: red=255green=0blue=0rgb_color=(red<<8|green<<0|blue<<24)int_color=((((red&0xff)<<8)|(green&0xff)<<0)|(blue&a......
  • 分享Python采集88个html5代码,总有一款适合您
    分享Python采集88个html5代码,总有一款适合您Python采集的88个html5代码下载链接:https://pan.baidu.com/s/1wJzpYBlHIGtNgTisJwCQ6Q?pwd=yr96提取码:yr96imgplay-基于canvas的图片序列播放jQuery插件基于HTML5Canvas和Rebound动画的Loading加载动画特效超酷创意分段式SVG文字动画特......
  • Python菜鸟教程
    Python菜鸟教程是一份非常流行的Python编程入门教程,适合初学者学习Python编程语言。它包含了丰富的示例代码和练习,让初学者可以快速地入门Python编程。该教程包括以下内容:1.Python基础知识:介绍Python语言的基础知识,如变量、数据类型、运算符、控制流程语句等。2.Python函数:讲解Pyth......
  • python中的泛型使用TypeVar
    引入为什么需要TypeVarPEP484的作者希望借助typing模块引入类型提示,不改动语言的其它部分。通过精巧的元编程技术,让类支持[]运算不成问题。但是方括号内的T变量必须在某处定义,否则要大范围改动python解释器才能让泛型支持特殊的[]表示法。鉴于此,我们增加了typing.TypeVar构造函......