活动介绍

Docker入门指南:从基础到安装实践

立即解锁
发布时间: 2025-08-18 00:10:42 订阅数: 3
# Docker入门:从基础到安装的全面指南 ## 1. Docker分发组件概述 在容器化的世界里,我们已经了解了构建(Dockerfile和镜像)和运行时(容器)的相关知识。现在,让我们聚焦于最后一个关键元素——分发组件。Docker的分发组件由Docker注册表(registry)、索引(index)和仓库(repository)组成。 ### 1.1 Docker注册表、仓库和索引详解 - **注册表(Registry)**:Docker使用分层系统来存储镜像。注册表是存储Docker镜像的服务。例如,Docker Hub就是一个公开可用的注册表,它免费且拥有大量不断增长的现有镜像。你构建的镜像可以存储在远程注册表中供他人使用。 - **仓库(Repository)**:仓库是相关镜像的集合(命名空间),通常提供同一应用程序或服务的不同版本。它是具有相同名称和不同标签的不同Docker镜像的集合。例如,如果你的应用名为`hello-world-java`,注册表的用户名(或命名空间)为`dockerJavaDeveloper`,那么你的镜像将被放置在`dockerJavaDeveloper/hello-world-java`仓库中。你可以对镜像进行标记,并在单个命名仓库中存储具有不同ID的多个版本的镜像,通过特殊语法`username/image_name:tag`访问不同标记版本的镜像。Docker仓库与Git仓库非常相似,通过URI标识,可以是公共的或私有的,URI格式如下: ```plaintext {registryAddress}/{namespace}/{repositoryName}:{tag} ``` Docker Hub是默认的注册表,如果你不指定注册表地址,Docker将从Docker Hub拉取镜像。要在注册表中搜索镜像,可执行`docker search`命令,例如: ```bash $ docker search hello-java-world ``` 不指定远程注册表时,Docker将在Docker Hub上进行搜索,并输出符合搜索条件的镜像列表。 - **索引(Index)**:索引负责管理搜索、标记,以及用户账户和权限。实际上,注册表将身份验证委托给索引。执行远程命令(如`push`或`pull`)时,索引首先会查看镜像名称,然后检查是否有对应的仓库。如果有,索引会验证你是否有权限访问或修改该镜像。如果允许,操作将被批准,注册表将获取或发送镜像。 ### 1.2 相关操作示例 执行`docker pull ubuntu:16.04`命令时,它会从Docker Hub注册表中下载`ubuntu`仓库中标记为`16.04`的镜像。官方的`ubuntu`仓库不使用用户名,因此在这个示例中省略了命名空间部分。虽然Docker Hub是公共的,但使用Docker Hub用户账户可以免费获得一个私有仓库。 ### 1.3 知识总结 以下是我们目前所学内容的总结: | 概念 | 描述 | | ---- | ---- | | Dockerfile | 构建镜像的配方,是包含有序指令的文本文件,每个Dockerfile都有一个基础镜像 | | 镜像 | 文件系统的特定状态,是实时容器的只读、冻结的不可变快照,由代表不同时间点文件系统变化的层组成,Docker使用层缓存 | | 容器 | 镜像的运行时实例,可以运行或停止,同一镜像可以有多个容器运行。可以对容器的文件系统进行更改并提交,提交总是会创建一个新镜像,只有文件系统的更改可以提交,内存更改会丢失 | | 注册表 | 包含命名仓库的集合,仓库是通过ID跟踪的镜像集合,类似于Git仓库,可以推送和拉取镜像 | ## 2. Docker的额外工具和API Docker不仅仅是一个Dockerfile处理器和运行时引擎,它还提供了一系列广泛的工具和API,对开发者和DevOps人员的日常工作非常有帮助。 ### 2.1 开发环境集成工具 - **Kinematic**:适用于Windows和macOS X的桌面开发环境,方便使用Docker。 - **IntelliJ IDEA Docker集成插件**:对于Java开发者来说,在日常编程工作中特别有用。 - **Eclipse Docker工具**:从Eclipse Mars版本开始可用。 - **NetBeans**:支持Docker命令。无论选择哪种开发环境,这些插件都可以让你直接从喜欢的IDE中下载和构建Docker镜像、创建和启动容器以及执行其他相关任务。 ### 2.2 第三方工具 如今Docker非常流行,已经开发了数百个第三方工具来使其更加实用。其中最著名的是Kubernetes。此外,还有许多其他工具可以支持与Docker相关的操作,如持续集成/持续交付、部署和基础设施管理或镜像优化。目前有数十家托管服务支持运行和管理Docker容器。你可以在GitHub的`awesome Docker`列表(https://github.com/veggiemonk/awesome-docker )中找到精心整理的与Docker相关的工具和服务列表。 ### 2.3 Docker API - **远程API(Remote API)**:用于管理镜像和容器,使用此API可以将镜像分发到运行时Docker引擎。 - **统计API(Stats API)**:可以暴露容器的实时资源使用信息(如CPU、内存、网络I/O和块I/O),可用于创建工具来展示容器在生产系统中的行为。 ## 3. Docker安装指南 接下来,我们将了解如何在Windows、macOS和Linux操作系统上安装Docker,并运行一个示例`hello-world`镜像来验证设置并检查安装过程后一切是否正常工作。 ### 3.1 不同系统的安装特点 Linux是Docker的天然运行环境,在Linux上运行容器将使用本机的Linux内核。而在macOS和Windows上,需要虚拟化Linux内核才能运行Docker容器。Docker引擎在macOS或Windows上运行时,将使用专门为运行Docker容器而设计的轻量级Linux发行版,它完全从RAM运行,仅使用几兆字节,并且可以在几秒钟内启动。安装主Docker包后,macOS和Windows默认使用操作系统内置的虚拟化引擎。对于最新的原生Docker设置,在Windows上需要64位的Windows 10专业版或企业版;在macOS上,最新的Docker for Mac是一个从头开发的原生Mac应用程序,具有原生用户界面,集成了OS X原生虚拟化、虚拟机框架、网络和文件系统,要求操作系统为Yosemite 10.10.3或更高版本。 ### 3.2 macOS安装步骤 1. 访问http://www.docker.com ,进入“Get Docker macOS”部分,下载标准的原生dmg包并挂载。 2. 将包中的`Docker.app`移动到“Applications”文件夹,安装完成。运行Docker后,它将以小鲸鱼图标显示在macOS菜单中,启动过程中图标会动画显示,启动完成后会稳定显示。点击图标会显示一个包含Docker状态和一些额外选项的便捷菜单。 3. **偏好设置**: - **自动更新**:Docker for Mac具有自动更新功能,第一个“Preferences...”面板允许你自动检查更新,默认已标记。你也可以切换到测试版通道获取更新,但这会卸载当前稳定版本的Docker并销毁所有设置和容器,Docker会进行提醒。 - **文件共享**:“File Sharing”面板可以选择将macOS上的目录绑定挂载到后续运行的Docker容器中,目前可使用默认选择的目录。 - **高级设置**:“Advanced”面板可以调整计算机的资源(处理器数量和内存量)供Docker使用,对于初学者来说,默认设置通常是一个不错的开始。 - **代理设置**:“Proxies”面板可设置代理,你可以选择使用系统设置或手动设置。 - **守护进程设置**:可以编辑一些Docker守护进程设置,包括添加注册表和注册表镜像。“Advanced”选项卡包含一个文本字段,你可以在其中输入包含守护进程配置的JSON文本。还可以在“Daemon”面板中关闭Docker实验性功能,点击链接可查看GitHub页面上列出和解释的所有新实验性功能。 - **重置设置**:最后一个“Preferences...”面板是“Reset”,如果Docker无法启动或运行异常,可以尝试将Docker安装重置为出厂默认设置,但这会删除机器上所有已下载的镜像和容器,建议在有未推送的镜像时先进行备份。 - **Kitematic**:Docker菜单中的“Open Kitematic”是打开Kitematic应用程序的便捷快捷方式。如果尚未安装Kitematic,Docker会提供安装包链接。运行Kitematic时,它会首先显示Docker Hub登录屏幕,你可以注册并登录,也可以点击“Skip For Now”不登录直接查看镜像列表。为了测试安装,我们可以搜索`hello-java-world`镜像,拉取并启动它,Kitematic将显示运行容器的日志,输出著名的“hello world”消息。也可以在终端中执行以下命令进行测试: ```bash $ docker run milkyway/java-hello-world ``` 此时,你将在macOS终端中看到相同的问候消息。 ### 3.3 Linux安装步骤(以Ubuntu 16.04为例) ```mermaid graph LR A[允许apt使用HTTPS协议] --> B[添加Docker的apt仓库gpg密钥] B --> C[设置稳定仓库] C --> D[更新apt包索引] D --> E[确保使用官方Docker仓库] E --> F[安装最新版本的Docker] F --> G[验证Docker是否正常工作] G --> H[解决sudo问题] ``` 1. 允许`apt`包管理器通过HTTPS协议使用仓库: ```bash $ sudo apt-get install -y --no-install-recommends apt-transport-https ca-certificates curl software-properties-common ``` 2. 将Docker的`apt`仓库gpg密钥添加到`apt`源列表: ```bash $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add – ``` 如果成功,将返回简单的“OK”响应。 3. 设置稳定仓库: ```bash $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" ``` 4. 更新`apt`包索引: ```bash $ sudo apt-get update ``` 5. 确保`apt`安装程序使用官方Docker仓库而不是默认的Ubuntu仓库(默认仓库可能包含较旧版本的Docker): ```bash $ apt-cache policy docker-ce ``` 6. 安装最新版本的Docker: ```bash $ sudo apt-get install -y docker-ce ``` `apt`包管理器将下载许多包,包括所需的依赖项和`docker-engine`本身。 7. 验证Docker是否在Linux上正常工作: ```bash $ sudo docker run milkyway/java-hello-world ``` Docker引擎将从Docker Hub拉取`milkyway/java-hello-world`镜像及其所有层,并返回问候消息。 8. **解决`sudo`问题**:默认情况下,Docker守护进程以root用户身份运行,自Docker 0.5.2版本以来,Docker守护进程绑定到Unix套接字而不是TCP端口,该Unix套接字默认由root用户拥有,因此默认需要使用`sudo`访问。为了能够以普通用户身份运行Docker命令,可以按照以下步骤操作: - 添加`docker`组(如果不存在): ```bash $ sudo groupadd docker ``` - 将自己的用户添加到`docker`组(将用户名替换为你自己的用户名): ```bash $ sudo gpasswd -a jarek docker ``` - 重启Docker守护进程: ```bash $ sudo service docker restart ``` - 注销并重新登录,再次执行`docker run`命令,这次无需使用`sudo`: ```bash $ docker run milkyway/java-hello-world ``` 现在你可以作为普通非root用户使用Docker。 ### 3.4 Windows安装步骤 1. 原生Docker包可以在64位的Windows 10专业版或企业版上运行,它使用Windows 10的虚拟化引擎来虚拟化Linux内核,安装包是典型的`.msi`安装包。运行安装包后,它会显示友好消息,表明将在任务栏托盘中以小鲸鱼图标显示。 2. **图标和上下文菜单**:托盘中的Docker图标可以告知Docker引擎状态,还包含一个小但有用的上下文菜单。 3. **偏好设置**: - **常规设置**:“General”选项卡允许你设置Docker在登录时自动运行。如果你每天使用Docker,这可能是推荐的设置。你还可以标记自动检查更新并发送使用统计信息,建议开启此选项以帮助Docker团队改进工具。 - **共享驱动器**:“Shared Drives”选项卡允许你选择本地Windows驱动器,这些驱动器将可供后续运行的Docker容器使用。选择驱动器意味着可以将本地系统的目录映射到Docker容器中,作为Windows主机进行读取。 - **高级设置**:“Advanced”选项卡可以对运行在Windows PC上的Docker引擎进行一些限制,并选择包含Linux内核的虚拟机镜像的位置。默认值通常开箱即用,除非在开发过程中遇到问题,否则建议保持默认设置。 - **网络设置**:“Network”选项卡可以配置Docker与网络的交互方式,如子网地址和掩码或DNS服务器。 - **代理设置**:如果你的网络需要代理才能让Docker访问互联网,可以在“Proxies”选项卡中设置代理,对话框类似于其他应用程序中的代理设置,可以选择无代理、系统代理设置或手动设置(HTTP和HTTPS通信使用不同的代理)。 - **守护进程配置**:可以配置Docker守护进程,“Basic”开关表示Docker使用基本配置,你可以切换到“Advanced”并以JSON结构提供自定义设置。实验性功能与macOS上的设置相同,例如“Checkpoint & Restore”或启用Docker图形驱动插件。你还可以指定远程注册表列表,Docker将使用纯HTTP而不是HTTPS从不安全的注册表中拉取镜像。 - **重置设置**:“Reset”选项卡允许你重启或重置Docker到出厂设置,但要注意,重置会删除当前机器上的所有镜像和容器。 - **Kitematic**:Docker托盘图标上下文菜单中的“Open Kitematic...”选项是启动Kitematic的快捷方式。如果首次使用且未安装Kitematic,Docker会询问是否要先下载它。 4. **最后测试**:作为安装过程的最后一步,检查是否可以从命令提示符或PowerShell中运行Docker。在命令提示符或PowerShell中执行以下命令: ```bash docker run milkyway/java-hello-world ``` 通过以上步骤,你可以在不同操作系统上成功安装并初步使用Docker,开启容器化开发的旅程。 ## 4. 安装总结与常见问题处理 ### 4.1 安装总结 不同操作系统安装Docker的步骤各有特点,以下是一个简洁的对比总结: | 操作系统 | 安装包类型 | 关键步骤 | 注意事项 | | ---- | ---- | ---- | ---- | | macOS | dmg包 | 下载挂载,移动`Docker.app`到“Applications”文件夹,配置偏好设置 | 测试版更新会卸载稳定版并销毁设置和容器;重置会删除镜像和容器 | | Linux(Ubuntu 16.04) | 通过`apt`包管理器 | 配置仓库、更新索引、安装Docker,解决`sudo`问题 | 确保使用官方仓库;普通用户使用需添加到`docker`组 | | Windows | .msi安装包 | 运行安装包,配置偏好设置 | 需64位Windows 10专业版或企业版;重置会删除镜像和容器 | ### 4.2 常见问题处理 在安装和使用Docker过程中,可能会遇到一些常见问题,以下是一些解决思路: - **权限问题**:在Linux上,如果遇到权限不足的错误,如无法访问Unix套接字,可按照前面提到的步骤将用户添加到`docker`组并重启Docker守护进程。 - **网络问题**:如果在拉取镜像时遇到网络连接问题,可检查网络设置,确保网络正常。若需要代理,可在相应操作系统的Docker偏好设置中配置代理。 - **镜像拉取失败**:可能是由于注册表问题或镜像不存在。可检查镜像名称和标签是否正确,也可以尝试更换注册表或等待一段时间后再次尝试。 ## 5. Docker基础操作拓展 ### 5.1 镜像操作 - **查看本地镜像**:使用`docker images`命令可以查看本地已下载的所有镜像。 ```bash $ docker images ``` - **删除本地镜像**:使用`docker rmi`命令可以删除本地镜像,需要指定镜像的ID或标签。 ```bash $ docker rmi <image_id_or_tag> ``` ### 5.2 容器操作 - **查看运行中的容器**:使用`docker ps`命令可以查看当前正在运行的容器。 ```bash $ docker ps ``` 若要查看所有容器(包括已停止的),可使用`docker ps -a`命令。 ```bash $ docker ps -a ``` - **停止和启动容器**:使用`docker stop`命令停止正在运行的容器,使用`docker start`命令启动已停止的容器。 ```bash $ docker stop <container_id_or_name> $ docker start <container_id_or_name> ``` - **删除容器**:使用`docker rm`命令删除已停止的容器。 ```bash $ docker rm <container_id_or_name> ``` ### 5.3 操作流程总结 ```mermaid graph LR A[镜像操作] --> B[查看本地镜像] A --> C[删除本地镜像] D[容器操作] --> E[查看运行中的容器] D --> F[停止和启动容器] D --> G[删除容器] ``` ## 6. Docker的应用场景与优势 ### 6.1 应用场景 - **开发环境一致性**:不同开发者可以使用相同的Docker镜像来构建开发环境,确保代码在不同机器上的运行结果一致。例如,Java开发者可以使用包含特定Java版本和依赖的镜像,避免因环境差异导致的问题。 - **持续集成/持续交付(CI/CD)**:在CI/CD流程中,Docker可以将应用程序及其依赖打包成镜像,方便在不同阶段进行部署和测试。例如,在代码提交后,自动构建Docker镜像并进行测试,然后部署到生产环境。 - **微服务架构**:Docker容器非常适合微服务架构,每个微服务可以打包成一个独立的容器,便于管理和扩展。不同的微服务可以使用不同的编程语言和技术栈,通过容器进行隔离。 ### 6.2 优势 - **资源利用率高**:与传统虚拟机相比,Docker容器共享主机的内核,占用资源更少,启动速度更快。 - **隔离性好**:容器之间相互隔离,一个容器的故障不会影响其他容器的运行,提高了系统的稳定性和安全性。 - **可移植性强**:Docker镜像可以在不同的操作系统和环境中运行,方便应用程序的迁移和部署。 ## 7. 总结与展望 通过本文,我们全面了解了Docker的分发组件、额外工具和API,掌握了在不同操作系统上安装Docker的详细步骤,以及一些基础的操作和应用场景。Docker作为一种强大的容器化技术,为开发者和运维人员带来了诸多便利,能够提高开发效率、降低运维成本。 随着技术的不断发展,Docker相关的工具和生态系统也在不断完善。未来,我们可以期待更多创新的应用场景和更便捷的工具出现,进一步推动容器化技术的发展。同时,我们也应该不断学习和探索,充分发挥Docker的潜力,为软件开发和部署带来更多的价值。 希望本文能够帮助你快速入门Docker,并在实际项目中应用这一技术。如果你在使用过程中遇到问题或有更多的想法,欢迎在评论区留言交流。
corwn 最低0.47元/天 解锁专栏
赠100次下载
点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

