linux中使用docker创建容器镜像并部署python项目

记录下在Linux CentOS7.6系统中如何布署python项目的步骤

1,登录到服务器(ssh root@127.***.*.*)

2,修改CentOS中的selinux安全服务程序,它在/ect/selinux/config目录下,

修改它的SELINUX=disabled属性

cd / 进入根目录

vi /ect/selinux/config
i
SELINUX=disabled
esc
:w
:q
reboot #重启生效

 

3,安装Docker服务

yum install docker -y #-y表示默认安装
service docker start
service docker stop
service docker restart #重启

 

 

service docker start 启动docker服务

  

 4,在docker上安装python镜像

https://hub.docker.com/

安装镜像先需要安装DaoCloud加速器

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
vi /etc/docker/daemon.json
#修改/etc/docker/daemon.json文件,去掉结尾的逗号
I
:w
:q
service docker restart #重启docker服务
docker restart my_sql #重启docker会导致容器也停止服务。要使用该命令重启容器

 

docker pull python:3.9.6 安装python镜像

docker images 查看docker中安装的所有镜像

docker inspect python:3.9.6

注意:因为要按i键使vim编辑器进入可编辑状态,如果多按了,会不小心在文件头输入一个i,这会导致后续启动和重启docker服务失败,执行安装python镜像也会报错

 

这个亏吃大了!!!

 

修改文件后,终于成功了。。

 

 

 


 

 



 

如果python版本安装错了,可以执行docker rmi python:3.9.6来删除,再重新安装

 

5,使用docker创建python环境容器

创建一个完整的容器需要它具有固定IP,端口映射和目录挂载

以下子目录是让我们理解如何对窗口进行设定固定IP,端口映射和目录挂载

 

#(1),创建固定网段
docker network create --subnet=172.18.0.0/16 mynet
# 创建一个名称为mynet的网段,它有16个网络地址
docker network ls
# 查看docker中的网段

 docker network inspect mynet

 # 查看mynet网段中分配有哪些容器


#(2),创建目录
cd root 
mkdir project
#(3),创建一个在后台运行的python容器 参数:-d docker run -it -d --name=py_admin -p 9500:5000 -v /root/project:/root/project --net mynet --ip 172.18.0.2 python:3.9.6 bash docker ps -a docker exec -it py_admin bash exit docker ps -a #(4)对容器的pip命令添加国内加速器以提高安装python插件速度(以下是清华大学加速器) pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple

 

 

 

5.1, 创建容器

docker run -it --name=p1 python:3.9.6 bash #在docker中创建一个名称为p1的python3.9.6的窗口以bash命令运行
python --version
exit #退出容器,但容器会停止运行
docker ps -a #查看docker下容器的运行情况 
docker start p1 #启动p1容器,再次执行查看命令会发现p1容器已经在运行了
docker pause p1 #暂停p1容器
docker unpause p1 #恢复p1容器运行
docker exec -it p1 bash #进入已存在且在运行的p1容器并运行bash命令
exit #退出容器,容器不会停止运行

 

p1容器中的ip地址是动态的,外部网络无法访问,且目录没有挂载,容易丢失文件数据,所以这样创建的容器不是我们要使用的容器

 

5.2,docker网络

为docker容器创建内部网段【分配固定IP】

docker network create --subnet=172.18.0.0/16 mynet
# 创建一个名称为mynet的网段,它有16个网络地址
docker network ls
# 查看docker中的网段
docker network rm mynet
# 删除网段(先删除与这个网段有关联的容器)
docker run -it --name=p1 --net mynet --ip 172.18.0.2 python:3.9.6 bash
# 创建一个名称为p1使用mynet网段中172.18.0.2的IP的python容器
ip addr 
# 查看容器地址

5.3,docker容器端口映射

docker run -it -p 9500:5000 --name=p1 python:3.9.6 bash
# 创建一个名称为p1端口映射到主机上的python容器
exit
docker ps -a
docker start p1
docker ps -a
docker stop p1
docker rm p1

5.4,docker目录挂载

docker run -it -v /root/test:/root/project python:3.9.6 bash
#将宿主机/root/test目录挂载到python容器的/root/project上

cd /
cd root
mkdir test
cd test 
touch 1.text
ls
docker run -it -v /root/test:root/test --name=p1 python:3.9.6 bash
# 创建一个名称为p1的python容器,并将宿主机上的/root/test目录挂载到窗口上
cd /root/test
ls
touch 2.txt
exit ls
docker rm p1
cd ../
rm -rf test

# 容器挂载目录中创建的文件可以显示宿主机上,也可以显示宿主机的文件
# 同样宿主机目录中也可以看到容器中的文件,它们是双向的
# 因这样创建的只有挂载目录的容器不是我们要使用的,所以需要将它删掉,最后宿主机上的text目录和下面的文件也可以删除掉

 

6,使用docker安装mysql容器

docker pull mysql:8.0.30
#
安装指定版本mysql镜像 # docker pull mysql
cd root 
mkdir mysql
# 安装最新版本
docker run --name collect_info -p 4306:3306 --net mynet --ip 127.18.0.3 -v /root/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=**密码** -d mysql:8.0.30

# 在本地使用nevcate连接这个数据库
# 地址:云主机ip
# 端口:4306

 创建mysql容器时分配已经创建好的网段固定IP一直报错,目前还没有发现什么原因,只能先不分配IP了,这就会导致如果docker如果重启,就无法再访问这个mysql容器了

 

 

 

docker run --name mysql_admin -p 3306:3306 -v /root/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.30

 

 最后在云服务器上使用docker创建成功的python和mysql容器及运行状态

 

 

7,处理python项目并部署在云服务器上且可以在本地访问

# (1)修改python项目中的连接数据库文件中的ip为mysql容器中的固定ip127.18.0.3和端口号3306
# (2)修改数据库密码
# (3)修改python项目入口文件app.py中的app.run(host='0.0.0.0'),让所有外网主机都能访问本项目
python3 -m compileall /root/project
# (4)python项目使用python3命令编译python项目
tar -cvf D:project.tar D:/project
# (5)删除多余非.pyc编译文件后,使用linux命令打包python项目
tar -xvf project.tar -C /root/project
#  (6) 使用ftp将压缩包上传入云主机,解压到root/project/目录中
docker exec -it py_admin bash
#  (7) 进入py_admin的python容器中
cd /root/project
ls
nohup python app.pyc > los.txt
#  (8) 后台运行app.pyc文件,并将日志写入los.txt文件中
# (9)直接关掉控制台窗口,python就在云服务器后台中运行了,打开浏览器直接输入云主机IP加端口9500就可以访问项目了

 

 

 

 

 

 

 

 

注意:docker在运行时修改防火墙状态 会导至docker中的容器创建,启动等操作失败,需要在修改防火墙后重启docker再依个重启docker中的容器,才能继续操作容器

 

posted @ 2022-11-25 23:20  知兮  阅读(1969)  评论(0编辑  收藏  举报