容器技术

应用程序仅由较少数量的大组件构成时,可以给每个组件分配专用的虚拟机来隔离他们的环境。但是,组件更小,数量更多时,继续使用虚拟机来隔离得话,会浪费硬件资源,增加人力资源。

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: 负责组件间的负载均衡网络流量