docker----day01/02( docker介绍与安装,docker启动 ,docker设置镜像加速器与常用命令,镜像相关命令,容器相关命令,镜像运行成容器报错、 Iaas Paas和Saas介绍 )

昨日回顾

# 1 flask-sqlalchemy
	-flask中集成sqlalchemy
    	-session:要并发安全
        -建立表模型,集成Base
        -字段,字段参数,统统要导入

    -flask-sqlalchemy:封装了一个类,只需要实例化得到对象
    	-配置信息:直接放到配置文件----》flask-sqlalchemy如何读出来的?
        	db = SQLAlchemy()
			db.init_app(app) #把app传入,就能取到配置信息---》创建了engin--》生成了session
    	-对象.session
        -对象.Model
        -对象.字段

    -使用步骤:
    	-0 配置文件配置连接信息
    	-1 导入SQLAlchemy 类
        -2 实例化得到对象,db.init_app(app) 完成初始化
        -3 视图函数中使用session  db.session
        -4 在models.py中建立表模型 继承db.Model
        -5 创建出所有表
        	db.create_all()
            
            
 # 3 flask-migrate
	-实现像django的orm一样做表和字段的迁移和记录
    -init
    -migrate
    -upgrade
    
    
    
    
# 4 演示一个项目

# 5 虚拟化
	-kvm
    -exsi
    -openstack:python写的云平台,管理虚拟机
    -docker:容器技术
    -k8s:容器编排
    
    -ansible:批量运维工具,基于ssh  超过500台机器
    -salstack:批量运维工具 cs架构
    -jenkins:流水线工具
    -gitlab:git远程仓库
    
    -普罗米修斯:Prometheus+grafana  ---》go写的
    -zabbix:php 运维监控软件
    
    
    
# 6 docker 跟虚拟机区别
	-docker 有自己的网络
   
# 7 docker 安装

.
.
.
.
.
.

今日内容

1 docker介绍与安装

1.1 什么是虚拟化

 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件  对资源充分利用

虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。


# kvm:开源的免费的  Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中
# exsi:vmware商用的,装在裸机上,可以虚拟化出很多机器
# openstack(python开发的,开源的):电信云,华为云 openstack  管理云平台
# 阿里云(自研,阿里飞天):云服务器,到一个网站,点点---》付款--》完成
# docker:容器技术
# k8s:多机容器管理,容器编排

.
.
.