SW_孙维

开发技术专家
知名科技公司工程师,开发技术领域拥有丰富的工作经验和专业知识。曾负责设计和开发多个复杂的软件系统,涉及到大规模数据处理、分布式系统和高性能计算等方面。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看

最新推荐

编程中的数组应用与实践

### 编程中的数组应用与实践 在编程领域,数组是一种非常重要的数据结构,它可以帮助我们高效地存储和处理大量数据。本文将通过几个具体的示例,详细介绍数组在编程中的应用,包括图形绘制、随机数填充以及用户输入处理等方面。 #### 1. 绘制数组图形 首先,我们来创建一个程序,用于绘制存储在 `temperatures` 数组中的值的图形。具体操作步骤如下: 1. **创建新程序**:选择 `File > New` 开始一个新程序,并将其保存为 `GraphTemps`。 2. **定义数组和画布大小**:定义一个 `temperatures` 数组,并设置画布大小为 250 像素×250 像

Hibernate:从基础使用到社区贡献的全面指南

# Hibernate:从基础使用到社区贡献的全面指南 ## 1. Hibernate拦截器基础 ### 1.1 拦截器代码示例 在Hibernate中,拦截器可以对对象的加载、保存等操作进行拦截和处理。以下是一个简单的拦截器代码示例: ```java Type[] types) { if ( entity instanceof Inquire) { obj.flushDirty(); return true; } return false; } public boolean onLoad(Object obj, Serial

