容器技术
应用程序仅由较少数量的大组件构成时,可以给每个组件分配专用的虚拟机来隔离他们的环境。但是,组件更小,数量更多时,继续使用虚拟机来隔离得话,会浪费硬件资源,增加人力资源。
Linux容器技术隔离组件
虚拟机和容器
虚拟机
- 管理程序将物理资源分成较小部分的
虚拟硬件资源
,从而被虚拟机中的操作系统使用。 系统调用
:运行在虚拟机中的应用程序,会执行虚拟机操作系统的系统调用。虚拟机操作系统通过管理程序在宿主机上的物理CPU执行x86指令。
虚拟机和容器对比
- 容器比虚拟机更加轻量级,虚拟机需要运行自己的一组系统进程,容器不需要。使用容器时,能够也应该让每个应用有一个容器。
- 多个容器会完全执行运行在宿主机上的同一个内核的系统调用。而虚拟机提供完全隔离的环境,每个虚拟机运行在自己的Linux内核。(虚拟机的优点)
- 运行容器不需要像运行虚拟机一样开机,容器进程可以很快被启动。
容器实现隔离原理
Linux命名空间
- 使每个进程只看到自己的系统视图(文件、进程、网络接口、主机名等)
Linux控制组cgroups
限制进程能够使用的资源量
docker
什么是docker? docker是一个快速交付,运行应用的容器化技术
docker解决了项目部署过程中的一些问题
- 大型项目组件多,依赖关系复杂,容易出现兼容性问题.
docker将Libs(函数库)、Deps(依赖)、配置与应用一起打包,放到隔离的容器中
- 开发、测试、生产环境有差异
docker将用户程序与所需要调用的系统库函数一起打包,基于打包的系统库函数,调用内核指令
基本概念
- 镜像 Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像
- 容器 镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见
- 仓库 eg.:DockerHub是一个Docker镜像的托管平台
C/S架构模式
Docker客户端 发送命令或者请求到Docker服务端
Docker主机 一个物理或者虚拟的机器用于执行 Docker 守护进程。
docker镜像是如何构建的?
1.Docker的客户端和守护进程不要求在同一台机器上
2.Docker客户端将 整个目录的文件上传到Docker守护进程
3.由Docker守护进程构建新的镜像
tips: 不要在构建目录中包含任何不需要的文件,尤其当Docker守护进程运行在一个远端机器的时候。
docker容器的镜像层
docker镜像由多层构成 docker镜像和虚拟机镜像的一个很大的不同就在于:容器镜像是由多层构成。docker镜像能够在多个镜像之间共享和征用。共享:基于相同基础层的镜像被创建成两个容器时,他们能够读相同的文件。但,容器镜像是只读的,其中一个容器写入某些文件对另外的容器是不可见的。层不仅使得镜像在网络上的分发效率提高,还有助于减少镜像的存储空间。
- Dockerfile中每一条单独的指令都会创建一个新层。
docker 命令
docker 网络
docker如何处理容器网络访问?
docker0
ip addr
Linux命令,查看本机地址
l0 本机回环地址
eth0 阿里云内网地址
docker0 docker0地址
在容器中查看地址:
docker容器间ping
tomcat01 ping tomcat02
容器启动的时候会得到eth@if262 ip地址(docker分配的)
- 每启动一个docker容器,docker就会给容器分配一个ip
- 安装了docker,就会有一个docker0网卡(桥接模式,使用evth-pair技术)
- evth-pair 一对虚拟设备接口,成对出现,充当桥梁,连接各种虚拟网络设备
- 容器删除,对应的网桥也删除了
–link
不好用
自定义网络
网络模式:
- bridge
- none
- host
…
自定义网络,不需要使用 –link 就能够使用名字ping
docker run时,默认有 –net bridg
dockerCompose
- DockerCompose可用基于Compose文件帮我们快速部署分布式应用
- Compose文本文件通过指令定义集群中容器如何运行
Kubernetes
Kubernets集群架构
一个Kubernets集群由很多节点组成。
- 主节点:承载Kubernetes控制和管理整个集群系统的控制面板
- 工作节点:运行用户实际部署的应用
控制面板
- Kubernetes API服务器
- Scheculer:调度应用,为应用的每个可部署组件分配一个工作节点
- Controller Manager: 执行集群级别的功能,复制组件、持续跟踪工作节点、处理节点失败
- etcd: 一个可靠的分布式数据存储,能持久化存储集群配置。
工作节点
- Docker rtk 或其他的容器类型
- Kubelet: 与API服务器通信,并管理它所在节点的容器
- kube-proxy: 负责组件间的负载均衡网络流量
式数据存储,能持久化存储集群配置。
工作节点
- Docker rtk 或其他的容器类型
- Kubelet: 与API服务器通信,并管理它所在节点的容器
- kube-proxy: 负责组件间的负载均衡网络流量