1.2 docker是什么


Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。
它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,
项目代码在 [GitHub](https://github.com/docker/docker) 上进行维护


# Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。
# Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。

# Docker 项目的目标是实现【轻量级的操作系统虚拟化解决方案】。
# Docker 的基础是 Linux 容器(LXC)等技术。

在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,
使得操作更为简便。用户操作 Docker 的【容器就像操作一个快速轻量级的虚拟机】一样简单。

.
.
.

1.3 容器与虚拟机比较

image
.
.
.
.

1.4 Docker 概念


# 1 docker 是cs架构  ,mysql,redis,c和s要通信,使用的http协议,符合resful规范
# 2 Docker镜像:镜像是基于一堆文件,相当于虚拟机装了操作系统,又装了软件的一堆文件
# 3 Docker容器:镜像运行起来,成为了容器,【当成一台虚拟机上面装了一些软件】
	- 类和对象的概念
	- 镜像是类---》生成多个对象


# 4 Registry(注册中心)
	-镜像从哪里来?
		-注册中心中拉取下来

image
.
.
.
.

1.5 docker安装

# win:下个软件,一路下一步即可(讲课,真正做练习,不要使用它)
	-https://www.docker.com/products/docker-desktop/
    -一路下一步

# centos:建议你直接在虚拟机中安装
# 先卸载
	yum remove docker docker-common  docker-selinux docker-engine
	rm -rf /var/lib/docker


# 安装
	sudo yum install -y yum-utils device-mapper-persistent-data lvm2
	sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	sudo yum install docker-ce -y


# 查看版本
	docker -v  # Docker version 23.0.3, build 3e7cbfd

# mac:

.
.
.
.
.
.
.

2 docker启动 与设置镜像


# 查看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

# 按a 把下面配置复制进去
{
  "registry-mirrors": ["https://q8usinjw.mirror.aliyuncs.com"]
}

# esc  :wq  保存退出

sudo systemctl daemon-reload
sudo systemctl restart docker   # 这样就配了一个镜像加速器

image
.
.
.
.

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
	docker pull centos:7
	docker pull redis:latest
	docker pull python:3.8
	docker pull mysql:5.7

	如果不指定标签,会下载最新
    docker pull centos
    docker pull centos:latest

-------------------------------------------------

# 3 查看本地镜像  镜像就是本地的一堆文件,没有实际的意义,需要做成容器才能有用
	docker images  # 等同于 docker image ls


# 4 删除镜像
	docker rmi 镜像ID   # 可以同时删多个


# 5 删除所有镜像
        docker rmi `docker images -q`
        # 查出本机当前所有镜像的id号,然后再把这些镜像都删掉

    # docker images -q  查出本机当前所有镜像的id号

-------------------------------------------------

image
.
.
.
.
.
.

4 容器相关命令


# 把镜像运行成容器,并且一个镜像,可以运行出多个容器!!!

------------------------------------------------

# 查看正在运行的容器
	docker ps

# 查看所有容器
	docker ps -a

# 查看最后一次运行的容器
	docker ps -l

------------------------------------------------

# 运行容器(其实是两步:创建容器:create,运行容器:run)
-如果容器没有创建,直接执行run,就会创建并运行,所以你只需要会run就行了

run 的时候,有很多参数
    -i:表示运行容器
    -t:表示容器启动后会进入容器命令行。
    加入-i -t 这两个参数后,容器创建后,就会自动进入到容器中。即分配一个伪终端。

    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行
    加入-i -d 这两个参数后,容器创建后,不会自动进入到容器中!!!

    --name :为创建的容器命名,如果不写,随机生成一个名字


    -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),
       可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,
       然后共享到容器上。

    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。
        可以使用多个-p做多个端口映射


# docker run -id     不会进入到容器内部   -i -d  可以简写成-id
# docker run -it     会进入到容器内部

------------------------------------------------
------------------------------------------------

# 将镜像和标签 centos:7 镜像运行成一个容器   给容器起个名字  并且进入该容器
启动一个centos容器,名字叫mycentos,并且进入
docker run -it --name=mycentos centos:7

yum install vim -y      # 在容器中装了vim软件

exit  # 退出,容器就停止了!!又回到了宿主机上了!!!  所以一般运行容器不用 run -it


docker start mycentos  # 启动停止的容器


# 注意:在容器里面放的所有文件,只要不是做的目录映射,都在容器里面
#      在宿主机里面找不到的,因为被加密了,

------------------------------------------------

# 后台启动一个centos容器,名字叫youcentos,不进入容器
docker run -id --name=youcentos centos:7

# 用 run -id 将镜像运行成容器,比较方便,
# 用docker exec -it  容器id /bin/bash 命令进入容器,这样exit退出容器,容器也不会停止!!!

------------------------------------------------

.
.
.
.
.

4.1 在宿主机上如何进入到容器内部


# 在宿主机上如何进入到容器内部 ?

# 进入到容器内部(本质是让容器执行命令,并且把结果展示出来!!!)
docker exec 容器id 命令
docker exec 62006c4a6a4c ls
docker exec 62006c4a6a4c mkdir qqq   # 在容器内创建qqq文件


docker exec -it  62006c4a6a4c /bin/bash    # 进入到容器内部
# 执行/bin/bash 命令,进入到容器id为62006c4a6a4c的容器的内部


exit  # 退出容器  又回到宿主机了  这样退出容器就不会停止了


# /bin/bash  的意思好像是开启一个命令窗口的意思

------------------------------------------------
------------------------------------------------

.
.
.
.
.

4.2 -v参数:做目录映射


# 启动一个centos容器,名字叫lqz,不进入
# -v参数:做目录映射  前面是文件夹在宿主机的路径  后面是映射到容器里面的路径
#             注意是目录因素, 不是文件映射,所以-v后面不能写文件路径!!
docker run -id --name=lqz -v /home/sss:/sss centos:7

docker exec -it 4a4ac433dc96 /bin/bash  # 在宿主机上执行命令进入该创的容器后
# 可以看到容器的根路径下自动有了sss文件夹了,宿主机里面改sss文件夹里面的内容改变,
# 容器里面对应映射的文件夹里面的文件内容也会跟着改

# 以后无论在宿主机还是容器中修改当前目录下的文件,都会相互影响

------------------------------------------------

# 这样还有一个好处:
部署项目不需要把项目代码放到容器里面去,在宿主机上把项目代码的文件夹映射到容器里面去

容器里面运行的是mysql,不需要把表放在容器里面,在宿主机上把表的文件映射到容器里面去

这样删容器,表就还在了!!!

.
.
.
.
.
.

4.3 -p参数:做端口映射


# -p参数:做端口映射

# 容器中启动一个mysql5.7 --》容器中的3306监听,但宿主机8888没人监听,
# 做端口映射后,宿主机的8888就被docker的这个容器监听了


# 前者是宿主机端口,后者是容器内的映射端口,把宿主机的8888端口映射成容器的3306端口

docker run -id --name=mysql -p 8888:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

#  需要用-e参数传一个环境变量  意思是启动一个mysql的容器  设置该mysql的root密码是123456
#  netstat -nlp |grep 8888  查看本机8888端口占用情况
#  yum install net-tools -y     要先下一下netstat

# 以后访问宿主机8888端口就等于访问容器的3306端口

------------------------------------------------
# 通过navicat 连接宿主机里面的容器里的mysql!!!
输入虚拟机的ip地址,宿主机的端口,容器里面mysql的用户名与密码 就能连接上了!!

宿主机操作系统上装了docker软件,从远程仓库拉取镜像
再将一个镜像,可以运行出多个容器来
image
.
.
镜像运行成容器,但是容器里面有一些文件,这些文件可能是宿主机里面的文件,
就可以用 -v 参数做目录的映射 就是将宿主机里面的文件映射到容器里面
这样做了以后,以后改宿主机里面的该文件,对应的容器里面文件也改了
改容器里面文件,对应的宿主机里面的文件也对应改了 这就叫目录映射 要用-v参数指定
图映射的箭头画反了
image
.
.
端口映射
镜像运行成容器,容器监听3306端口,但是该监听的端口是容器的3306端口
宿主机3306端口没有被监听,但是将容器的3306端口映射成宿主机的3306端口后
以后访问宿主机的3306端口,就相当于访问宿主机里面对应容器的3306端口
image
.
.
navict 连接虚拟机或者远程服务器里面的docker容器里面mysql
image
.
image
.
.
.
.

镜像运行成容器报错情况


运行redis镜像报端口映射错误,出现报错:
docker: Error response from daemon: driver failed programming external connectivity on
endpoint redis (容器ID): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp
-d 0/0 --dport 6379 -j DNAT --to-destination 172.17.0.2:6379 ! -i docker0: iptables:
No chain/target/match by that name.

# 在我们启动了Docker后,我们再对防火墙firewalld进行操作,就会发生上述报错
我们输入命令关闭防火墙systemctl stop firewalld.service后
再用镜像运行成容器,并做端口映射就会出问题

# 重启docker就行了   systemctl restart docker


.
.
.
.

5 什么是Iaas Paas和Saas 了解

-----------------------------------------------

Iaas: Infrastructure-as-a-Service(基础设施即服务)
    IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。
    节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用

-----------------------------------------------

Paas:平台即服务
   paaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。
   这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。
   网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等

-----------------------------------------------

Saas:软件即服务
   -软件开发,部署,运维---》公司来做,卖给其他公司软件

-----------------------------------------------

FAAS:Function as a Service,"功能即服务"(也译作“函数即服务”)

-----------------------------------------------
无服务器架构 serverless

.
.
.
.
.
.

作业

# 拉取一个centos镜像--》运行成容器---》在容器中安装python3.8


# 面试题:
 1 wsgi uwsgi uWSGI,cgi,fastcgi 分别是什么?
 2 如何自定制上下文管理器
 3 Python是值传递还是引用传递

.
.

posted @   tengyifan  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示