一、什么是docker?
Docker 是 PaaS 提供商 dotCloud(现改名交docker inc) 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。
二、使用docker可以做什么?
快速一致的交付应用程序
允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作
三、docker组成
1. 服务端(docker守护进程)
一种称为守护进程的长期运行程序(dockerd命令)
Docker守护进程(dockerd)侦听Docker API请求并管理Docker对象(如图像,容器,网络和卷)。守护进程还可以与其他守护进程通信来管理Docker服务。
2. api
REST API指定程序可用于与守护进程进行通信并指示其执行操作的接口。
3. 客户端
命令行界面(CLI)客户端(docker命令)。
Docker客户端(docker)是许多Docker用户与Docker进行交互的主要方式。当你使用诸如docker run之类的命令时,客户端将这些命令发送到dockerd,dockerd执行这些命令。 docker命令使用Docker API。 Docker客户端可以与多个守护进程进行通信。
示意图:
image.guanshizhai.online/s
四、docker体系结构
docker使用客户端-服务器体系结构。
Docker客户端与Docker守护进程通信,Docker守护进程负责构建,运行和分发Docker容器。
Docker客户端和守护进程可以在同一个系统上运行,也可以将Docker客户端连接到远程Docker守护进程。 Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。
image.guanshizhai.online/s
五、docker基础对象
1. 镜像(Images)
图像是一个只读模板,带有创建Docker容器的说明。通常,图像基于另一张图像,并具有一些额外的自定义功能。
2. 容器(Containers)
容器是图像的可运行实例。可以使用Docker API或CLI创建,启动,停止,移动或删除容器。可以将容器连接到一个或多个网络,将存储器连接到它,甚至可以根据其当前状态创建新映像。
默认情况下,容器与其他容器及其主机相对隔离。可以控制容器的网络,存储或其他底层子系统与其他容器或主机的隔离程度。
容器由其图像定义,以及在创建或启动容器时提供给它的任何配置选项。当一个容器被移除时,其未被存储在永久存储器中的状态改变消失。
3. 服务(Services)
通过服务,可以跨多个Docker守护进程扩展容器,这些守护进程可以作为一个群组与多个管理人员和工作人员一起工作
六、docker使用到的linux特性
1. Namespaces
Docker使用名为空间的计算机来提供称为容器的独立工作空间。当你运行一个容器时,Docker会为该容器创建一组命名空间。
这些名称空间提供了一个隔离层。容器的每个方面都在单独的名称空间中运行,并且其访问权限限于该名称空间。
2. Docker引擎在Linux上使用如下的命名空间:
pid命名空间:进程隔离(PID:进程ID)。
网络名称空间:管理网络接口(NET:网络)。
ipc命名空间:管理对IPC资源的访问(IPC:InterProcess Communication)。
mnt命名空间:管理文件系统挂载点(MNT:挂载)。
uts命名空间:隔离内核和版本标识符。 (UTS:Unix分时系统)。
3. Control groups
Linux上的Docker Engine也依赖于另一种称为控制组(cgroups)的计算机。 cgroup将应用程序限制为一组特定的资源。控制组允许Docker引擎将可用硬件资源共享给容器,并可选地强制实施限制和约束。例如,可以限制可用于特定容器的内存。
4. Union file systems
联合文件系统或UnionFS是通过创建图层进行操作的文件系统,使它们非常轻巧和快速。 Docker引擎使用UnionFS为容器提供构建块。 Docker引擎可以使用多种UnionFS变体,包括AUFS,btrfs,vfs和DeviceMapper。
5. Container format
Docker引擎将名称空间,控制组和UnionFS组合成一个名为容器格式的包装器。默认的容器格式是libcontainer。将来,Docker可以通过与诸如BSD Jails或Solaris Zones等计算机集成来支持其他容器格式。