docker的环境部署
- Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
1.关闭selinux服务
# 编辑selinux配置文件
vi /etc/selinux/config
# 修改SELINUX
SELINUX=disabled
# 重启linux服务
reboot
2.yum命令
yum install docker -y
service docker start
service docker stop
service docker restart
3.docker指令
3.1 docker使用步骤
- 镜像
- 为了快速下载和打包环境,docker引入了镜像机制
- 镜像是一个配置好的只读层软件环境
- docker镜像只读环境
- 容器
- 容器时在镜像基础之上创建出的虚拟实力,内容可读可写
- 一个docker镜像可以创建多个容器,而且容器之间相互隔离,可以把程序部署在容器中
- docker容器中运行的程序
- 在容器中部署环境
3.2 指令细节
- 镜像相关
# 启动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 端口映射
- 默认情况下除了宿主机之外,任何主机都无法远程访问docker容器
- 通过端口映射,可以吧容器端口映射到宿主机的端口,这样其他主机就能访问容器了
- 映射到宿主机的端口,不需要设置防火墙。便可以使用
# 将docker容器的5000端口映射到宿主机的9500端口,用户可以访问9500端口来访问docker5000端口的项目
docker run -it -p 9500:5000 --name=p1 python:3.8 bash
4.3 目录挂载技术
- 为了能把一部分业务数据保存在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容器
#用docker pull下载数据库
docker pull mysql:8.0.18 # 下载特定的镜像
docker pull mysql # 下载新版本的镜像
# 用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
# 创建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技术会把系统经常调用的代码转为机器码,提高效率
- 下载pypisdk
- 下载pypi镜像和容器
9.章节总结
- docker环境的重要性
- 平时的开发中需要什么软件,就用docker创建一个镜像,在镜像中创建对应的容器
- 尽量在linux系统上去运行docker
- docker的环境
- 分配ip技术
- 保证ip不变
- 端口映射
- 打开镜像和本地的端口限制
- 目录挂载
- 共享目录
- 分配ip技术
- 搭建docker部署环境
10.核心扩展
- linux常规操作
- 懂得把python部署在linux
- 掌握docker的常用命令
- 在docker中部署项目
11.技术展望
-
linux拓展
- 云计算的基础
- linux进程管理
- linux权限管理
- linux网络管理
- linux内存管理
- linux I/O管理
- linux告诉缓存
-
python扩展
- flask扩展
- 权限管理插件
- 文件上传插件
- 缓存插件
- orm插件
- Django
- ai人工智能
- flask扩展
-
docker扩展
- 分布式docker
- dockerSwarm技术
- k8s技术
-
前端扩展
- html
- css
- js
- bootstrap
- vue
- 微信小程序