如何使用Doctl,官方DigitalOcean命令行客户端
本教程的早期版本由 Brennen Bearnes 编写。
介绍
DigitalOcean 的基于 Web 的控制面板提供了用于管理 Droplets 的点击式界面。 但是,如果您有许多 Droplet 要管理,需要在没有可用图形桌面的情况下从终端管理 Droplet,或者有可以从可编写脚本的界面中受益的任务,您可能更喜欢命令行工具。
doctl
是官方的 DigitalOcean 命令行客户端。 它使用 DigitalOcean API 来提供对大多数帐户和 Droplet 功能的访问。
先决条件
要遵循本教程,您将需要:
- 按照项目的安装和配置说明安装了
doctl
的本地计算机。
本教程旨在作为 doctl
大部分操作的参考。 因为 doctl
命令与 API 非常相似,阅读 API 文档 和 如何使用 DigitalOcean API v2 也可能会有所帮助。
通用 doctl
用法
调用命令
在 doctl
中,通过给实用程序一个命令、一个或多个子命令,有时还有一个或多个指定特定值的选项来调用各个功能。 命令分为三个主要类别:
account
获取账户相关信息auth
用于使用 DigitalOcean 进行身份验证compute
用于管理基础设施
要查看所有命令的概览,您可以单独调用 doctl
。 要查看三个主要类别之一下的所有可用命令,您可以使用 doctl category
,例如 doctl compute
。 有关特定命令的使用指南,请输入带有 --help
标志的命令,如 doctl compute droplet --help
。
以 JSON 格式检索数据
在脚本环境中,或者在使用数据处理工具在命令行上工作时,从命令中获取机器可读的输出通常很有帮助。
默认情况下,doctl
将其输出格式化为人类可读的文本列,但可以使用 --output json
选项生成详细的 JSON 输出。
doctl compute droplet get droplet_id --output json
Sample Output{ "id": droplet_id, "name": "droplet_name", "memory": 1024, "vcpus": 1, "disk": 30, "region": { "slug": "nyc3", "name": "New York 3", "sizes": [ ...
除了是大多数编程语言中标准库可读的格式之外,JSON 输出还可以允许对 Droplet 和其他资源进行更细粒度的检查。
格式化
从输出中仅获取一组字段通常很有用。 为此,您可以使用 --format
标志,后跟所需字段的列表。 例如,如果您只想获取 Droplet 的 ID、名称和 IP 地址,可以使用以下命令:
doctl compute droplet list --format "ID,Name,PublicIPv4"
Sample outputID Name Public IPv4 50513569 doctl-1 67.205.152.65 50513570 test 67.205.148.128 50513571 node-1 67.205.131.88
模板
doctl compute droplet get
命令支持输出模板,可让您自定义输出格式。 要使用此功能,请通过 --template
标志指定 Go 格式模板 。
例如,如果您想以 droplet_name: droplet_name
格式获取 Droplet 的名称,您可以使用以下 get
命令:
doctl compute droplet get 12345678 --template "droplet_name: {{ .Name}}
Outputdroplet_name: ubuntu-1gb-nyc3-01
使用资源
列出资源
要获取资源列表,例如 Droplets,您可以使用不带参数的 list
命令。
doctl compute droplet list
Sample output for list commandID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags 50513569 test-1 67.205.152.65 512 1 20 nyc1 Ubuntu 16.04.2 x64 active 50513571 test-2 67.205.131.88 512 1 20 nyc1 Ubuntu 16.04.2 x64 active 50513570 site 67.205.148.128 512 1 20 nyc1 Ubuntu 16.04.2 x64 active
list
命令支持将 glob 作为可选参数。 glob 表示带有通配符的模式,可用于按名称过滤特定资源。 例如,要获取名称以 test
开头的 Droplet 列表,可以使用以下命令:
doctl compute droplet list 'test*'
Sample output for list command with 'doctl-' as globID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags 50513569 test-1 67.205.152.65 512 1 20 nyc1 Ubuntu 16.04.2 x64 active 50513571 test-2 67.205.131.88 512 1 20 nyc1 Ubuntu 16.04.2 x64 active
创建资源
创建资源需要更长的命令和更详细的参数。 要创建 Droplet,您需要使用关联的 slug 指定要使用的图像、数据中心区域以及所需的 Droplet 类型。 请参阅 用于液滴计划更改的新尺寸段 以找到您要使用的段。 或者,运行 doctl compute size list
命令。
例如,以下命令创建一个名为 test 的 64 位 Debian 8 Droplet,具有 1GB 内存、一个 CPU、一个 SSH 密钥并启用备份。
doctl compute droplet create test --size s-1vcpu-1gb --image debian-8-x64 --region nyc1 --ssh-keys 4d:23:e6:e4:8c:17:d2:cf:89:47:36:b5:c7:33:40:4e --enable-backups
你会看到这个输出:
Sample Droplet creation outputID Name Public IPv4 Memory VCPUs Disk Region Image Status 11450164 test 1024 1 30 nyc1 Debian 8.3 x64 new
删除资源需要资源 ID 作为参数,或者在给定资源不存在 ID 的情况下需要资源名称(例如 标签)。 要确认您的意图,您需要通过 y
或 yes
回答确认问题来确认所有删除操作。
doctl compute droplet delete 123456
OutputWarning: Are you sure you want to delete droplet(s) (y/N) ?
不提供答案或提供与 y
或 yes
不同的答案将取消操作而不删除资源。 您可以使用 --f
(--force
) 标志使 doctl
假设一个肯定的答案而无需明确提供它:
doctl compute droplet delete -f 123456
查找资源的唯一标识符
Droplet 创建命令需要一系列标识符,例如 nyc1
用于 NYC1 区域,debian-8-x64
用于 Debian 映像,以及 SSH 密钥指纹,例如 4d:23:e6:e4:8c:17:d2:cf:89:47:36:b5:c7:33:40:4e
。
许多资源,例如 Droplet 和图像,由 DigitalOcean 数据库中唯一的值(通常是数字)标识。
您可以从 API 获取大多数命令所需的唯一标识符:
命令 | 笔记 |
---|---|
doctl compute droplet list
|
你的飞沫。 一些命令也取这个名字; 大多数需要 ID 列中的数值。 |
doctl compute ssh-key list
|
与您的帐户关联的 SSH 密钥。 对于 Droplet 创建,您可以指定 数字 ID 或 指纹。 |
doctl compute region list
|
可用区域。 使用 Slug 列中的字符串。 |
doctl compute image list
|
可用映像,包括快照、备份和基本分发映像。 使用 Slug 列中的字符串来创建新的 Droplet。 |
doctl compute size list
|
可用的液滴尺寸。 使用 Slug 列中的字符串。 |
doctl compute tag list
|
可用标签。 使用 Name 列中的字符串。 |
使用液滴
创建、删除和检查 Droplet
doctl compute droplet
命令可让您创建、删除和检查 Droplet。 同样,大多数用于处理单个 Droplet 的命令都需要 Droplet 的唯一 ID,这些可以在 doctl droplet list
的输出中找到。
doctl compute droplet 子命令
|
笔记 |
---|---|
actions droplet_id
|
显示对 Droplet 执行的操作的历史记录。 |
backups droplet_id
|
列出 Droplet 的备份。 |
create name --size s-1vcpu-1gb --image image_slug --region nyc1
|
创建一个液滴。 大小、图像和区域都是强制性的。 |
delete droplet_id_or_name
|
按 id 或名称删除 Droplet。 |
get droplet_id
|
获取特定 Droplet 的详细信息。 |
kernels droplet_id
|
列出 Droplet 的内核。 |
list
|
列出您当前的 Droplets。 |
neighbors droplet_id
|
列出在与特定 Droplet 相同的物理硬件上运行的 Droplet。 |
snapshots droplet_id
|
列出 Droplet 的快照。 |
tag droplet_id/droplet_name
|
标记一个 Droplet。 |
untag droplet_id/droplet_name
|
取消标记 Droplet。 |
启动液滴操作
doctl compute droplet-action
命令可让您触发 Droplet 的各种操作,包括电源管理操作和切换功能,如备份和专用网络。
doctl compute droplet-action 子命令
|
笔记 |
---|---|
get droplet_id --action-id action_id
|
获取有关 Droplet 操作的详细信息。 |
disable-backups droplet_id
|
禁用 Droplet 的备份。 |
reboot droplet_id
|
重新启动一个 Droplet。 |
power-cycle droplet_id
|
关闭 Droplet 并重新打开。 |
shutdown droplet_id
|
关闭 Droplet。 |
power-off droplet_id
|
关闭 Droplet。 Droplet 必须通电。 通常最好从 Droplet 本身的命令行执行此操作,以防止数据丢失。 |
power-on droplet_id
|
打开 Droplet 的电源。 必须关闭 Droplet 的电源。 |
power-reset droplet_id
|
电源重置液滴。 |
enable-ipv6 droplet_id
|
为 Droplet 启用 ipv6。 |
enable-private-networking droplet_id
|
为 Droplet 启用 私有网络 。 |
upgrade droplet_id
|
升级 Droplet。 |
restore droplet_id --image-id image_id
|
将 Droplet 还原到特定的备份映像。 image_id 必须是 Droplet 的备份。
|
resize droplet_id --size 2gb
|
调整 Droplet 的大小。 必须关闭 Droplet 的电源。 默认情况下,磁盘不会调整大小,这允许 Droplet 降级。 您可以使用 --resize-disk 标志调整磁盘大小。
|
rebuild droplet_id --image-id image_id
|
从特定图像重建 Droplet。 |
rename droplet_id --droplet-name new_name
|
将 Droplet 重命名为 new_name 。
|
change-kernel droplet_id --kernel-id kernel_id
|
将 Droplet 的内核更改为 kernel_id 。
|
snapshot droplet_id --snapshot-name snapshot_name
|
拍摄 Droplet 的快照,将其命名为 snapshot_name 。
|
使用 SSH
建立 SSH 连接
为了使用 SSH 连接到单个 Droplet,通常需要知道其 IP 地址或完全限定域名。 您可以改为使用 doctl
通过名称、数字 ID 或私有 IP 连接到 Droplet:
doctl compute ssh droplet_name
doctl compute ssh droplet_id
doctl compute ssh --ssh-private-ip droplet_private_ip
此外,您可以使用 --ssh-command
标志提供在 SSH 连接建立后执行的命令。 这将运行命令,其输出将打印在您的本地终端上,然后 SSH 会话将关闭。
doctl compute ssh --ssh-command command
注意:SSH命令转发目前在Windows上不可用。
默认 SSH 用户名为 root(CoreOS 为 core),默认端口为 22
。 您可以使用标志来设置非默认值并启用其他功能:
旗帜 | 描述 |
---|---|
--ssh-user string
|
用于 SSH 会话的用户名。 |
--ssh-port int
|
SSH 会话的端口。 |
--ssh-key-path string
|
SSH 密钥的路径。 |
--ssh-agent-forwarding
|
启用代理转发。 |
您还可以更改配置文件中的默认配置值。 项目的 README 文件 有更多关于如何执行此操作的详细信息。
使用 SSH 密钥
您可以使用 doctl compute ssh-key
命令管理与您的帐户关联的 SSH 公钥。 大多数引用 SSH 密钥的命令都接受密钥的数字 ID 或其指纹。
doctl compute ssh-key 子命令
|
笔记 |
---|---|
list
|
列出与您的帐户关联的 SSH 密钥。 |
get ssh_key_id_or_fingerprint
|
通过数字 ID 或键的指纹获取特定键的信息。 |
create new_key_name --public-key "public_key"
|
通过指定其内容将公钥与您的帐户相关联。 |
import new_key_name --public-key-file ~/.ssh/id_rsa.pub
|
通过指定源文件将公钥与您的帐户相关联。 |
delete ssh_key_id_or_fingerprint
|
通过数字 ID 或指纹从您的帐户中删除密钥。 |
update ssh_key_id_or_fingerprint --key-name new_key_name
|
通过数字 ID 或指纹更改密钥的名称。 |
使用浮动 IP
浮动 IP 是一个可公开访问的静态 IP 地址,可以分配给您的一个 Droplet。 有关该功能的详细说明,您可以阅读 如何在 DigitalOcean 上使用浮动 IP。 您可以使用 doctl compute floating-ip
操作浮动 IP。
doctl compute floating-ip 子命令
|
笔记 |
---|---|
list
|
列出所有浮动 IP 地址。 |
get floating_ip_address
|
获取浮动 IP 地址的详细信息。 |
create --region nyc1
|
在 nyc1 区域创建一个浮动 IP。
|
delete floating_ip_address
|
删除浮动 IP 地址。 |
为 Droplet 分配浮动 IP
doctl compute floating-ip-action
命令用于从 Droplet 分配或取消分配浮动 IP。
doctl compute floating-ip-action 子命令
|
笔记 |
---|---|
assign floating_ip droplet_id
|
通过其数字 ID 为 Droplet 分配一个浮动 IP。 |
unassign floating_ip
|
取消分配浮动 IP。 |
get floating_ip action_id
|
通过数字 ID 获取有关浮动 IP 操作的详细信息。 |
使用域
doctl compute domain
命令用于管理域。 有关该主题的广泛概述,请参阅我们的 管理 DNS 系列简介。
doctl compute domain 子命令
|
笔记 |
---|---|
list
|
列出域。 |
create domain_name --ip-address droplet_ip_address
|
使用 droplet_ip_address 的默认记录创建域。
|
get domain_name
|
获取域记录。 |
delete domain_name
|
删除域。 |
管理域记录
doctl compute domain records
命令可用于创建、删除、更新或获取有关域的 DNS 记录的信息。
doctl compute domain records 子命令
|
笔记 |
---|---|
list domain_name
|
列出给定域的记录。 |
create domain_name --record-type record_type
|
为域创建记录。 |
delete domain_name record_id
|
按数字 ID 删除记录。 |
update domain_name --record-id record_id
|
按数字 ID 更新记录。 |
使用块存储卷
创建、删除和检查块存储卷
doctl compute volume
命令可用于创建、删除或获取有关 DigitalOcean 块存储卷的信息。 有关此功能的更多信息,请阅读我们关于 如何在 DigitalOcean 上使用块存储的指南。
doctl compute volume 子命令
|
笔记 |
---|---|
list
|
列出卷。 |
create volume_name --region volume_region --size volume_size
|
创建一个卷。 名称、区域和大小是必填项。 |
get volume_ID
|
通过数字 ID 获取音量。 |
delete volume_ID
|
删除卷。 |
snapshot volume_ID
|
快照卷。 |
启动卷操作
doctl compute volume-action
命令允许您触发卷的操作,包括将卷附加到 Droplet 以及从 Droplets 中分离卷。
doctl compute volume-action 子命令
|
笔记 |
---|---|
attach volume_id droplet_id
|
将卷附加到 Droplet。 |
detach volume_id droplet_id
|
从 Droplet 中分离一个卷。 |
resize volume_id --region volume_region --size new_size
|
调整卷的大小。 |
使用负载均衡器
doctl compute load-balancer
命令可用于创建、删除或获取有关 DigitalOcean 的负载均衡器的信息。 有关此功能的更多信息,请阅读我们的 DigitalOcean 负载均衡器简介 。
doctl compute load-balancer 子命令
|
笔记 |
---|---|
list
|
列出负载均衡器。 |
create --name lb_name --region lb_region --tag-name tag_name --forwarding-rules forwarding_rule
|
创建负载均衡器。 名称、区域、Droplet ID 的标签或列表以及至少一个转发规则是强制性的。 |
update --name lb_name --region lb_region --tag-name tag_name --forwarding-rules forwarding_rule
|
创建负载均衡器。 名称、区域、Droplet ID 的标签或列表以及至少一个转发规则是强制性的。 |
get lb_ID
|
获取负载均衡器。 |
delete lb_ID
|
删除负载均衡器。 |
add-droplets lb_ID --droplet-ids droplet_ID
|
将 Droplet 添加到负载均衡器。 |
remove-droplets lb_ID --droplet-ids droplet_ID
|
从负载均衡器中删除 Droplet。 |
add-forwarding-rules lb_ID --forwarding-rules forwarding_rule
|
将转发规则添加到负载均衡器。 |
remove-forwarding-rules lb_ID --forwarding-rules forwarding_rule
|
从负载均衡器中删除转发规则。 |
当用作 doctl
的参数时,转发规则应表示为:entry_protocol:protocol,entry_port:port,target_protocol:protocol,target_port:port
。
管理证书
doctl compute certificate
子命令允许您上传和管理 SSL 证书、私钥和证书链。
doctl compute certificate 子命令
|
笔记 |
---|---|
list
|
列出所有证书。 |
get certificate_id
|
通过 ID 获取证书。 |
create --name certificate_name --leaf-certificate-path leaf_certificate_path
|
创建证书。 名称和叶证书路径是必需的。 |
delete certificate_id
|
按 ID 删除证书。 |
使用快照
doctl compute snapshot
命令可用于列出、删除或获取有关 Droplet 和卷快照的信息。
doctl compute snapshot 子命令
|
笔记 |
---|---|
list
|
列出所有快照。 |
get snapshot_ID
|
获取快照。 |
delete snapshot_ID
|
删除快照。 |
要创建新快照,您需要使用相关资源命令树下的相应命令。 例如:
doctl compute droplet-action snapshot droplet_ID
从 Droplet 创建快照。doctl compute volume snapshot volume_ID
从卷创建快照。
使用图像
doctl compute image
命令允许您管理所有映像,包括分发映像、应用程序映像和用户创建的映像,例如备份和快照。 我们推荐使用 snapshot
命令来管理快照,因为它提供了更多的细节,具有删除功能,并且支持块存储快照。
doctl compute image 子命令
|
笔记 |
---|---|
list --public
|
列出所有图像。 |
list-distribution --public
|
列出所有可用的分发映像。 |
list-application --public
|
列出所有可用的 一键式应用程序。 |
list-user
|
列出所有用户创建的图像。 |
get image_id
|
通过 ID 获取图像。 |
update image_id --name image_name
|
更新图像的名称。 姓名是必填项。 |
delete image_id
|
按 ID 删除图像。 |
调用图像操作
doctl compute image-action
命令允许您传输图像并获取有关对图像调用的操作的详细信息。
doctl compute image-action 子命令
|
笔记 |
---|---|
get image_id --action-id action_id
|
通过 ID 获取图像的操作。 操作 ID 是必需的。 |
transfer image_id --region region
|
将图像传输到另一个区域。 图像 ID 和区域是必需的。 |
使用防火墙
doctl compute firewall
命令允许您创建和管理防火墙,包括创建和维护规则。 有关使用 doctl
管理防火墙的更多信息,请查看 如何使用 Doctl 使用 DigitalOcean 云防火墙保护 Web 服务器基础架构教程。
doctl compute firewall 命令
|
笔记 |
---|---|
list
|
列出所有防火墙。 |
list-by-droplet droplet_id
|
按 Droplet 的数字 ID 列出所有防火墙。 |
create --name firewall_name --inbound-rules inbound_rules --outbound-rules outbound_rules
|
创建防火墙。 名称和至少一个入站或出站规则是强制性的。 |
update firewall_id --name firewall_name --inbound-rules inbound_rules --outbound-rules outbound_rules
|
更新防火墙。 数字 ID、名称和至少一个入站或出站规则是必需的。 |
get firewall_id
|
通过数字 ID 获取防火墙。 |
delete firewall_id
|
按数字 ID 删除防火墙。 |
add-droplets firewall_id --droplet-ids droplet_IDs
|
通过数字 ID 将 Droplet 添加到防火墙。 |
remove-droplets firewall_id --droplet-ids droplet_IDs
|
通过数字 ID 从防火墙中删除 Droplet。 |
add-tags firewall_id --tag-names tags
|
将标签添加到防火墙。 |
remove-tags firewall_id --tag-names tags
|
从防火墙中删除标签。 |
add-rules firewall_id --inbound-rules inbound_rules --outbound-rules outbound_rules
|
将入站或出站规则添加到防火墙。 |
remove-rules firewall_id --inbound-rules inbound_rules --outbound-rules outbound_rules
|
删除防火墙的入站或出站规则。 |
当用作 doctl
的参数时,入站或出站规则应表示为:protocol:protocol,ports:ports,droplet_id:droplet-id
。
使用标签
标签用于将自定义标签应用于资源,使您可以轻松过滤它们。 您可以在 如何标记 DigitalOcean Droplets 教程 中了解有关标签的更多信息。
doctl compute tag 子命令
|
笔记 |
---|---|
create tag_name
|
创建标签。 |
get tag_name
|
按名称获取标签。 |
list
|
列出所有标签。 |
delete tag_name
|
按名称删除标签。 |
使用您的帐户
阅读您帐户的操作历史记录
DigitalOcean 系统记录对您的 Droplet、浮动 IP 和其他资源采取的操作的历史记录。 您可以使用 doctl compute action
命令访问此数据:
doctl compute action list
您可以查看特定 Droplet 的操作,如下所示:
doctl compute droplet actions droplet_id
检索您的帐户信息
您可以发现有关您帐户的基本详细信息,例如您配置的电子邮件地址和 Droplet 限制:
doctl account get
由于 API 请求是有速率限制的,因此查看您最近发出了多少请求以及限制何时重置可能会有所帮助:
doctl account ratelimit
结论
doctl
实用程序是在命令行管理 Droplet 和其他资源的有用工具。 它可以大大减少日常开发和管理任务所需的与基于 Web 的界面的手动交互量。
除了了解 底层 API 之外,您可能还想探索 库,其中包含流行编程语言 的 API,以及 工具,例如用于自动化系统的 Ansible 级任务。