如何使用Doctl,官方DigitalOcean命令行客户端

来自菜鸟教程
跳转至:导航、​搜索

本教程的早期版本由 Brennen Bearnes 编写。

介绍

DigitalOcean 的基于 Web 的控制面板提供了用于管理 Droplets 的点击式界面。 但是,如果您有许多 Droplet 要管理,需要在没有可用图形桌面的情况下从终端管理 Droplet,或者有可以从可编写脚本的界面中受益的任务,您可能更喜欢命令行工具。

doctl 是官方的 DigitalOcean 命令行客户端。 它使用 DigitalOcean API 来提供对大多数帐户和 Droplet 功能的访问。

先决条件

要遵循本教程,您将需要:

本教程旨在作为 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 的情况下需要资源名称(例如 标签)。 要确认您的意图,您需要通过 yyes 回答确认问题来确认所有删除操作。

doctl compute droplet delete 123456
OutputWarning: Are you sure you want to delete droplet(s) (y/N) ? 

不提供答案或提供与 yyes 不同的答案将取消操作而不删除资源。 您可以使用 --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 级任务。