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