首页 > 技术文章 > 【docker-python部署】

gokublog 2021-04-21 04:28 原文

docker的环境部署

  • Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

1.关闭selinux服务

# 编辑selinux配置文件
vi /etc/selinux/config

# 修改SELINUX
SELINUX=disabled

# 重启linux服务
reboot

2.yum命令

image-20210408003818481

yum install docker -y
service docker start
service docker stop
service docker restart

3.docker指令

3.1 docker使用步骤

  • 镜像
    • 为了快速下载和打包环境,docker引入了镜像机制
    • 镜像是一个配置好的只读层软件环境
    • docker镜像只读环境
  • 容器
    • 容器时在镜像基础之上创建出的虚拟实力,内容可读可写
    • 一个docker镜像可以创建多个容器,而且容器之间相互隔离,可以把程序部署在容器中
    • docker容器中运行的程序
  • 在容器中部署环境

3.2 指令细节

image-20210408010031583

  • 镜像相关
# 启动docker服务
service docker start

# 关闭docker服务
service docker stop

# 重启docker服务
service docker restart

# 下载python镜像
docker pull python:3.8

# 查看docker环境中的 镜像
docker images

# 查看镜像的详细信息
docker inspect python:3.8

# 将docker镜像导出为压缩文件
docker save python:3.8 > /root/python.tar

# 删除python镜像
docker rmi python:3.8
  • 容器相关
# 创建容器并运行
docker run -it --name=p1 python:3.8 bash	# 使用python镜像创建一个名字为p1的容器 启动命令行

# 查看镜像中容器的状态
docker ps -a

# 启动容器
docker start p1

# 进入已经创建过的容器的命令行
docker exec -it p1 bash

# 退出容器(如果是run进来的,exit会关闭退出,如果是exec进来的,exit只会退出)
exit

4.创建容器必须的技术

4.1docker网络(不变的ip)

  • 默认情况下docker给容器分配动态ip

  • 我们可以创建一个docker的网段(172.18.0.X)

  • 172.18.0.1是网关地址不能用

# 创建一个名为mynet的网段 /16代表可以创建65536个ip
docker network create --subnet=172.18.0.0/16 mynet

# 查看创建的网段
docker network ls

# 删除一个网段
docker network rm mynet

# 创建python容器指定网段
docker run -it --name=p1 --net mynet --ip 172.18.0.2 python:3.8 bash

4.2 端口映射

image-20210408014501657

  • 默认情况下除了宿主机之外,任何主机都无法远程访问docker容器
  • 通过端口映射,可以吧容器端口映射到宿主机的端口,这样其他主机就能访问容器了
  • 映射到宿主机的端口,不需要设置防火墙。便可以使用
# 将docker容器的5000端口映射到宿主机的9500端口,用户可以访问9500端口来访问docker5000端口的项目
docker run -it -p 9500:5000 --name=p1 python:3.8 bash

4.3 目录挂载技术

image-20210408220447125

  • 为了能把一部分业务数据保存在docker环境之外,或者把宿主机的文件传入容器,所以需要给容器挂载宿主机的目录
  • docker环境支持目录挂载,不支持文件挂载,而且一个容器可以挂载多个目录
# 将宿主机的/root/test 目录挂载到容器的/root/project 
docker run -it -v /root/test:/root/project python:3.8 bash
  • 目录挂载实例子
cd
mkdir test
cd test
touch 1.txt
docker run -it -v /root/test:/root/test --name=p1 python:3.8 bash
touch 2.txt
exit
ls

5.创建一个真正的容器

  • python容器
# 创建一个目录
mkdir docker_project
# 创建并进入一个容器
docker run -it -d --name=p1 -p 9500:5000 -v /root/project:/root/project --net mynet --ip 172.18.0.2 python:3.8 bash
"""
--name=p1 # 指定容器的名字
-p 9500:5000 # 端口映射 访问容器的9500端口映射宿主机的5000端口
-v /root/project:/root/project # 目录挂载 将宿主机的/root/project文件夹挂载到docker的/root./ 
--net mynet --ip 172.18.0.2 # 为容器指定固定的ip并赋予指定ip
python:3.8 # 指定python版本
bash # 打开终端
"""
# 查看容器的状态
docker ps -a
mkdir ~/.pip
vim ~/.pip/pip.conf
# pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
# 为pip加速
pip install flask -i 清华镜像
# 安装一系列插件
pip install mysql-connector-python -i 清华镜像
pip install sqlalchemy
  • mysql容器

    image-20210408231214891

#用docker pull下载数据库
docker pull mysql:8.0.18 # 下载特定的镜像
docker pull mysql # 下载新版本的镜像

image-20210408231616238

# 用docker run 命令创建mysql容器,并且做好端口映射和目录挂载
docker run --name m1 -p 4306:3306 --net mynet --ip 172.18.0.3 -v /root/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:8.0.18

6.sqlalchemy

image-20210408232620163

# 创建session链接
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
url = "mysql+mysqlconnector://root:abc123456@192.168.99.49:4306/test"
engin = create_engine(url,pool_size=5)
Session = sessionmaker(bind=engin)
# 使用session
session = Session()
sql = "SELECT * FROM t_emp limit 20,20"
cursor = session.execute(sql)
result = cursor.fetchall()
session.close()

......

7.部署flask项目

7.1 修改数据库连接信息

if __name__ == "__main__":
    app.run(host="0.0.0.0")	# 修改端口号
1.将程序传到服务器对应的文件夹(docker映射的文件夹)

7.2 让程序运行在后台

# python程序运行在后台
nohup python app.pyc > app.log

7.3 编译flask项目

编译flask项目就是把所有产生的pyc文件上传到服务器

8.pypy环境部署项目

8.1 pypy sdk

  • pypy sdk特点 带有jit功能
  • pypy sdk速度是python sdk6-8倍
  • jit
    • jit技术会把系统经常调用的代码转为机器码,提高效率

image-20210408234510944

image-20210408234547416

  • 下载pypisdk

image-20210408234622557

  • 下载pypi镜像和容器

image-20210408234648571

9.章节总结

  • docker环境的重要性
    • 平时的开发中需要什么软件,就用docker创建一个镜像,在镜像中创建对应的容器
    • 尽量在linux系统上去运行docker
  • docker的环境
    • 分配ip技术
      • 保证ip不变
    • 端口映射
      • 打开镜像和本地的端口限制
    • 目录挂载
      • 共享目录
  • 搭建docker部署环境

10.核心扩展

  • linux常规操作
  • 懂得把python部署在linux
  • 掌握docker的常用命令
  • 在docker中部署项目

11.技术展望

  • linux拓展

    • 云计算的基础
    • linux进程管理
    • linux权限管理
    • linux网络管理
    • linux内存管理
    • linux I/O管理
    • linux告诉缓存
  • python扩展

    • flask扩展
      • 权限管理插件
      • 文件上传插件
      • 缓存插件
      • orm插件
    • Django
    • ai人工智能
  • docker扩展

    • 分布式docker
    • dockerSwarm技术
    • k8s技术

    image-20210409000439096

  • 前端扩展

    • html
    • css
    • js
    • bootstrap
    • vue
    • 微信小程序

推荐阅读