ApacheThrift在脚本语言中的应用

### Apache Thrift在脚本语言中的应用 #### 1. Apache Thrift与PHP 在使用Apache Thrift和PHP时,首先要构建I/O栈。以下是构建I/O栈并调用服务的基本步骤: 1. 将传输缓冲区包装在二进制协议中,然后传递给服务客户端的构造函数。 2. 构建好I/O栈后,打开套接字连接,调用服务,最后关闭连接。 示例代码中的异常捕获块仅捕获Apache Thrift异常,并将其显示在Web服务器的错误日志中。 PHP错误通常在Web服务器的上下文中在服务器端表现出来。调试PHP程序的基本方法是检查Web服务器的错误日志。在Ubuntu 16.04系统中

AWSLambda冷启动问题全解析

### AWS Lambda 冷启动问题全解析 #### 1. 冷启动概述 在 AWS Lambda 中,冷启动是指函数实例首次创建时所经历的一系列初始化步骤。一旦函数实例创建完成,在其生命周期内不会再次经历冷启动。如果在代码中添加构造函数或静态初始化器,它们仅会在函数冷启动时被调用。可以在处理程序类的构造函数中添加显式日志,以便在函数日志中查看冷启动的发生情况。此外,还可以使用 X-Ray 和一些第三方 Lambda 监控工具来识别冷启动。 #### 2. 冷启动的影响 冷启动通常会导致事件处理出现延迟峰值,这也是人们关注冷启动的主要原因。一般情况下,小型 Lambda 函数的端到端延迟

