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)
- 可以让多容器共享一个镜像的文件系统,多有的数据都从镜像中获取。
- 多个容器操作同一个文件,会在每个容器的文件系统中生成一个副本,每个容器修改的都是自己的副本,相互隔离,互不影响。
- 用时分配(allocate-on-demand)
- 启动一个容器并不会为这个容器预分配一些磁盘空间,而是当有新文件写入时才会按需分配新空间。
2.5 联合文件系统
docker的联合文件系统:aufs和overlay。
当前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,除最上面一层读写,其余均为只读。


- overlay:
overlayfs在linux主机上只有两层,一个目录在下层,用来保存镜像(docker),另外一个目录在上层,用来存储容器信息。在overlayfs中,底层的目录叫做lowerdir,顶层的目录称之为upperdir,对外提供统一的文件系统为merged。当需要修改一个文件时,使用CoW将文件从只读的Lower复制到可写的Upper进行修改,结果也保存在Upper层。在Docker中,底下的只读层就是image,可写层就是Container。增加了磁盘inode负担
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 网络
- 单宿主机容器互联方式:
link连接:可实现两个容器的连接,但方向是单向的。
- docker网络:
bridge:类似虚拟机里的NAT[2](默认网络类型)host:与宿主机共享网络,与宿主机网卡信息一致,类似跑在宿主机上一样。none:只有lo本地回环网卡,没有IP信息,无法连接公网。contrainer:多个容器连接到此网络。可以互相通信,不和宿主机共享。
- 跨
docker host网络:flannel
flannel是kubernetes默认提供的网络插件(一种“覆盖网络”overlay network)。使用etcd存储、分配、维护子网信息,最终实现一个大网络的不同子网互通。
3、docker-compose
3.1 特点
docker-compase是做容器编排的小工具。
docker-compase将所管理的容器分为三层:工程(project)、服务(service)、容器(container)。
一个工程可以包含多个服务。每个服务定义中定义了容器运行的镜像、参数、依赖,一个服务中科包含多个容器实例。
3.2 使用
使用docker-compase的三步:
dockerfile:定义应用的运行环境(镜像)docker-compase.yaml:定义组成应用的各个服务docker-compase up -d:构建并启动整个应用
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个sector组成一个block。文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。 ↩︎
网络地址转换:由vnet8网卡分配IP,网关,dns,虚拟机可以设置自己想要的IP,指定的网段。虚拟机的IP只需要配置NAT网段中的IP,访问外部host可以通过宿主机IP访问。它不需要有外部网络独立的IP;因为NAT配置不变,宿主机连接的网络变化,不影响虚拟机。
↩︎

浙公网安备 33010602011771号