Docker 初探 (7) - 部署
参考资料:
Docker Cloud
Docker Cloud
提供了 image
托管,持续集成和集群部署等服务,之前已经使用 Docker ID
登录过 Docker Cloud
并上传 image
。使用 Docker Cloud
在云服务提供商的虚拟主机上部署和运行 app 是官方推荐的做法,要实现这一点,需要:
- 将
Docker Cloud
连接至偏好的云服务提供商,并对Docker Cloud
赋予适当的权限以自动容易化这些虚拟主机 - 使用
Docker Cloud
创建计算资源和创建集群 - 部署应用
Docker Cloud
提供了与亚马逊 AWS 和 微软 Azure 的自动集群部署服务,但其他云服务商需要自行在 Docker Cloud UI 上手动操作,文本介绍手动进行部署的路径。
Docker Cloud Agent
Docker Cloud
允许使用任何 Linux 发行版的系统来部署 container
,但要在这些 Linux
主机上安装 Docker Cloud Agent
才能对它们进行远程管理。
Docker Cloud Agent
目前仅支持 x64 架构。
Docker Cloud Agent
会将所有需要的包都安装好,并自动移除任何现有的 Docker
引擎。之后仍然可以在这些主机上执行 docker
命令,但会多出一些以 dockercloud/
开头的运行的系统 container
。
通过 Docker Cloud 网页界面安装 Docker Cloud Agent
- 开始安装之前,请确保目标主机上的
- TCP/UDP 6783 端口: 允许该节点加入
Docker Cloud
账号下所有节点组成的叠加网络以支持服务发现 - TCP 2375 端口: 允许
Docker CLoud
与目标主机的Docker
守护进程直接通过 TSL 认证进行通信,如果该端口未开启,Docker Cloud
会让目标主机建立一个反向隧道以访问该端口。
- 登录
Docker Cloud
,导航至节点仪表盘(Nodes
)。 - 点击
Bring your own node
。弹出窗口会展示目前支持的所有 Linux 发行版本并生成一行包含 token 的命令以使主机上的Docker Cloud Agent
与Docker Cloud
通信。 - 在目标 Linux 主机上执行该命令,该命令会下载一个脚本,安装并配置好
Docker Cloud Agent
,最后将其注册到Docker Cloud
。1
2
3
4
5*******************************************************************************
Docker Cloud Agent installed successfully
*******************************************************************************
You can now deploy containers to this node using Docker Cloud - 当出现以上提示之后,关闭弹出框,刷新节点仪表盘,发现该主机已经与
Docker Cloud
关联:
该主机现在已经准备好部署了。
通过 CLI 安装 Docker Cloud Agent
也可以借助 docker-cloud
命令来安装 Docker Cloud Agent
,这种方式对熟悉命令行工具的同学来说更明白发生了什么,首先,需要在目标主机上安装 docker-cloud
CLI,参考The Docker Cloud CLI可以不同的方式安装。
使用 python pip
安装 docker-cloud
CLI:
1 | $ pip install docker-cloud |
使用以下命令取得一个节点的 token
:
1 | $ docker-cloud node byo |
执行上述代码将下载一段脚本,安装并运行 dockercloud-agent
服务,然后在配置文件中设置 token,该 token
有一定的时限,服务向 Docker Cloud
进行注册,并开始下载 docker
引擎:
1 | 2018/05/11 20:18:34 Registering in Docker Cloud via PATCH: https://cloud.docker.com/api/agent/v1/node/d4289a2e-4a98-4767-b9c8-8c67b24a2ca3 |
该过程由网络带宽决定耗时长短,下载过程中 Docker Cloud
会一直打印 docker 端口未开启:
1 | Waiting for docker port to be open... |
这是因为 docker
引擎还未在目标主机上就绪,无法找到端口 2375,由于笔者的云服务器只有 1Mbps 的带宽,下载该包的时间超过了 Docker Cloud
的超时时间,于是造成 Docker Cloud
等待超时,在 docker
包下载完成后,尝试重新启动 dockercloud-agent
服务,而由于 token 又过期了,所以只能重新申请 token 并设置配置文件:
1 | Cannot register node in Docker Cloud: unauthorized. Please try again with a new token. |
取得新的 token 后,需要修改配置文件中的 token 值,重新启动服务。
1 | $ dockercloud-agent set Token=xxx |
卸载 Docker Cloud Agent
1 | $ apt-get remove dockercloud-agent |
升级 Docker Cloud Agent
1 | $ apt-get update && apt-get install -y dockercloud-agent |