什么是laas-Paas-Saas,docker启动设置镜像,镜像相关命令,容器相关命令
目录
什么是laas-Paas-Saas,docker启动设置镜像,镜像相关命令,容器相关命令
昨日内容回顾
# 1 flask-sqlalchemy
flask-sqlalchemy:封装了一个类 只需要实例化得到对象
配置信息放在配置文件
db=SQLAlchemy()
db.init_app(app) # 把app传入 就能取到配置信息---> 创建了engin---> 生成了session
使用步骤:
0 配置文件配置连接信息
1 导入SQLAlchemy类
2 实例化得到对象 db.init_app(app) 完成初始化
3 视图函数中使用db.session
4 在models.py中建立表模型 不再继承Base 继承db.Model
5 创建出所有的表db.create_all()
# 2 flask-migrate
实现像django的orm一样做表和字段的迁移和记录
init---> 初始化出一个迁移文件
migrate---> 迁移记录---> 相当于django的makemigrations
upgrade---> 迁移数据库---> 相当于django的migrate
# 4 虚拟化
kvm
exsi
openstack:python写的云平台 管理虚拟机
docker:容器技术
k8s:容器编排
ansible:批量运维工具 基于ssh 超过500台机器
salstack:批量运维工具 cs架构
jenkins:流水线工具
gitlab:git远程仓库
普罗米修斯:Prometheus+grafana---> go写的
zabbix:php 运维监控软件
# 5 docker 跟虚拟机区别
docker 有自己的网络
# 6 docker 安装
今日内容详细
1 什么是laas-PaaS-SaaS
IaaS:Infrastructure-as-a-Service(基础设施即服务)
IaaS公司会提供场外服务器 存储和网络硬件 你可以租用。节省了维护成本和办公场地 公司可以在任何时候利用这些硬件来运行其应用
PaaS:平台即服务
PaaS公司在网上提供各种开发和分发应用的解决方案 比如虚拟服务器和操作系统。这节省了你在硬件上的费用 也让分散的工作室之间的合作变得更加容易。网页应用管理 应用设计 应用虚拟主机 存储 安全以及应用开发协作工具等
SaaS:软件即服务
软件开发 部署 运维---> 公司来做 卖给其他公司软件
FAAS:Function as a service(功能即服务:也译作"函数即服务")
无服务器架构 serverless
2 docker启动设置镜像
# systemctl status docker
停止状态
# 启动:
systemctl start docker
# 远程仓库,下载镜像 ,国外:https://hub.docker.com---》下载比较慢--》设置国内镜像站
-https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
# docker安装后会有 /etc/docker 文件夹
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://x1566319.mirror.aliyuncs.com"]
}
# 配置完docker加速镜像之后重新加载一下
sudo systemctl daemon-reload
sudo systemctl restart docker
'''
腾讯云镜像加速:
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
'''
2.1 启动与停止常用命令
# 启动docker:
systemctl start docker
# 停止docker:
systemctl stop docker
# 重启docker:
systemctl restart docker
# 查看docker状态:
systemctl status docker
# 开机启动:
systemctl enable docker
# 查看docker概要信息
docker info
# 查看docker帮助文档
docker --help
3 镜像相关命令
# 1 查找镜像
docker search 镜像名称
建议去hub.docker.com 直接搜 更直观
这两种方式搜索到的是一样的 但是直接去网站更直观
# 2 拉取镜像 指定标签tag
tag在这个网站搜索镜像并找到如图tag
https://hub.docker.com/
点击复制 自动复制
docker pull centos:centos7
如果不指定标签 会下载最新
docker pull centos
docker pull centos:latest
# 3 查看本地镜像
docker images # 等同于 docker image ls
# 4 删除镜像
docker rmi 镜像ID # 可以同时删除多个 用空格隔开即可
# 镜像ID在查看本地镜像时有
# 删除所有镜像
# 查出所有镜像的id号
docker rmi `docker images -q`
4 容器相关命令
# 把镜像运行成容器 并且一个一个镜像 可以运行出多个容器
# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
# 查看最后一次运行的容器
docker ps -l
# 运行容器(其实是两步:创建容器:create 运行容器:run)
如果容器没有直接创建 直接执行run 就会创建并运行 所以只需要会run就行
run的时候 有很多参数
i:表示运行容器
t:表示容器启动后会进入容器命令行。加入这两个参数后 容器创建就能登录进去。即分配一个伪终端
d:在run后面加上-d参数 则会创建一个守护式容器在后台运行(这样创建容器之后不会自动登录容器 如果只加上-i -t两个参数 创建后就会自动进去容器)
--name:为创建的容器命名 如果不写 随机生成一个名字
-v:表示目录映射关系(前者是宿主机目录 后者是映射到宿主机上的目录) 可以使用多个-v做多个目录或文件映射。注意:最好做目录映射 在宿主机上做修改 然后共享到容器上
-p:表示端口映射 前者是宿主机端口 后者是容器内的映射端口。可以使用多个-p做多个端口映射
docker run -id # 不会进入到容器内部
docker run -it # 会进入到容器内部
# 启动一个centos容器 名字叫mycentos 并且进入
docker run -it --name=mycentos centos:7
yum install vim -y # 在容器中装了vim软件
exit # 退出 容器停止了
# 启动一个centos容器 名字叫mycentos 不进入
docker run -id centos:7
# 启动容器
docker start mycentos
# 进入到容器内部(本质是让容器执行命令)
docker exec 容器id 命令
docker exec f82e8578b9b1 ls
docker exec -it f82e8578b9b1 /bin/bash # 进入到容器内部
'''/bin/bush 相当于创建了一个窗口连接这个容器 exit退出窗口 开几个就需要关几个'''
# exit 退出
# -v参数:目录映射
docker run -id --name=lqz -v 宿主机路径/容器路径 centos:7
docker run -id --name=lqz -v /home/lqz:/lqz centos:7
以后无论在宿主机还是容器中修改当前目录下的文件 都会互相影响
# -p参数:端口映射 容器中启动一个mysql5.7---> 容器中的3306监听 宿主机3306没人监听 做端口映射后 宿主机的3306就被docker的这个容器监听了
# 启动mysql的root密码是123456
docker run id --name=mysql -p 80:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# netstat -nlp |grep 80 查看本机80端口占用情况
# 以后访问宿主机80端口就等于访问容器的3306端口
补充
# 1 wsgi uwsgi uWSGI cgi fastcgi 分别是什么?
Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口
uWSGI是一个Web服务器 它实现了WSGI协议 uwsgi协议 http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范
uwsgi协议是一个uWSGI服务器自有的协议 它用于定义传输信息的类型 每一个uwsgi packe前4byte为传输信息类型描述 它与WSGI相比是两样东西
CGI:公共网关接口(Common Gateway Interface, CGI)是Web服务器运行时外部程序的规范 按CGI编写的程序可以扩展服务器功能。CGI应用程序能与浏览器进行交互 还可通过数据API与数据库服务器等外部数据源进行通信,几乎所有服务器都支持CGI 可用任何语言编写CGI 包括流行的C C++ Java VB和Delphi等。CGI分为标准CGI和间接CGI两种。标准CGI使用命令行参数或环境变量表示服务器的详细请求 服务器与浏览器通信采用标准输入输出方式。间接CGI又称缓冲CGI 在CGI程序和CGI接口之间插入一个缓冲程序 缓冲程序与CGI接口间用标准输入输出进行通信
fastcgi:通用网关接口用于初始化软件服务的服务器方接口。这套接口描述了Web服务器与同一计算机上的软件的通信方式
CGI通用网关接口描述了客户端和服务器程序之间传输数据的一种标准 可以让一个客户端 从网页浏览器向执行在网络服务器上的程序请求数据
CGI独⽴于任何语⾔的,CGI程序可以⽤任何脚本语⾔或者是完全独⽴编程语⾔实现,只要这个语⾔可以在这个系统上运⾏。Unix shell script、Python、 Ruby、PHP、 perl、Tcl、 C/C++和 Visual Basic 都可以⽤来编写CGI程序。
最初,CGI是在1993年由美国国家超级电脑应⽤中⼼(NCSA)为NCSA HTTPd Web服务器开发的。这个Web服务器使⽤了UNIX shell环境变量来保存从Web服务器传递出去的参数,然后⽣成⼀个运⾏CGI的独⽴的进程
FastCGI快速通用网关接口 是通用网关接口CGI的改进。描述了客户端和服务器程序之间传输数据的一种标准。
FastCGI致力于减少Web服务器与CGI程序之间互动的开销 从而使服务器可以同时处理更多的Web请求。与为每个请求创建一个新的进程不同 FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI进程管理器管理 而不是web服务器
nginx服务支持FastCGI模式 能够快速高效地处理动态请求。而nginx对应的FastCGI模块为:ngx_http_fastcgi_module
ngx_http_fastcgi_module模块允许将请求传递给FastCGI服务器
# 2 如何自定制上下文管理器
with语句
在python2.6之前 需要使用try/finally来处理异常时的资源的正确关闭
而with语句可以更优雅简洁的实现资源的管理---> 使用with语句代替try/finally
这样就不需要代码层面上显式的f.close()资源了
with后的expression是一个上下文管理器 只有正确实现了上下文管理才可以使用with语句
上下文管理器需要通过实现__enter__和__exit__两个函数来完成 with语句执行过程:生成上下文管理器expression---> 执行expression的__enter__() 并将返回的变量赋值给[as var]中的var---> 执行with-block代码块---> 执行expression的__exit__() 进行资源清理工作
contextlib模块
contextlib模块给我们提供了更简便的方式去自定义一个上下文管理器 即装饰器contextmanage
closing
closing对象本身就是一个上下文管理器
所以可以使用closing上下文管理器和with配合使用
这里需要注意的是closing只适用于具有close()方法的资源对象,否则会抛异常
# 3 python是值传递还是引用传递
函数的参数传递本质上就是:从实参到形参的赋值操作。Python中"一切皆对象" 所有的赋值操作都是"引用的赋值"。所以 Python中参数的传递都是"引用传递" 不是"值传递"
可变对象:字典 列表 集合 自定义对象等
不可变对象:数字 字符串 元组 function等
传递不可变对象的引用
传递参数是不可变对象(例如:int float 字符串 元组 布尔值) 实际传递的还是对象的引用。在"赋值操作"时 由于不可变对象无法修改 系统会新创建一个对象