- 直接把程序安装或部署在Linux操作系统上面,很容易引发资源冲突程序卸载不干净,导致无法安装或部署新程序每次部署之前要安装很多软件,修改复杂的配置文件无法让服务器硬件资源实现多租户服务增大了在Linux系统上部署集群和分布式的难度
Vmware 是重量级虚拟机,每个虚拟机实例都虚拟了完整的硬件环境,所以对硬件要求较高
Docker 是轻量级虚拟机,只虚拟了少量的硬件设备,虚拟实例共享使用Linux内核
Docker 是跨平台的轻量级虚拟机,但是在Windows和MacOS上面有部分功能无法使用
比如说安装Keepalived程序,配置虚拟IP
- 安装Docker之前要先关闭centOS内置的SELINUX服务。
SELINUX是CentOS 系统捆绑的安全服务程序,因为安全策略太过于严格,所以建议大家关闭这项服务。
修改/etc/selinux/config文件,设置SELINUX=disabled,修改之后必须重启系统才生效。使用yum命令可以很方便的安装Docker服务,并且Docker服务的管理指令也非常简单。
yum install docker -y #-y代表默认安装,不再需要确认 service docker start # 启动docker服务 service docker stop # 停止docker服务 service docker restart # 重启docker服务什么是DockerHub?
DockerHub是Docker公共镜像库,为用户提供了大量的镜像文件。
DockerHub官方网站:https://hub.docker.com/
由于DockerHub服务器都架设在国外,国内网络访问DockerHub很慢,无法下载镜像文件,我们可以使用Docker加速器
DaoCloud加速器采用自主研发的智能路由及缓存技术,并引入了先进的协议层优化,极大提升拉取镜像的速度和体验
# 安装DaoCloud curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
修改 /etc/docker/daemon.json文件,去掉结尾的逗号。如果存在逗号,重启docker服务时将会报错。
[root@VM-20-14-centos ~]# service docker restart Redirecting to /bin/systemctl restart docker.service Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.Docker 环境的常用指令
- 什么是Docker镜像
为了快速打包和部署软件环境,Docker引入了镜像机制
镜像是一个配置好的只读层软件环境
我们可以通过dockerfile文件创建出镜像,也可以从Docker仓库下载到镜像
什么是Docker容器
容器是在镜像基础上创建出的虚拟实例,内容可读可写
一个Docker 镜像可以创建出多个容器,而且容器之间互相隔离,部署的程序不会互相干扰
所有的容器直接使用宿主机的Linux内核、内存和硬盘,所以容器的性能非常接近于宿主机。(当然每个容器也支持设置占用cpu核心数、内存的上限)
常用的Docker命令
镜像相关
# 从DockerHub下载python 3.8镜像 docker pull python:3.8 # 查看docker已安装的镜像 docker images # 查看镜像信息 docker inspect python:3.8 # 将安装的python镜像导出至压缩文件 docker save python:3.8 > /root/python.tar # 删除镜像 docker rmi python:3.8 #如果有容器关联了该镜像是不允许删除的 #本地导入镜像 docker load < /root/python.tar
容器相关
# 创建Docker容器 docker run -it --name=p1 python:3.8 bash # 容器创建后会自动进入容器,退出指令用exit,退出后容器就停止运行了,如果加上参数-d,就可以设置默认后台运行,除非执行stop命令 #查看容器状态 docker ps -a # 重新启动容器 docker start p1 # 暂停容器运行 docker pause p1 # 恢复运行 docker unpause p1 # 进入到已经运行的容器中 docker exec -it p1 bash # 此时执行exit命令就不会影响容器的运行 # 查看容器信息 docker inspect p1 # 删除容器 docker rm p1 # 不可以删除正在运行的容器Docker 网络环境
默认情况下,Docker环境会给容器分配动态的IP地址,这就导致下次启动容器的时候IP地址就变了
我们可以单独创建一个Docker内部的网段,比如(172.18.0.X)
# 创建新网段,命名为mynet docker network create --subnet=172.18.0.0/16 mynet # 查看Docker环境已存在的网段 docker network ls # 删除已创建网段 docker network rm mynet # 创建容器p1,绑定IP地址(172.18.0.1是网关地址,不能用) docker run -it --name=p1 --net mynet --ip 172.18.0.2 python:3.8 bash # 查看当前IP地址 ip addrDocker 端口映射
默认情况下,除了宿主机之外,任何主机无法远程访问Docker容器
通过端口映射,可以把容器端口映射到宿主机的端口,这样其他主机就能访问容器了
映射到宿主机的端口,不需要设置防火墙规则,便可以使用
# 把容器的5000端口映射到宿主机的9500端口上 docker run -it -p 9500:5000 python:3.8 bash # 可以同时映射多个端口 docker run -it -p 9500:5000 -p 9600:3306 python:3.8 bash
注意:容器只有在运行中,端口映射才生效
Docker目录挂载为了能把一部分业务数据保存在Docker环境之外,或者把宿主机的文件传入容器,所以需要挂在宿主机的目录
Docker 环境只支持目录挂载,不支持文件挂载,而且一个容器可以挂载多个目录
# 宿主机文件夹路径:容器文件夹路径 docker run -it -v /root/test:/root/project python:3.8 bash项目部署 创建python容器
- 创建容器
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
- 加速pip安装拓展程序
为了加快pip命令下载安装拓展程序,可以使用国内镜像来提速
比如清华大学的镜像:https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple创建MySQL容器
- 下载MySQL镜像
# 下载指定版本的镜像 docker pull mysql:8.0.18 # 下载最新版本镜像 docker pull mysql
- 用docker run 命令创建MySQL容器,并且做好端口映射和目录挂载
# 创建mysql容器不需要-it 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
创建后就可以通过软件来 连接这个数据库了
启动项目- 将项目文件复制到容器映射的文件夹下,容器就可以直接读取了运行flask项目
cd /root/project/project_2/ nohup python app.pyc > logs.txt # nohup 可以是程序后台运行,打印内容输出至log.txt文件上 # 使用nohup,并不会回到命令行拓展:Pypy环境
Python SDK环境内置的是Cpython解释器,而PypySDK环境内置的是Python解释器,而且带有JIT功能
通常来说同样的Python程序,在Pypy环境中,运行速度比PythonSDK快6~10倍
Pypy下载官网:http://pypy.org/download.html
# 下载Pypy镜像 docker pull pypy:3.6-7.2.0 # 创建Pypy容器 docker run -it -d --name=p2 --net mynet --ip 172.18.0.4 -p 9600:5000 -v /root/pypy_project:/root/pypy_project pypy:3.6-7.2.0 bash # pypy环境中-it不可缺少,否则会出现闪退 # 查看pypy版本 pypy3 --version # 进入pypy命令行 pypy3



