docker C/S模式


server-client

docker的C/S模式结构可以如下图:
这里写图片描述

docker 的守护进程即server端运行在宿主机上,守护进程在启动后一直在后端运行,而用户不会直接和守护进程交互,而是和docker的客户端即docker命令行接口交互,从用户接受命令传递给守护进程。守护进程接受到命令后执行并返回运行结果。

server-RemoteAPI

除了使用docker命令行接口与server端进行通信外,还可以使用Remote API进行通信。它是一种RESTful风格的API,即可自行编写程序与docker进行集成。这样的C/S架构的模式如下图:
这里写图片描述

C/S模式的连接方式


docker客户端和守护进程间通过socket进行连接,docker提供了三种连接模式:

unix:///var/run/docker.sock
tcp://host:port
fd://socketfd

其中,unix:///var/run/docker.sock是默认的连接方式们可以通过配置修改为其他的连接方式。

这里写图片描述

这样意味着docker的client和server可以在一台服务器上或不同服务器上

实验


通过执行ps -ef | grep docker来查看docker是否运行,如果docker在运行,name执行docker version查看docker的版本

这里写图片描述

这里执行的docker version命令就是利用docker的client端来和server端进行交互的

想要通过RemoteAPI来和docker进行交互,则通过nc -U /var/run/docker.sock来连接docker的socket,然后通过输入GET请求来获取server端信息:
这里写图片描述

docker的远程访问


环境准备

两台虚拟机,安装docker,确保docker的client和version的版本一致。

修改服务端启动文件

在centos7下docker的启动文件为/etc/sysconfig/docker,打开这个文件,加入如下的一行:

OPTIONS='--label name=docker_server_1 -H tcp://0.0.0.0:2375'

-H 在启动中指定docker的socket连接方式,远程连接指定tcp连接。

修改完后重启服务端docker服务:

service docker restart

然后查看本机的ip地址,这里我的是:192.168.177.138,在客户端使用curl命令进行远程连接:

curl http://192.168.177.138:2375/info

这里写图片描述

可以看到成功显示出了info接口的信息,且label的名字是在server端设置的label名,说明客户端成功远程连接了server端。

上边的通过curl的方式连接其实是RESTfulAPI的连接,也可以通过docker的client命令行连接,同样通过-H指定连接方式,命令如下:

docker -H tcp://192.168.177.138:2375/ info

同样输出了第一台服务器docker的info信息

简化连接命令

上述的连接命令都要使用-H来制定连接的服务端ip,docker提供了默认的环境变量DOCKER_HOST,通过设置它的值为需要连接的服务端ip来在命令中省去-H参数,设置如下:

export DOCKER_HOST="tcp://192.168.177.138:2375/"

这样,现在使用命令docker info连接的就是服务端的docker的info信息了。

当使用完毕,可以将这个环境变量置空:export DOCKER_HOST="",这样再连接就是本地docker了。

设置docker远程连接的主机可以连接本机

在设置了远程连接的服务器上运行docker info会发现:

这里写图片描述

这时可以这样设置,修改启动配置文件中刚增加的OPTIONS为:

OPTIONS='--label name=docker_server_1 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'

可以看出-H指定的连接方式可以是多个

然后重启docker服务就可以本地连接了。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