
Docker 架构Docker 使用客户端-服务器架构。Docker 客户端与 Docker 守护进程对话后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序使用 REST API通过 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose它允许您使用由一组容器组成的应用程序。Docker 守护进程Docker 守护程序 ( dockerd) 侦听 Docker API 请求并管理 Docker 对象例如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。Docker 守护进程绑定到 Unix 套接字而不是 TCP 端口。默认情况下Unix 套接字归用户所有root其他用户只能使用sudo. Docker 守护程序始终以root用户身份运行Docker 客户端Docker 客户端 ( docker) 是许多 Docker 用户与 Docker 交互的主要方式。Docker客户端可以通过docker APIrestful API和Docker守护进程交互docker API可以直接通过http访问或者使用SDK。SDK请参考官网地址https://docs.docker.com/engine/api/sdk/如Java我们就下载Java的SDK即可。注意Java不是官方提供的SDK官方只提供Go和Python 的SDKDocker 桌面Docker Desktop 是一个应用程序适用于Mac 或 Windows 环境能够构建和共享容器化应用程序和微服务。提供界面化的操作。Docker RegistryDocker Registry存储 Docker 镜像。Docker 仓库用来保存镜像可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com )提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库Repository每个仓库可以包含多个标签Tag每个标签对应一个镜像。通常一个仓库会包含同一个软件不同版本的镜像而标签就常用于对应该软件的各个版本。我们可以通过 仓库名:标签 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签将以 latest 作为默认标签。Docker 对象docker中有很多对象如镜像Image、容器Container、网络Network、卷Volume、插件Plugin和其他对象等镜像Image镜像是一个只读模板其中包含创建 Docker 容器的说明。通常一个镜像基于另一个镜像并带有一些额外的自定义。我们可以创建自己的镜像也可以只使用其他人创建并在注册表中发布的镜像。要构建自己的镜像一般我们会用到Dockerfile 关于Dockerfile 我们后续再解释。容器Container容器是镜像的可运行实例。可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。也可以将容器连接到一个或多个网络。默认情况下一个容器与其他容器及其主机的隔离相对较好。我们可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。容器由其镜像以及在创建或启动它时提供给它的任何配置选项定义。当容器被移除时任何未存储在持久存储中的状态更改都会消失。网络Network每个容器都是相对隔离的环境有自己的网络空间意味着它们不能访问其它容器的sockets或接口。卷Volume是宿主机器的文件系统的一部分。Docker推荐使用卷进行持久化数据。卷可支持卷驱动(volume drivers)该驱动允许用户将数据存储到远程主机或云服务商(cloud provider)或其它。没有名字的卷叫匿名卷(anonymous volume)有名字的卷叫命名卷(named volume)。匿名卷没有明确的名字当被初始化时会被赋予一个随机名字。下一篇CentOS安装docker