什么是laas-Paas-Saas,docker启动设置镜像,镜像相关命令,容器相关命令

发布时间 2023-04-12 22:22:54作者: lsumin

什么是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 字符串 元组 布尔值) 实际传递的还是对象的引用。在"赋值操作"时 由于不可变对象无法修改 系统会新创建一个对象