Docker构建python环境 --潘登同学的Linux笔记
Docker网络管理
网络管理的作用,因为每次重启一个服务的ip地址是动态的,如mysql服务,如果重启,有可能python的web应用就访问不到; 虽然我们可以把mysql的接口映射到外网的ip地址上,但是假如我们有很多应用都想将mysql运行在3306这个端口,但是又想只用一个数据库;
那么既可以创建一个docker内部网段(172.18.0.x)
# 斜杠16表示2^16 -2 个可分配的ip地址
docker network create --subnet=172.18.0.0/16 mynet
# (如果想删除的话)删除某个网段 注意: 先删掉网段的容器
docker network rm mynet
# 0和1的ip不能用只能用172.18.0.2往后的
docker network -it mynet --ip 172.18.0.2 python:3.8 bash
# 查看分配的ip地址
docker network ls
创建Python容器
先在宿主机上创建一个目录,将这个目录挂载到python容器里面,以后直接将python项目拷贝进去,就能在python容器里面看见了
# 创建project文件夹
mkdir project
# 创建网段
docker network -it mynet --ip 172.18.0.2 python:3.8 bash
# 创建
docker run -it -d --name=flask_project -p 9500:5000 -v /root/project:/root/project --net mynet --ip 172.18.0.2 python:3.8 bash
永久配置清华源
# 首先进入到容器中(指的是exec进去)
pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 创建虚拟环境
pip install virtualenv
virtualenv flask_evn
# 启动虚拟环境
source flask_evn/bin/activate
创建数据库容器
docker pull mysql
# -d参数后台运行mysql 可以不先创建宿主机下的目录
docker run --name my_mysql -p 4306:3306 --net mynet --ip 127.18.0.3 -v /root/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql
部署flask项目
# 把要用的全install了
pip install xxx
将数据库连接的地址修改一下,可以不写宿主机的ip地址,直接写刚才的设定的内网ip 127.18.0.3 3306即可
将代码改一下,将debug模式关掉,将app.run()中加入0.0.0.0
的参数, 启动一下项目,不需要进浏览器
然后将目录下的所有的__pycache__
字节码文件中的.pyc文件留下,可以改个名字 app.pyc
,名字只保留 前面的部分 + 后缀,替换掉__pycache__
所在的位置,总之最后就是你的项目的python代码被pyc
给替代掉了
然后用cmd将这个项目打包,然后放到Linux上
# 前者是压缩包的名字
tar -cvf C:\Users\潘登\Documents\GitHub\project1.tar C:\Users\潘登\Documents\GitHub\project1
用Xftp7 连接Linux,上传文件到project下
# 进入project目录
cd proeject
# 解压到project下
tar -xvf project1.tar -C /root/project
# 进入python容器
docker exec -it flask_project bash
# 选择虚拟环境
source flask_evn/bin/activate
# 进入目录下 (这个目录好像是与原本Windows的地址有关)
cd /root/project/Users/潘登/Documents/GitHub/project1
# 看看字节码文件
ls
# 启动项目(有点bug把itsdangerous降到2.0.1)
python app.pyc
# 但是我们想在后台跑服务
nohup python app.pyc > logs.txt
能运行但是访问不到,后续解决...
采用py文件部署
上面不要只把字节码留下,把python源文件留下, 把项目中没用的东西,如.git
, flask_env
等文件删掉,把源码按照上面方式打包,传到Linux中,按照相同方式
# 最后启动命令为
nohup python app.py > logs.txt
成功运行!!!