Docker 客户端有两种替代选项:名为 docker
的命令行应用程序或名为 Docker Desktop 的基于图形用户界面 (GUI) 的应用程序。 CLI 和 Docker Desktop 均与 Docker 服务器交互。 来自 CLI 或 Docker Desktop 的 docker
命令使用 Docker REST API 将指令发送到本地或远程服务器,并作为用于管理容器的主要接口。
Docker 服务器是一个名为 dockerd
的守护程序。 dockerd
守护程序通过 Docker REST API 响应来自客户端的请求,并且可以与其他守护程序进行交互。 此外,Docker 服务器还负责跟踪容器的生命周期。
Docker 客户端和 Docker 守护进程之间的通信是通过 Unix socket 进行的。Docker 守护进程会在 /var/run/docker.sock 路径下创建一个 Unix socket 文件,Docker 客户端可以通过连接到该 socket 文件来与 Docker 守护进程通信。
Docker 客户端在与 Docker 守护进程通信时,可以通过使用 Docker Remote API 进行各种操作,例如启动和停止容器、创建镜像和获取容器和镜像的信息。Docker Remote API 可以通过 HTTP 或 HTTPS 协议进行通信,也可以通过 Unix socket 进行通信。使用 Unix socket 进行通信可以提高性能并提供更好的安全性,因为数据不需要通过网络传输,并且 Unix socket 文件默认只能被本地用户访问。
在 Docker 中,可以通过在 Docker 客户端中指定 -H unix:///var/run/docker.sock 参数来连接到 Docker 守护进程的 Unix socket。例如,以下命令将使用 Unix Domain socket 连接到 Docker 守护进程:
docker -H unix:///var/run/docker.sock ps
Unix Domain socket 主要用于同一主机上的进程间通信。与主机间的进程通信不同,它不是通过 “IP地址 + TCP或UDP端口号” 的方式进程通信,而是使用 socket 类型的文件来完成通信,因此在稳定性、可靠性以及效率方面的表现都很不错。
Unix Domain socket 的 IPC 看起来与使用环回接口(localhost或127.0.0.1)的常规 TCP 套接字的 IPC 非常相似,但有一个关键区别:性能。虽然 TCP 环回接口可以跳过完整 TCP/IP 网络堆栈的一些复杂性,但它保留了许多其他(ACK、TCP 流量控制等)功能。这些复杂性是为可靠的跨机器通信而设计的,但在单个主机上它们是不必要的负担。、
还有一些额外的区别。例如,由于 Unix Domain socket使用文件系统中的路径作为其地址,我们可以使用目录和文件权限来控制对套接字的访问,从而简化身份验证。
当然,与 TCP 套接字相比,Unix Domain socket的一大缺点是单主机限制。对于为使用 TCP 套接字而编写的代码,我们只需将地址从本地更改为远程,一切都会继续工作。也就是说,Unix Domain socket的性能优势足够显着,而且 API 与 TCP 套接字非常相似,因此很可能编写同时支持两者的代码(单个主机上的 Unix Domain socket,用于远程 IPC 的 TCP),而且难度很小。
创建docker镜像的三种方法,分别是基于已有的容器创建、基于本地模板创建、以及dockerfile创建。
基于已有的容器创建主要是使用docker commit命令。实质就是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。
命令:docker commit 选项 容器ID/名称 仓库名称:标签
常用的选项:
-m:说明信息
-a:作者
-p:生成过程中停止容器的运行(一般不会使用)
docker commit -m "this is a test image" -a "duzhe" mytomcat testimg:1.0
sha256:aa675b1e538c0463c4d0df45e8be34c7cfe71225ec896009b0ee7a754b3db283
通过导入操作系模板文件可以生成镜像,模板可以从OPENVZ开源项目下载,下载地址为:
https://wiki.openvz.org/Download/template/precreated
Cat 镜像包 | docker import - 生成的镜像名:标签
cat ubuntu-12.04-x86_64-minimal.tar.gz | docker import - myubuntu:1
sha256:17dccdf9e0a761de3eb582d5ca370377aa602e0881e58ce07c76cf6223904bcd
Dockerfile结构的四个部分:基本镜像信息
,维护者信息
,镜像操作指令
和容器启动执行指令
mkdir dockerdir
cd dockerdir
FROM centos:7
MAINTAINER duzhe
ENV PATH $PATH:/usr/local/nginx/sbin
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]