JavaEE7中的MVC模式及其他重要模式解析

### Java EE 7中的MVC模式及其他重要模式解析 #### 1. MVC模式在Java EE中的实现 MVC(Model-View-Controller)模式是一种广泛应用于Web应用程序的设计模式,它将视图逻辑与业务逻辑分离,带来了灵活、可适应的Web应用,并且允许应用的不同部分几乎独立开发。 在Java EE中实现MVC模式,传统方式需要编写控制器逻辑、将URL映射到控制器类,还需编写大量的基础代码。但在Java EE的最新版本中,许多基础代码已被封装好,开发者只需专注于视图和模型,FacesServlet会处理控制器的实现。 ##### 1.1 FacesServlet的

Clojure多方法:定义、应用与使用场景

### Clojure 多方法:定义、应用与使用场景 #### 1. 定义多方法 在 Clojure 中,定义多方法可以使用 `defmulti` 函数,其基本语法如下: ```clojure (defmulti name dispatch-fn) ``` 其中,`name` 是新多方法的名称,Clojure 会将 `dispatch-fn` 应用于方法参数,以选择多方法的特定实现。 以 `my-print` 为例,它接受一个参数,即要打印的内容,我们希望根据该参数的类型选择特定的实现。因此,`dispatch-fn` 需要是一个接受一个参数并返回该参数类型的函数。Clojure 内置的

在线票务系统解析:功能、流程与架构

### 在线票务系统解析:功能、流程与架构 在当今数字化时代,在线票务系统为观众提供了便捷的购票途径。本文将详细解析一个在线票务系统的各项特性,包括系统假设、范围限制、交付计划、用户界面等方面的内容。 #### 系统假设与范围限制 - **系统假设** - **Cookie 接受情况**:互联网用户不强制接受 Cookie,但预计大多数用户会接受。 - **座位类型与价格**:每场演出的座位分为一种或多种类型,如高级预留座。座位类型划分与演出相关,而非个别场次。同一演出同一类型的座位价格相同,但不同场次的价格结构可能不同,例如日场可能比晚场便宜以吸引家庭观众。 -

响应式Spring开发:从错误处理到路由配置

### 响应式Spring开发:从错误处理到路由配置 #### 1. Reactor错误处理方法 在响应式编程中,错误处理是至关重要的。Project Reactor为其响应式类型(Mono<T> 和 Flux<T>)提供了六种错误处理方法,下面为你详细介绍: | 方法 | 描述 | 版本 | | --- | --- | --- | | onErrorReturn(..) | 声明一个默认值,当处理器中抛出异常时发出该值,不影响数据流,异常元素用默认值代替,后续元素正常处理。 | 1. 接收要返回的值作为参数<br>2. 接收要返回的值和应返回默认值的异常类型作为参数<br>3. 接收要返回

