目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

容器、虚拟化、Docker

容器

 顾名思义是指用以容纳物料的基本装置,譬如:水杯、饮料箱子、海洋、地球。
容器技术

 不完全近似于日常生活中的是 —— 在信息技术领域,容器的是标准化的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境,容器具备以下特点:

  • 对软件和其依赖的标准化打包
  • 应用之间相互隔离
  • 共享同一个OS Kernel
  • 可以运行在多种不同的主流操作系统是

容器和虚拟化的差异

 容器和虚拟机具有类似的资源隔离和分配优势,但功能不同,因为容器虚拟化的是操作系统而不是硬件。所以容器更便携,更高效。
 容器是APP层面的隔离、虚拟化是物理资源层面的隔离。
 容器技术属于操作系统级虚拟化—— 内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同。操作系统虚拟化最大的特点就是不需要额外的 supervisor的支持。

虚拟化技术
 虚拟机(VM)是物理硬件的抽象,将一台服务器转变为多台服务器。管理程序允许多台VM在单台机器上运行。每个VM都包含操作系统的完整副本(隔离性强),应用程序,必要的二进制文件和库 - 占用数十GB。虚拟机也可能很慢启动。
虚拟化的优点

  • 资源池 —— 一个物理机的资源可以按需分配到不用的虚拟机中。
  • 很容易扩展 —— 加物理机 or 加虚拟机。
  • 很容易云化 —— AWS,阿里云等…

虚拟化的局限性

  • 每一个虚拟机都是一个完整的操作系统,要给其分配资源,当虚拟机数据增多时,操作系统本身消耗的资源势必增多。
  • 开发和运维面临的挑战:技术栈的多样化、本地开发测试环境与线上部署环境的不一致性问题。


容器技术
 容器是应用层的抽象,它将代码和依赖关系打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。容器占用的空间比VM少(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要更少的VM和操作系统。
容器解决了什么问题?

  • 完美解决了开发与运维之间的矛盾。
  • 在开发和运维之间搭建了一个桥梁,是实现devops的最佳解决方案。

虚拟化结合容器

容器与虚拟化配合使用

 容器和虚拟化结合,为部署和管理应用程序时提供了极大的灵活性。

Docker

 Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。
 Docker 的构想是要实现“ Build Ship and Run Any App, Anywhere ”,即通过对应用的封装( Packaging )、分发( Distribution )、部署( Deployment )、运行( Runtime )生命周期进行管理,达到应用组件级别的“一次封装 ,到处运行” 这里的应用组件, 既可以是一个 Web用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群

 事实上,Docker也并非凭空而来,而是站在前人的肩膀上。其中最重要的就是Linux容器技术(Linux Containers,LXC)技术
 IBMDeveloper Works 网站关于容器技术的描述十分准确:“容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资惊使用需求 与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译 容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制 此外,也避免了准虚拟化( para-virtualization )和系统调用替换中的复杂性。”
 Docker之所以能进入寻常百姓家的一个关键是在LXC的基础上进一步优化了容器的使用体验——提供了各种容器管理工具(分发、版本、移植等),让用户无需关注底层的操作,可以更加简单明了地管理和使用容器;其次,Docker用过引入分层文件系统构建和高效的镜像机制,降低了迁移难度,极大地改善了用户体验。
 Docker容器更像是一种轻量级的沙盒(sandbox),每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建和停止十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。
 基于 Linux 台上的多项开源技术,Docker 提供了高效、敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流云平台。可以说 Docker 首次为应用的开发 、运行和部署提供了“ 站式”的实用解决方案。

Docker在开发和运维中的优势

  • 更快速的交付和部署
     使用 Docker ,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用完全相同的环境来部署代只要是开发测试过的代码,就可以确保在生产环境无缝运行 Docker 可以快速创建和删除容器,实现快速迭代,节约开发、测试、部署的大量时间 并且,整个过程全程可见,使团队更容易理解应用的创建和工作过程。
  • 更高效的资源利用
     运行 Docker 容器不需要额外的虚拟化管理程序( Virtual Machine Manager, VMM ,以及 Hypervisor )的支持, Docker 是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低 与传统虚拟机方式相比,Docker的性能要提高1~2个数量级。
    容器技术与虚拟化技术对比
  • 更轻松的迁移和扩展
     Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云个人电脑、服务器等,同时支持主流的操作系统发行版本这种兼容性让用户可以在不同平台之间轻松地迁移应用。
  • 更简单的更新管理
     使用 Dockerfile ,只需要小小的配置修改,就可以替代以往大量的更新工作 所有修改都以增 的方式被分发和更新,从而实现自动化并且高效的容器管理。

Docker应用场景

  • 简化配置
  • 代码流水线管理
  • 提高开发效率
  • 隔离应用
  • 整合服务器
  • 调试能力
  • 多租户
  • 快速部署

Centos8 安装docker

1. 下载docker-ce的repo
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

2. 安装依赖(这是相比centos7的关键步骤)yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm

3. 安装docker-ce
yum install docker-ce

4. 启动docker
systemctl start docker

作者:Soulboy