Docker——理解容器

原文连接

目的:共享和复用底层多余的操作系统和环境——部署一个服务运行好后,我再想移植到另外一个地方,我可以不用再安装一套操作系统和依赖环境。

比如你要把vmware里的虚拟机迁移到KVM里就很繁琐(需要做镜像格式的转换)。那么有了容器技术就简单了,总结下容器技术主要有三个特点:

  1. 极其轻量:只打包了必要的Bin/Lib;

  2. 秒级部署:根据镜像的不同,容器的部署大概在毫秒与秒之间(比虚拟机强很多);

  3. 易于移植:一次构建,随处部署;

  4. 弹性伸缩:Kubernetes、Swam、Mesos这类开源、方便、好使的容器管理平台有着非常强大的弹性管理能力。

容器技术: 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求。

镜像(Mirroring):是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。

虚拟机,虚拟出整个操作系统。

容器,虚拟出一个小规模的环境。

Docker。需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎

想要搞懂Docker,其实看它的两句口号就行。

第一句:“Build, Ship and Run”。搭建、发送、运行;

第二句:“Build once,Run anywhere(搭建一次,到处能用)”

Eg:空地上搭建一所房子,我需要砍树,搬木头,画图纸,房子建好后住了几天,想搬到另外的空地,我又需要同样的操作(砍树,搬木头,画图纸),但是,跑来一个老巫婆,教会我一种魔法。这种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。等我跑到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。

Docker技术的三大核心概念,分别是:
镜像(Image):放在包里的副本房子
容器(Container):在空地上,用魔法造好的房子
仓库(Repository):背包

说白了,这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。

也就是说,每次变出房子,房子是一样的,但生活用品之类的,都是不管的。谁住谁负责添置。 每一个镜像可以变出一种房子。那么,我可以有多个镜像呀!
也就是说,我盖了一个欧式别墅,生成了镜像。另一个哥们可能盖了一个中国四合院,也生成了镜像。还有哥们,盖了一个非洲茅草屋,也生成了镜像。。。
这么一来,我们可以交换镜像,你用我的,我用你的,岂不是很爽? 于是乎,就变成了一个大的公共仓库。
负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。
不是任何人建的任何镜像都是合法的。万一有人盖了一个有问题的房子呢? 所以,Docker Registry服务对镜像的管理是非常严格的。
最常使用的Registry公开服务,是官方的Docker Hub,这也是默认的Registry,并拥有大量的高质量的官方镜像。

就在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。

就在这个时候,K8S出现了。

K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。

Kubernetes这个单词来自于希腊语,含义是舵手或领航员。K8S是它的缩写,用“8”字替代了“ubernete”这8个字符。

一个K8S系统,通常称为一个K8S集群(Cluster)。

这个集群主要包括两个部分:一个Master节点(主节点),一群Node节点(计算节点)

一看就明白:Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。

深入来看这两种节点。首先是Master节点。

Master节点包括API Server、Scheduler、Controller manager、etcd。

API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。

Scheduler负责对集群内部的资源进行调度,相当于“调度室”。

Controller manager负责管理控制器,相当于“大总管”。

然后是Node节点。

Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。

Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。这段不太好理解,跳过吧。

Docker,不用说了,创建容器的。

Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。

Kube-proxy,主要负责为Pod对象提供代理。

Fluentd,主要负责日志收集、存储与查询。

Docker简记
docker是容器技术的代名词,容器的实现还有其他,集装箱是容器的思想。

虚拟服务器:VPS(Virtual Private Service,虚拟专用业务)主机,简称为虚拟主机。相对于真实主机而言,虚拟服务器是指采用特殊的软硬件技术把一台完整的服务器主机分成若干个主机。实际上是将真实的硬盘空间分成若干份,然后租给不同用户,每一台被分割的主机都具有独立的域名和IP地址,但共享真实主机的CPU、RAM、操作系统、应用软件等。

镜像是只读的指令模板,用于创建Docker容器。通常一个镜像会继承另一个镜像,然后扩展自定义的指令。

容器是镜像运行的一个实例,我们可以使用Docker的API或者是CLI来创建、运行、停止、移动或者删除容器。我们可以为容器绑定一个或多个网络或者一个磁盘卷(volume),也可以通过继承它来创建一个新的镜像。通常一个容器与另一个容器或者它的宿主机都是相对独立和隔离的。再容器停止运行后,他其中的所有的改变的状态如果没有保存,则都会消失。

注:
1、Docker后台服务监听REST接口的请求,管理Docker对象(docker镜像、容器、网络和磁盘卷),一个docker后台服务可以和其他docker后台服务进行通信,从而对它进行管理。

2、Docker客户端是和docker后台服务交互的主要工具,客户端把命令(docker run)发送到docker后台服务,再由后台执行该命令。docker客户端可以连接多个后台服务并与它们通信。

3、Docker仓库是用来存储Docker镜像的,Docker Hub和Docker cloud是所有人都能够使用的公共的Docker仓库。Docker默认从Docker Hub下载镜像,当然也可以自己搭建私有仓库。

4、Docker对象包括镜像、容器、网络、磁盘卷和插件等。我们再使用docker时,就会创建和使用Docker对象。

注:
1、P:‘docker’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

需要配置系统的环境变量,将docker.exe的路径配置在path中即可。

2、Kitematic是可视化管理 Docker,由于内网限制,无法进行操作。

3、使用端口2375来监听非加密请求,使用2376来监听加密请求。

4、docker里面由很多images,这个images可以从docker hub上面pull,也可以将本地的images push上去,docker用来管理images<创建、运行等>

5、创建磁盘卷。容器可以从中读取和存储数据,如果未指定名称,则docker会随机生成一个名称。

6、Namespace:隔离 Namespace 技术实际上修改了应用进程看待整个计算机“视图”,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容。

7、Linux Cgroups:限制是它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。

容器化项目:
Docker为应用程序的打包和运行提供了一种便捷的方式,使用Docker容器进行构建、运行、停止、启动、修改或者更新等操作都非常简单。

部署方式:
1、传统的应用程序部署为直接将应用程序安装到宿主计算机的文件系统上,然后编写命令脚本来运行它。从应用程序的角度而言,其环境包括宿主机上的操作系统,运行环境,文件系统,网络配置和各种依赖。

缺点:难以迁移、不可在统一系统上运行不同版本的软件、服务端口占用、部署困难…

2、应用程序部署在虚拟机上,在宿主机上5个应用程序可以运行在5太虚拟机上,减少了资源、网络、端口带来的冲突,但是5个应用程序运行可能只需要几十兆的空间,如果是5台虚拟机就需要GB级别以上的空间,而且虚拟机的启动时间和CPU的使用肯定比应用程序自身消耗的多得多。

3、容器化部署应用,如同在虚拟机上部署文件一样,可以拥有自己的配置文件和依赖库,还可以拥有自己的网络接口,不会出现争用同一端口的问题,容易迁移。

虚拟机封装操作系统和应用,容器则直接封装应用,所以容器比虚拟机更轻量、灵活、资源利用率更高。

Docker镜像:用于运行容器的只读模板。

Docker容器:运行应用的标准化单元。

Docker仓库:存放镜像。

Docker引擎:用于在主机上创建、运行、管理容器。

Docker Machine:让用户在基础架构平台上快速部署Docker宿主机

Docker Swarm:让用户在集群环境中调度和运行容器

Docker Compose:让用户在集群环境中编排和部署应用

Kubernetes、Mesos:比较流行的第三方的管理容器工具

你可能感兴趣的:(容器)