前言

Docker管理(和编排)工具发展很快,强大的k8s、mesos,还有小型的shipyard等。本文只介绍一下Docker API远程管理的机制,以及Shipyard的一些特点。

Docker的对外接口

Docker的对外接口有两类,一类是只接受本地请求(较安全)的接口,另外一类则允许远程(和本地)连接请求(较不安全)的接口。

安全的unix sock模式(默认)

默认运行后Docker会监听unix:///var/run/docker.sock,这个对外接口只允许本地root用户连接。由于限定了本地和root用户,所以较为安全。shipyard使用的就是这个接口。

Docker client在执行$ docker pull ubuntu默认连接的就是unix:///var/run/docker.sock。

方便的TCP模式

启动Docker时加上-H tcp://[host]:[port][path]参数,即可启用TCP模式。这个对外的tcp接口则允许本地和远程的所有连接(在此端口上)。

输入以下命令启动TCP模式的Docker:

$ sudo docker daemon -H 0.0.0.0:5555 &

此时,Docker client也必须通过-H参数指定Docker server地址:

$ docker -H tcp://127.0.0.1:5555 pull ubuntu

启动Docker时支持多个-H参数,即对外提供多个接口:

$ sudo docker daemon -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &

$ docker pull ubuntu # 使用默认的unix sock模式

$ docker -H tcp://127.0.0.1:2375 pull ubuntu # 使用TCP模式

修改为TCP模式后,由于对外公开了可连接的端口,无疑增加了安全风险,所以此模式下Docker不能部署在开放网络中。

Shipyard

Shipyard是一个轻量级的Docker管理工具,它使用unix sock接口管理Docker。Shipyard官方提供的deploy方式是将Shipyard作为一个container部署在Docker服务器中。在部署时,其使用volume将Docker服务器的unix sock mapping到container内部:

docker run -v /var/run/docker.sock:/var/run/docker.sock (省略一些参数) shipyard:shipyard

虽然Shipyard是轻量级管理工具,但其近期基于Docker Swarm重新构建后,具备了基本的container cluster功能。

Shipyard作为API Proxy

上面提到过,虽然Docker可以配置TCP模式以支持远程管理,但有安全隐患。而Shipyard则对外提供了具有认证/授权的API接口,所以可以用Shipyard的API作为Docker管理的Proxy。同时,Shipyard也兼容Docker Remote API,会将此类API直接转发给Docker处理。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