Docker 公司

公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hykes 创立。

docker 公司刚开始是是一个提供产品即服务的提供商。底层上使用了 docker 技术,后来因为业务不景气,所以就将 docker 开源开来,公司火了,但是 docker 之父已经不在原来的公司工作了。

Docker 运行时与编排引擎

多数技术人员在说 docker 时,实际上就是指的 docker 引擎。

Docker 是用于运行和编排基础设施工具。有 vmware 管理经验的读者可以将其类比为 ESXi

ESXi 是运行虚拟机的核心管理程序,而 docker 引擎是运行容器的核心容器运行时。

其他的产品或者是第三方的产品都是基于 docker 引擎进行开发和集成的。

image-20201001130150478

存储引擎可以从 docker 网站下载,也可以基于 github 上的源码进行构建。无论是开源还是商业版都会有 linux 和 windows 版本。

docker 引擎主要有两个版本,一个是企业版(EE),一个是社区版(CE)

EE 企业版会提供 12 个月的支持,而社区版每个版本只会支持 4 个月的支持。

版本号介绍

从 2017 年第一季度开始,Docker 版本号遵循 YY.MM-xx 格式,类似于 Ubuntu 等项目。例如,2018 年 6 月第一次发布的社区版本为 18.06.0-ce。

Docker 开源项目 Moby

docker 的开源项目已经改名为 Moby,也就是与 CE 已经分离,这是 Moby 的最新 logo。

image-20201001131427411

Moby 项目的目标就是基于开源,一直来发展 docker 这一个技术。

经过长期开源爱好者的努力,现已经成为 docker 的上游产品。

Moby 项目托管于 github 上的 moby/moby 项目中。不仅仅开发过程是公开的,甚至连发布过程也是公开进行的。

因为 Docker 是基于谷歌新开发的语言 GO 语言来实现,所以提交的 pull request 更多都是 GO 开发者们提交的。

容器生态

docker 的核心思想就是 “含电池,可拆卸”

比如 docker 内置的网络技术栈就是一个例子,可以替换为第三方的模块。

docker 技术刚开始时将 docker 内置网络技术栈替换是经常的事情,但是到后来因为 docker 公司是因此来盈利的。就会一直在改进。

直到现在,docker 的内置网络方案虽然可以移除,但是没人会那样做了,因为 docker 自带的网络方案已经足够好了。

良性的竞争是创新之母。

开放容器计划

不谈及开放容器计划(OCI)的话,对 Docker 和容器生态的探讨总是不完整的。

image-20201001132614188

OCI 是一个旨在对容器基础架构中的基础组件(如镜像格式与容器运行时)进行标准化的管理委员会。

同样,如果不谈历史的话,对 OCI 的探讨也是不完整的。

一个名为 CoreOS 的公司不喜欢 Docker 的某些行事方式。因此它就创建了一个新的开源标准,称作“appc”,该标准涉及诸如镜像格式和容器运行时等方面。

此外它还开发了一个名为 rkt(发音“rocket”)的实现。

两个处于竞争状态的标准将容器生态置于一种尴尬的境地。

这使容器生态陷入了分裂的危险中,同时也令用户和消费者陷入两难。虽然竞争是一件好事,但是标准的竞争通常不是。因为它会导致困扰,降低用户接受度,对谁都无益。

考虑到这一点,所有相关方都尽力用成熟的方式处理此事,共同成立了 OCI ——一个旨在管理容器标准的轻量级的、敏捷型的委员会。

OCI 已经发布了两份规范(标准):镜像规范和运行时规范。

提到这两项标准时,经常用到的比喻就是铁轨。它们就像对铁轨的尺寸和相关属性达成一致,让所有人都能自由地建造更好的火车、更好的车厢、更好的信号系统、更好的车站等。

只要各方都遵循标准就是安全的。没人会希望在铁轨尺寸问题上存在两个相互竞争的标准!

公平地说,这两个 OCI 规范对 Docker 的架构和核心产品设计产生了显著影响。Docker 1.11 版本中,Docker 引擎架构已经遵循 OCI 运行时规范了。

到目前为止,OCI 已经取得了不错的成效,将容器生态团结起来。然而,标准总是会减慢创新的步伐!尤其是对于超快速发展的新技术来说更是如此。

这在容器社区引起了热烈的讨论。这应该算是好事!容器技术正在重塑世界,走在技术前列的人们有热情、有想法,这很正常。

OCI 在 Linux 基金会的支持下运作,Docker 公司和 CoreOS 公司都是主要贡献者。

linux 安装 Dcoker

通过国内源进行一键安装 docker,使用的是 CE 版本,也就是社区版本,因为是免费的。

bash
[root@centos7 ~]# curl -sSL https://get.daocloud.io/docker | sh

最好通过非 root 用户来使用 docker,这时需要添加非 root 用过户到本地 Docker unix 组中。

bash
[dockeruser@centos7 ~]$ sudo usermod -aG docker dockeruser
[sudo] password for dockeruser: 
[dockeruser@centos7 ~]$ id dockeruser
uid=1000(dockeruser) gid=1000(dockeruser) groups=1000(dockeruser),994(docker)

验证安装结果

bash
[dockeruser@centos7 ~]$ docker --version
Docker version 19.03.13, build 4484c46d9d

[dockeruser@centos7 root]$ docker system info
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.13
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1062.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 2.918GiB
 Name: centos7.105
 ID: JREU:4KO5:6IY7:CVHA:JG3J:3RIS:T23T:5S6V:VIUG:KNDS:37EI:V3SY
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled