diff --git a/05_container/summary.md b/05_container/summary.md index 75a5bf8..dd96863 100644 --- a/05_container/summary.md +++ b/05_container/summary.md @@ -1,55 +1,30 @@ ## 本章小结 +本章介绍了 Docker 容器的启动、停止、进入和删除等核心操作。 + | 操作 | 命令 | 说明 | |------|------|------| | 新建并运行 | `docker run` | 最常用的启动方式 | | 交互式启动 | `docker run -it` | 用于调试或临时操作 | | 后台运行 | `docker run -d` | 用于服务类应用 | | 启动已停止的容器 | `docker start` | 重用已有容器 | +| 优雅停止 | `docker stop` | 先 SIGTERM,超时后 SIGKILL | +| 强制停止 | `docker kill` | 直接 SIGKILL | +| 重启 | `docker restart` | 停止后立即启动 | +| 停止全部 | `docker stop $(docker ps -q)` | 停止所有运行中容器 | +| 进入容器调试 | `docker exec -it 容器名 bash` | 推荐方式 | +| 执行单条命令 | `docker exec 容器名 命令` | 不进入交互模式 | +| 查看主进程输出 | `docker attach 容器名` | 慎用,退出可能停止容器 | +| 删除已停止容器 | `docker rm 容器名` | 需先停止 | +| 强制删除运行中容器 | `docker rm -f 容器名` | 直接删除 | +| 删除容器及匿名卷 | `docker rm -v 容器名` | 同时清理匿名卷 | +| 清理所有已停止容器 | `docker container prune` | 批量清理 | -### 5.7.1 延伸阅读 +### 延伸阅读 - [后台运行](5.2_daemon.md):理解 `-d` 参数和容器生命周期 - [进入容器](5.4_attach_exec.md):操作运行中的容器 - [网络配置](../09_network/README.md):理解端口映射的原理 - [数据管理](../08_data/README.md):数据持久化方案 - -| 操作 | 命令 | 说明 | -|------|------|------| -| 优雅停止 | `docker stop` | 先 SIGTERM,超时后 SIGKILL | -| 强制停止 | `docker kill` | 直接 SIGKILL | -| 重新启动 | `docker start` | 启动已停止的容器 | -| 重启 | `docker restart` | 停止后立即启动 | -| 停止全部 | `docker stop $(docker ps -q)` | 停止所有运行中容器 | - -### 5.7.2 延伸阅读 - -- [启动容器](../05_container/5.1_run.md):容器启动详解 -- [删除容器](5.6_rm.md):清理容器 -- [容器日志](5.2_daemon.md):排查停止原因 - -| 需求 | 推荐命令 | -|------|---------| -| 进入容器调试 | `docker exec -it 容器名 bash` | -| 执行单条命令 | `docker exec 容器名 命令` | -| 查看主进程输出 | `docker attach 容器名` (慎用)| - -### 5.7.3 延伸阅读 - -- [后台运行](5.2_daemon.md):理解容器主进程 -- [查看容器](5.1_run.md):列出和过滤容器 -- [容器日志](5.2_daemon.md):查看容器输出 - -| 操作 | 命令 | -|------|------| -| 删除已停止容器 | `docker rm 容器名` | -| 强制删除运行中容器 | `docker rm -f 容器名` | -| 删除容器及匿名卷 | `docker rm -v 容器名` | -| 清理所有已停止容器 | `docker container prune` | -| 删除所有容器 | `docker rm -f $(docker ps -aq)` | - -### 5.7.4 延伸阅读 - -- [终止容器](5.3_stop.md):优雅停止容器 - [删除镜像](../04_image/4.3_rm.md):清理镜像 - [数据卷](../08_data/8.1_volume.md):数据卷管理 diff --git a/06_repository/6.1_dockerhub.md b/06_repository/6.1_dockerhub.md index 85d01fd..6929a05 100644 --- a/06_repository/6.1_dockerhub.md +++ b/06_repository/6.1_dockerhub.md @@ -45,7 +45,8 @@ $ docker pull nginx:alpine ```bash $ docker login -## 输入用户名和密码 +## 默认情况下,不带其它参数进行 docker login 会自动走 Device Code Web Flow (浏览器认证) +## 若在非交互 CI 环境中,推荐结合 --username 与 --password-stdin 参数使用 ... ``` @@ -76,10 +77,18 @@ $ docker push username/myapp:v1 | **免费账户** (已登录) | 每 6 小时 200 次请求 | | **Pro/Team 账户** | 无限制 | -> **提示**:如果在 CI/CD 环境中遇到 `toomanyrequests` 错误,建议: -> 1. 在 CI 中配置 `docker login` -> 2. 使用国内镜像加速器 -> 3. 搭建私有仓库代理 +#### 滥用限流 (Abuse Rate Limit) + +除了上述针对特定账号拉取镜像数量的 Pull Rate Limit 之外,Docker Hub 对所有用户(包含已认证及付费用户)还实施了**滥用保护限流 (Abuse Rate Limiting)**。它是根据网络出口 IP (IPv4 或 IPv6 /64 子网) 计算整体请求频率,阈值动态触发(通常为每分钟数千级别请求)。 + +**两类的差异与排查方法**: +- **Pull Rate Limit**:针对拉取量达到上限。报错返回 `429 Too Many Requests`,并且 HTTP 返回体/CLI 错误提示中会带有明确的 `toomanyrequests: You have reached your pull rate limit` 提示,常附有账户升级链接。 +- **Abuse Rate Limit**:防范接口频率打击。报错仅返回简化的 `429 Too Many Requests`。这一限流不分付费与否,常发生在“多终端共享出口 IP”的企业局域网或者第三方云 CI 服务(如 GitHub Actions 等)中,即使你已正常配置 `docker login` 也依旧可能触发。 + +> **提示**:如果在 CI/CD 等环境遇到 429 错误,建议: +> 1. 先甄别具体是哪类限流:普通的 pull rate limit 只要在 CI 中配置 `docker login` (并使用有效账号) 就能解除匿名限制。 +> 2. 如果是 Abuse 频控导致,应考虑搭建私有仓库作为拉取缓存代理 (Registry pull-through cache),避免频繁直接请求官方 Hub。 +> 3. 使用国内镜像加速器。 --- diff --git a/06_repository/summary.md b/06_repository/summary.md index 320492a..02f7374 100644 --- a/06_repository/summary.md +++ b/06_repository/summary.md @@ -1,5 +1,7 @@ ## 本章小结 +本章介绍了 Docker Hub 的使用、私有仓库的搭建以及 Nexus 3 等企业级方案。 + | 功能 | 说明 | |------|------| | **官方镜像** | 优先使用的基础镜像 | @@ -7,9 +9,7 @@ | **安全** | 推荐开启 2FA 并使用 Access Token | | **自动化** | 支持 Webhooks 和自动构建 | -### 6.5.1 概述 - -### 6.5.2 延伸阅读 +### 延伸阅读 - [私有仓库](6.2_registry.md):搭建自己的 Registry - [镜像加速器](../03_install/3.9_mirror.md):加速下载 diff --git a/README.md b/README.md index 2947b54..9c1b30d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![图](https://img.shields.io/github/stars/yeasy/docker_practice.svg?style=social&label=Stars)](https://github.com/yeasy/docker_practice) [![图](https://img.shields.io/github/release/yeasy/docker_practice/all.svg)](https://github.com/yeasy/docker_practice/releases) [![图](https://img.shields.io/badge/Based-Docker%20Engine%20v29.x-blue.svg)](https://docs.docker.com/engine/release-notes/) [![图](https://img.shields.io/badge/Docker%20%E6%8A%80%E6%9C%AF%E5%85%A5%E9%97%A8%E4%B8%8E%E5%AE%9E%E6%88%98-jd.com-red.svg)][1] -**v1.6.1** +**v1.6.2** [Docker](https://www.docker.com) 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!