通常情况下Docker只在 UNIX socket下生效. 一般只有本地调用生效. 如果要远程调用可以有以下三种方式:
用SSH和socat处理链路
第一种实现起来比较繁琐. 第二种需要在客户端服务端安装 socat. 由于其连接未加密,任何人都可以拦截Docker的通讯信息.
直到有了 Docker implemented TLS auth in 0.10才完美的解决了这个问题.
有三种简单的方式来实现:
需要生成三种证书类型:
CA 证书用来生成客户端和服务端证书
远端Docker使用的客户端生疏
服务端使用的Docker daemon证书
我用Ruby写了生成这三种证书的代码.你只需要拷贝相关的代码 clone this repository 并运行下面的命令:
$ gem install certificate_authority $ ruby certgen.rb example.com CA certificates are in ~/.docker/ca Client certificates are in ~/.docker Server certificates are in ~/.docker/example.com
证书都生成在~/.dockerpath下.
脚本生成 Docker daemon需要的键值和证书~/.docker/example.com(example.com 是你的域名).
在服务端拷贝到~/.dockerdirectory下:
rsync -ave ssh ~/.docker/example.com/ root@example.com:~/.docker/
Docker daemon在0.10后支持--tlsverify 来提供加密的远端连接
假设你是用的是 Ubuntu 12.04 LTS并已经安装了Docker .其它环境下可能有些不同.
只需要在/etc/default/docker加入下面配置:
DOCKER_OPTS="--tlsverify -H=unix:///var/run/docker.sock -H=0.0.0.0:4243 --tlscacert=/root/.docker/ca.pem --tlscert=/root/.docker/cert.pem --tlskey=/root/.docker/key.pem"
之后重启 Docker daemon:
service docker restart
如果有错Docker daemon就会启动不了. 可以通过 under/var/log/upstart/docker.log来调试.
现在通过--tlsverify就能连接到远端Docker实例了:
docker --tlsverify -H tcp://example.com:4243 images
它会使用 ~/.docker下的证书来验证连接. 如果使用的是其他的类型, 可以通过--tls* 来查询docker --help的帮助文档 documentation.
官方的TLS创建网址在这里 can be found on Docker site.
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务