docker的C/S模式及远程访问
docker C/S模式server-clientdocker的C/S模式结构可以如下图:docker 的守护进程即server端运行在宿主机上,守护进程在启动后一直在后端运行,而用户不会直接和守护进程交互,而是和docker的客户端即docker命令行接口交互,从用户接受命令传递给守护进程。守护进程接受到命令后执行并返回运行结果。server-RemoteAPI...
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服务就可以本地连接了。
更多推荐
所有评论(0)