3、Docker容器

3、Docker容器

1、定义

Docker:Linux容器技术是一种轻量化的虚拟化技术,由go语言开发。

2、优势

2.1 特点

  • 轻量:只打包了需要的bins/libs(命令和库文件)。与宿主机共享OS。
  • 部署快:容器镜像相对较小,实现秒级部署。
  • 移植性好:一次构建,随处部署运行(Build once,Run anywhere)。
  • 资源利用率更高:相较于虚拟机无需装系统,故而几乎没有额外的CPU、内存消耗。

2.2 内核技术

Docker用到的内核技术:namespace(实现资源隔离),cgroups(实现资源限制)。

  • 在同一个namespace下的进程可以感知到彼此的变化,对外界一无所知;
  • control group主要用来对共享资源隔离、限制、审计。

2.3 与LXC区别

LXC:Linux container,可提供轻量级的虚拟化。

Docker底层就是使用了LXC实现的,docker以LXC为基础,实现了更多更强的功能。

2.4 存储驱动

Docker存储驱动:写时复制和用时分配。

  • 写时复制cow(copy-on-write)
  1. 可以让多容器共享一个镜像的文件系统,多有的数据都从镜像中获取。
  2. 多个容器操作同一个文件,会在每个容器的文件系统中生成一个副本,每个容器修改的都是自己的副本,相互隔离,互不影响。
  • 用时分配(allocate-on-demand)
  1. 启动一个容器并不会为这个容器预分配一些磁盘空间,而是当有新文件写入时才会按需分配新空间。

2.5 联合文件系统

docker的联合文件系统:aufsoverlay

当前docker支持的分层文件系统参见下表:

Linux发行版本 推荐使用的存储系统 可替代的其他技术
Ubuntu overlay2 or aufs overlay, devicemapper, zfs, vfs
Debian overlay2, aufs or devicemapper overlay, vfs
CentOS overlay2 overlay, devicemapper, zfs, vfs
Fedora overlay2 overlay, devicemapper, zfs, vfs

overlay使用两层分层,共享数据方式是通过硬链接,使用硬链接与底层数据进行关联,他是通过硬链接与底层存储建立连接的。

  • aufs分层:将多个物理位置不同的文件目录「联合」起来,挂载到某一个目录下,形成一个抽象的文件系统。多个容器共享一个image,除最上面一层读写,其余均为只读。

aufs图解

aufs官方

  • overlayoverlayfs在linux主机上只有两层,一个目录在下层,用来保存镜像(docker),另外一个目录在上层,用来存储容器信息。在overlayfs中,底层的目录叫做lowerdir,顶层的目录称之为upperdir,对外提供统一的文件系统为merged。当需要修改一个文件时,使用CoW将文件从只读的Lower复制到可写的Upper进行修改,结果也保存在Upper层。在Docker中,底下的只读层就是image,可写层就是Container增加了磁盘inode负担

overlay

  • overlay2:使用两层分层,驱动原生地支持多层lower overlay镜像(最多128层),相比overlay驱动消耗更少的inode[1]。在overlayFS,中底层目录叫lowerdir,顶层目录叫upperdir,对外统一提供服务的是merged,当修改下层文件时,会触发写时复制。
查看当前版本的docker采用的分层类型:
> cat /etc/docker/daemon.json
{
  "storage-drives": "overlay2",
  "insecure-registries": ["0.0.0.0/0"],
  "registry-mirrors": ["https://f0z3hvz3.mirror.aliyuncs.com"]
}

2.6 网络

  • 单宿主机容器互联方式:
  1. link连接:可实现两个容器的连接,但方向是单向的。
  • docker网络:
  1. bridge:类似虚拟机里的NAT[2](默认网络类型)
  2. host:与宿主机共享网络,与宿主机网卡信息一致,类似跑在宿主机上一样。
  3. none:只有lo本地回环网卡,没有IP信息,无法连接公网。
  4. contrainer:多个容器连接到此网络。可以互相通信,不和宿主机共享。
  • docker host网络:flannel

flannelkubernetes默认提供的网络插件(一种“覆盖网络”overlay network)。使用etcd存储、分配、维护子网信息,最终实现一个大网络的不同子网互通。

3、docker-compose

3.1 特点

docker-compase是做容器编排的小工具。

docker-compase将所管理的容器分为三层:工程(project)、服务(service)、容器(container)。

一个工程可以包含多个服务。每个服务定义中定义了容器运行的镜像、参数、依赖,一个服务中科包含多个容器实例。

3.2 使用

使用docker-compase的三步:

  1. dockerfile:定义应用的运行环境(镜像)
  2. docker-compase.yaml:定义组成应用的各个服务
  3. docker-compase up -d:构建并启动整个应用

  1. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个sector组成一个block。文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。 ↩︎

  2. 网络地址转换:由vnet8网卡分配IP,网关,dns,虚拟机可以设置自己想要的IP,指定的网段。虚拟机的IP只需要配置NAT网段中的IP,访问外部host可以通过宿主机IP访问。它不需要有外部网络独立的IP;因为NAT配置不变,宿主机连接的网络变化,不影响虚拟机。NAT模式原理图 ↩︎

posted @ 2022-03-12 00:04  落叶寒鸦  阅读(232)  评论(0)    收藏  举报