Docker入门:容器&虚拟机&Docker

1.Container(容器)的基本介绍

IT里的容器技术是英文单词Linux Container的直译,简称LXC。早期,大家都认为硬件抽象层基于hypervisor的虚拟化方式可以最大程度上提供虚拟化管理的灵活性。各种不同操作系统的虚拟机都能通过hypervisor(KVM、XEN等)来衍生、运行、销毁。然而,随着时间推移,用户发现hypervisor这种方式麻烦越来越多。为什么?因为对于hypervisor环境来说,每个虚拟机都需要运行一个完整的操作系统以及其中安装好的大量应用程序。但实际生产开发环境里,我们更关注的是自己部署的应用程序,如果每次部署发布我都得搞一个完整操作系统和附带的依赖环境,那么这让任务和性能变得很重和很低下。

基于上述情况,人们就在想,有没有其他什么方式能让人更加的关注应用程序本身,底层多余的操作系统和环境我可以共享和复用?换句话来说,那就是我部署一个服务运行好后,我再想移植到另外一个地方,我可以不用再安装一套操作系统和依赖环境。

Linux Container容器技术的诞生就解决了上述问题,IT里的容器技术是英文单词Linux Container的直译,简称LXC。它是一种内核轻量级的操作系统层虚拟化技术。Linux Container主要由Namespace和Cgroup两大机制来保证实现。那么Namespace和Cgroup是什么呢?Namespace主要用来隔离运行环境,Cgroup就负责资源管理控制作用,比如进程组使用CPU/MEM的限制,进程组的优先级控制,进程组的挂起和恢复等等。

Docker入门:容器&虚拟机&Docker_第1张图片 图1 LXC框架

 

2.Container(容器)和虚拟机的比较

传统的虚拟化技术,创建环境和部署应用都很麻烦,而且应用的移植性也很繁琐,比如你要把vmware里的虚拟机迁移到KVM(Kernel-based Virtual Machine)里就很繁琐,因为需要做镜像格式的转换。虚拟机会将虚拟硬件、内核(即操作系统)以及用户空间打包在新虚拟机当中,虚拟机能够利用“虚拟机管理程序”运行在物理设备之上。虚拟机依赖于hypervisor,其通常被安装在“裸金属”系统硬件之上,这导致hypervisor在某些方面被认为是一种操作系统。一旦 hypervisor安装完成, 就可以从系统可用计算资源当中分配虚拟机实例了,每台虚拟机都能够获得唯一的操作系统和负载(应用程序)。简言之,虚拟机先需要虚拟一个物理环境,然后构建一个完整的操作系统,再搭建一层Runtime,然后供应用程序运行。 简而言之,虚拟机迁移是对内核或者虚拟硬件进行打包。

相比于虚拟机,容器拥有更高的资源使用效率,因为它并不需要为每个应用分配单独的操作系统——实例规模更小、创建和迁移速度也更快。这意味相比于虚拟机,单个操作系统能够承载更多的容器。云提供商十分热衷于容器技术,因为在相同的硬件设备当中,可以部署数量更多的容器实例。此外,容器易于迁移,但是只能被迁移到具有兼容操作系统内核的其他服务器当中,这样就会给迁移选择带来限制。 那么有了容器技术就简单了,总结下容器技术主要有三个特点:

  • 极其轻量:只打包了必要的Bin/Lib;
  • 秒级部署:根据镜像的不同,容器的部署大概在毫秒与秒之间,速度很快;
  • 易于移植:一次构建,随处部署;
  • 弹性伸缩:Kubernetes、Swam、Mesos这类开源、方便、好使的容器管理平台有着非常强大的弹性管理能力。 
Docker入门:容器&虚拟机&Docker_第2张图片 图2 VM和Container对比图

 

3.Docker的介绍

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。总的来说,容器不等同于Docker,容器更不是虚拟机

Docker提供了一个打包和运行应用的隔离环境,称之为容器,Docker的隔离和安全特性允许你在一个主机同时运行多个容器,而且它并不像虚拟机那样重量级,容器都是基于宿主机的内核运行的,它是轻量的,不管你运行的是ubuntu, debian还是其他Linux系统,用的内核都是宿主机内核。Docker提供了工具和平台来管理容器,而Docker Engine则是一个提供了大部分功能组件的CS架构的应用。如下图所示,Docker Engine负责管理镜像,容器,网络以及数据卷等。

Docker入门:容器&虚拟机&Docker_第3张图片 图3 Docke架构图

 

Docker使用C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信。Client通过RESTFUL API发送Docker命令到docker daemon进程,docker daemon进程执行镜像编译,容器启停以及分发,数据卷管理等,一个client可以与多个docker daemon通信。 下面是Docker组件的一些基本介绍:

  • Docker Daemon:Docker后台进程,用于管理镜像,容器以及数据卷。
  • Docker Client:用于与Docker Daemon交互。
  • Docker Registry:用于存储Docker镜像,类似github,公共的Registry有Docker Hub和Docker Cloud。
  • Images:镜像是用于创建容器的一种只读模板。镜像通常基于一个基础镜像,在此基础上安装额外的软件。比如你的nginx镜像可能基于debian然后安装nginx并添加配置,你可以从Docker Hub上拉取已有的镜像或者自己通过Dockerfile来编译一个镜像。
  • Containers:容器是镜像的一个可运行示例,我们可通过Docker client或者API来创建,启停或者删除容器。默认情况下,容器与宿主机以及其他容器已经隔离,当然你可以控制隔离容器的网络或者存储的方式。
  • Services:服务是docker swarm引入的概念,可以用于在多宿主机之间伸缩容器数目,支持负载均衡已经服务路由功能。
Docker入门:容器&虚拟机&Docker_第4张图片 图4 运行流程图

 

4.写在最后

更多关于Docker具体操作命令,请移步如下地址:https://www.toutiao.com/a6635265441574945294/?iid=45777806261&app=news_article&group_id=6635265441574945294×tamp=1545097996

本文是题主查看了Docker相关的文章后总结出来为了便于查看,另外一方面也会在后来做该方面工作的时候可以继续去补充,希望能和大家共勉,一起去贡献出更精彩的博客!

注:文章内容引用列表: 

1.十分钟明白什么是容器技术

2.容器和虚拟机的区别

3.几张图帮你理解 docker 基本原理及快速入门

4.Docker底层技术详解


题主只是一个入门的小学生,希望大家多多指教!如果该帖子确实能解决您的问题,望多多留言,谢谢!


 

你可能感兴趣的:(软件架构,服务器部署与配置)