并发编程:多语言实践与策略选择

### 并发编程:多语言实践与策略选择 #### 1. 文件大小计算的并发实现 在并发计算文件大小的场景中,我们可以采用数据流式方法。具体操作如下: - 创建两个 `DataFlowQueue` 实例,一个用于记录活跃的文件访问,另一个用于接收文件和子目录的大小。 - 创建一个 `DefaultPGroup` 来在线程池中运行任务。 ```plaintext graph LR A[创建 DataFlowQueue 实例] --> B[创建 DefaultPGroup] B --> C[执行 findSize 方法] C --> D[执行 findTotalFileS

设计与实现RESTfulAPI全解析

### 设计与实现 RESTful API 全解析 #### 1. RESTful API 设计基础 ##### 1.1 资源名称使用复数 资源名称应使用复数形式,因为它们代表数据集合。例如,“users” 代表用户集合,“posts” 代表帖子集合。通常情况下,复数名词表示服务中的一个集合,而 ID 则指向该集合中的一个实例。只有在整个应用程序中该数据类型只有一个实例时,使用单数名词才是合理的,但这种情况非常少见。 ##### 1.2 HTTP 方法 在超文本传输协议 1.1 中定义了八种 HTTP 方法,但在设计 RESTful API 时,通常只使用四种:GET、POST、PUT 和