使用 Docker Remote API 提供 Docker 容器远程终端服务
管理 Docker Container 不在本项目的范围之内, 这是 Kubernetes 这种容器管理平台做的事情
本项目旨在为容器 Web 云服务平台提供一个与已运行的 Docker Container 建立终端通信的后端服务
$ go build
$ ./docker-entry
2018/10/18 18:15:48 Load Config
Listen 127.0.0.1:8888 ...
quick_start: 默认true, 是否开启快速开始; 如果开启快速开始, 直接在浏览器访问当前服务, 在页面中输入 Node/Container, 就可以打开一个连接到 Docker 容器的 Web 终端debug: 默认false, 是否开启调试; 如果开启, 会在命令行打印一些日志信息enable_sign: 默认false, 是否开启接口签名app_keys: 默认为空 k-v 表, 如果开启enable_sign, 则会启用接口签名认证docker_proto: 默认http, Docker api protodocker_serve_port: 默认2375, Docker service portdocker_api_version: 默认v1.24, Docker api version, 仅支持v1.24以上版本(以下没有相应 api)listen: 默认127.0.0.1:8888, 当前服务的监听地址
路径: /etc/docker-entry.json
格式: json
如果存在, 则加载; 不存在
加载修改后的配置文件, 不需要停止服务:
$ kill -USR1 <pid>
pid为当前服务进程 id
本项目用到了 3 个 Docker Remote API:
-
/containers/{id}/exec: Create an exec instance, 返回一个 Exec instance ID
id: ID or name of container -
/exec/{id}/start: 启动之前创建的 exec instance, 得到执行结果或与之前建立流通信
id: Exec instance ID- 注意: 因为我们要为 Docker 提供一个远程终端, 因此要使用 socket 通信的方式, 构造一个 post 请求, 与 Node 上的容器服务建立一个 Tcp 连接, 从而建立流通信
- Hijacking
-
/exec/{id}/resize: Resize the TTY session used by an exec instance
id: Exec instance ID- Query Param:
w- 宽度h- 高度, 单位都是字符
可以使用 xterm.js 作为 Web 前端, 使用本项目作为后端, 实现一个 Web 容器远程终端, 从而在浏览器上操作向容器发送命令
-
Docker Remote API 版本历史: Docker Remote API 版本变更, 并提供各个 API 版本文档的入口
-
xterm.js: 配合
xterm.js使用更佳哦!
