在浏览器中使用Docker
作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/
Docker是典型的client/server模式的软件,它的API允许用户通过各种HTTP方法与Docker server交互,而浏览器又是典型的HTTP客户端,所以就可以通过浏览器来展示docker的强大功能,而不需要用户自己安装docker或运行用户并不了解的命令。
通过浏览器使用docker,可以在启动Docker daemon时指定打开的端口和启用CORS选项,并且通过任意的web服务器来serve docker-terminal库来实现。
REST API最通常的用法是将其通过web server暴露出来,通过web页面上的JavaScript来调用。因为Docker正好是通过REST API来进行所有的交互的,所以就可以通过同样的方式来控制docker。
虽然docker daemon默认是监听在本地的socket上,但可以通过配置将其监听在tcp端口上。另外,简单来说,CORS它是一种是允许当前域(domain)的资源(比如html/js/web service)被其他域(domain)的脚本请求访问的机制,通常由于同域安全策略(the same-origin security policy)浏览器会禁止这种跨域请求。在这种情况下,它允许一个web服务器监听在不同于docker daemon的另外一个端口上,此端口是用来serve你的Docker Terminal页面的。综上所述,可以使用如下命令启动docker daemon:
$ sudo /usr/bin/docker daemon -H 0.0.0.0:2375 --api-enable-cors
上面的命令使docker daemon监听在2375端口上,并且启用了CORS选项。尤其需要注意的是上述命令并没有启用安全,所有可以连接到主机2375端口的程序都能控制docker daemon,在实际生产环境中请启用tls安全设置。
在满足了上述的前提条件后,可以使web服务器启动并运行了,首先下载Docker-Terminal的代码:
$ git clone https://github.com/aidanhs/Docker-Terminal.git
$ cd Docker-Terminal
然后使用一个基于Python的web服务器来将Docker-Terminal运行起来:
$ python2 -m SimpleHTTPServer 8000
上述命令使用了Python的内置模块,可以用来serve某个文件夹中的静态文件。可以使用任何等同的web服务器。
然后,就可以通过浏览器访问http://your-host-ip:8000来启动一个容器。例如,在Available images下拉框中选择ubuntu:14.04的镜像后,点击Start image按钮,就可以使用一个基于Ubuntu镜像的容器了:
下图展示了Docker terminal是怎样连接起来的。