Docker构建python环境 --潘登同学的Linux笔记
Docker网络管理
网络管理的作用,因为每次重启一个服务的ip地址是动态的,如mysql服务,如果重启,有可能python的web应用就访问不到; 虽然我们可以把mysql的接口映射到外网的ip地址上,但是假如我们有很多应用都想将mysql运行在3306这个端口,但是又想只用一个数据库;
那么既可以创建一个docker内部网段(172.18.0.x)
docker network create --subnet=172.18.0.0/16 mynet
docker network rm mynet
docker network -it mynet --ip 172.18.0.2 python:3.8 bash
docker network ls
创建Python容器
先在宿主机上创建一个目录,将这个目录挂载到python容器里面,以后直接将python项目拷贝进去,就能在python容器里面看见了
mkdir project
docker network -it mynet --ip 172.18.0.2 python:3.8 bash
docker run -it -d --name=flask_project -p 80:5000 -v /root/project:/root/project --net mynet --ip 172.18.0.2 python:3.8 bash
永久配置清华源
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
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项目
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下
cd proeject
tar -xvf project1.tar -C /root/project
docker exec -it flask_project bash
source flask_evn/bin/activate
cd /root/project/Users/潘登/Documents/GitHub/project1
ls

python app.pyc
nohup python app.pyc > logs.txt
能运行但是访问不到,后续解决…
采用py文件部署
上面不要只把字节码留下,把python源文件留下, 把项目中没用的东西,如.git , flask_env 等文件删掉,把源码按照上面方式打包,传到Linux中,按照相同方式
nohup python app.py > logs.txt
成功运行!!!


|