【Docker】浅析容器化技术和DevOps

877 阅读5分钟

1 虚拟化技术 V.S. 容器技术

1.1 虚拟化技术

虚拟化技术使得用户可以在单个物理硬件系统中创建多个模拟环境或专用资源。虚拟机监控程序可直接连接到硬件,从而将一个系统划分为不同的、单独安全环境,也就是虚拟机。虚拟机监控程序能够将计算机资源与硬件分离并适当分配资源,这一功能对虚拟机十分重要。

主机是配备了虚拟机监控程序的物理硬件,而使用其资源的虚拟机则被称为虚拟客户机,虚拟机通过Hypervisor进行物理资源的虚拟化。这些虚拟客户机将计算资源(如 CPU、内存和存储器)视为一组可进行重新分配的资源,可以控制 CPU、内存、存储器和其他资源的虚拟实例,以便虚拟客户机能在需要时收到所需资源。

一个物理机可以部署多个应用进程,每个应用独立运行在一个虚拟机中。 

优点:

  1. 池化物理资源:一个物理机的资源可以分配到不同的虚拟机中。
  2. 易于扩展:可以创建多个主机或虚拟机。
  3. 易于云化:不需要关注物理资源,可以使用AWS、阿里云直接创建虚拟机。

缺点:

  1. 资源占用多:每个虚拟机都是完整的操作系统,需要分配资源,虚拟机数量增多,操作系统本身的消耗的资源也会增多。
  2. 冗余步骤多

1.2 容器技术

开发和运维面临的挑战:应用的开发和运维需要配置很多中间件和环境依赖,开发环境和运维环境往往存在差异。

容器解决了开发和运维之间的矛盾,容器可以将应用进行打包,打包好的容器可以运行在任何环境中,容器搭建了开发和运维之间的桥梁,是实现DevOps的最佳解决方案。

容器是一种沙盒技术,它将应用及其所需资源进行封装,有效地将单个操作系统的资源(运行时依赖和配置)划分到一个单独的模块,使得应用在容器中运行,与外界隔离,以便更好的在不同的模块之间平衡有冲突的资源使用需求,同时沙盒可以轻易地被转移到其它宿主机器。

本质上,它是一个特殊的进程。通过名称空间(Namespace)、控制组(Control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个独立的空间。

容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

1.3 比较

虚拟化技术是进行硬件虚拟后,在其上运行一个完整操作系统,应用进程运行于该操作系统之上; 虚拟机的容量有限,因为创建它们的虚拟机监控程序受制于计算机的有限资源。

容器的应用进程直接运行于宿主机的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。容器与运行时环境共享相同的操作系统内核和软件包应用程序,因此整个容器能够在各种开发、测试和生产配置中移动、打开和使用。

容器是应用层面的隔离,而虚拟化是物理资源层面的隔离。

2 Docker V.S. Kubernetes

2.1 Docker概述

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker使得应用之间相互隔离,多个容器共享同一个操作系统内核,可以运行在很多主流的操作系统之上。

Docker的优势:

  1. 简化配置:源代码、运行环境和配置可以打包到一个容器中,容器可以运行在不同的环境当中。
  2. 整合服务器
  3. 代码流水线管理
  4. 调试能力
  5. 提升开发效率:使得开发环境、测试环境、生成环境非常接近,减少软件工程的不同环节可能会产生的错误。
  6. 多租户:多租户应用程序是一个正在运行的实例为许多客户提供服务的应用程序。
  7. 隔离应用
  8. 快速部署

在CentOS中安装Docker:官方文档

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install docker-ce

启动Docker:sudo systemctl start docker

2.2 Kubernetes

Kubernetes(K8S)是一种容器编排的工具,对容器进行创建、管理、调度、运维,在实际的生产环境中一般有成千上万个容器需要管理,所以会应用到K8S完成容器的编排工作。Docker Swarm是Docker自己的编排工具。

3 DevOps

DevOps是理念、过程和工具的集合。

DevOps的核心理念是信任和尊敬、敏捷的目标、开放的沟通。

DevOps的过程包括发布计划、持续集成、持续发布、持续测试、持续监控、持续改进。

DevOps的工具包括版本管理工具、自动化工具、部署工具、监控工具等。

参考资料

  1. 通俗易懂,一文带你了解什么是虚拟化技术(Virtualization)?
  2. 容器技术简述
  3. Docker官方文档