From 0dadce28d9f2d4b224c20309a1e1d431515e8ed8 Mon Sep 17 00:00:00 2001 From: yeasy Date: Mon, 27 Apr 2026 01:15:52 +0000 Subject: [PATCH] Fix Docker Hub rate limits, DCT timeline, image tags, etcd and Alertmanager --- 02_basic_concept/2.3_repository.md | 2 +- 06_repository/6.1_dockerhub.md | 8 ++++---- 07_dockerfile/7.17_multistage_builds.md | 6 +++--- 07_dockerfile/7.18_multistage_builds_laravel.md | 12 ++++++------ 07_dockerfile/multistage_example/laravel/Dockerfile | 6 +++--- 15_etcd/15.2_install.md | 4 ++-- 19_observability/19.1_prometheus.md | 2 +- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/02_basic_concept/2.3_repository.md b/02_basic_concept/2.3_repository.md index 6443e3e..c854a5c 100644 --- a/02_basic_concept/2.3_repository.md +++ b/02_basic_concept/2.3_repository.md @@ -255,7 +255,7 @@ someuser/myapp # ⚠️ 需要评估 #### 镜像签名 -当前更推荐使用 Sigstore / Notation 体系进行镜像签名与验证。`Docker Content Trust (DCT)` 已于 2025 年 8 月 8 日开始停用,官方 Docker 镜像已停止 DCT 签名,2028 年 3 月 31 日将完全删除此功能,不建议作为新项目方案。 +当前更推荐使用 Sigstore / Notation 体系进行镜像签名与验证。`Docker Content Trust (DCT)` 已进入弃用阶段:2025 年 8 月 8 日起最早的 DCT 签名证书开始过期,2025 年 9 月 30 日起不能在新 Registry 启用 DCT,2028 年 3 月 31 日将完全删除此功能。不建议作为新项目方案。 > 注意:Cosign 默认会把签名推送回镜像所在仓库,请使用你有推送权限的镜像地址。 diff --git a/06_repository/6.1_dockerhub.md b/06_repository/6.1_dockerhub.md index 5a0afb0..c19c761 100644 --- a/06_repository/6.1_dockerhub.md +++ b/06_repository/6.1_dockerhub.md @@ -67,15 +67,15 @@ $ docker push username/myapp:v1 #### 镜像拉取限制 -Docker Hub 对不同类型用户实施拉取速率限制(2025 年 4 月起更新): +Docker Hub 对不同类型用户实施拉取速率限制(基于 6 小时周期): | 用户类型 | 限制 | |---------|------| -| **匿名用户** (未登录) | 每小时 10 次请求 | -| **免费账户** (已登录) | 每小时 100 次请求 | +| **匿名用户** (未登录) | 每 6 小时 100 次请求 | +| **免费账户** (已登录) | 每 6 小时 200 次请求 | | **Pro/Team/Business 账户** | 无限制(公平使用政策) | -> **注意**:2025 年 4 月前的旧限制为匿名用户每 6 小时 100 次、免费账户每 6 小时 200 次。新政策大幅收紧了匿名拉取额度,建议在 CI/CD 环境中始终配置 `docker login`。 +> **注意**:自 2025 年 4 月起,所有付费订阅用户享有无限制拉取额度。匿名用户和免费账户的限制保持不变,建议在 CI/CD 环境中始终配置 `docker login` 以获得更高的拉取额度。 #### 滥用限流 diff --git a/07_dockerfile/7.17_multistage_builds.md b/07_dockerfile/7.17_multistage_builds.md index 49e5ad4..e8748d3 100644 --- a/07_dockerfile/7.17_multistage_builds.md +++ b/07_dockerfile/7.17_multistage_builds.md @@ -68,7 +68,7 @@ RUN go get -d -v github.com/go-sql-driver/mysql \ 编写 `Dockerfile.copy` 文件 ```docker -FROM alpine:latest +FROM alpine:3 RUN apk --no-cache add ca-certificates @@ -131,7 +131,7 @@ COPY app.go . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . -FROM alpine:latest as prod +FROM alpine:3 as prod RUN apk --no-cache add ca-certificates @@ -176,5 +176,5 @@ $ docker build --target builder -t username/imagename:tag . 上面例子中我们使用 `COPY --from=0 /go/src/github.com/go/helloworld/app .` 从上一阶段的镜像中复制文件,我们也可以复制任意镜像中的文件。 ```docker -COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf +COPY --from=nginx:1.25-alpine /etc/nginx/nginx.conf /nginx.conf ``` diff --git a/07_dockerfile/7.18_multistage_builds_laravel.md b/07_dockerfile/7.18_multistage_builds_laravel.md index bcce20a..15d1596 100644 --- a/07_dockerfile/7.18_multistage_builds_laravel.md +++ b/07_dockerfile/7.18_multistage_builds_laravel.md @@ -61,7 +61,7 @@ server { ```docker # 注:node 镜像推荐使用具体的版本标签(如 node:20-alpine) -FROM node:alpine as frontend +FROM node:20-alpine as frontend COPY package.json /app/ @@ -83,7 +83,7 @@ RUN set -x ; cd /app \ ```docker # 注:composer 镜像推荐使用具体的版本标签(如 composer:2.x) -FROM composer as composer +FROM composer:2 as composer COPY database/ /app/database/ COPY composer.json composer.lock /app/ @@ -129,7 +129,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \ ```docker # 注:nginx 镜像推荐使用具体的版本标签(如 nginx:1.25-alpine) -FROM nginx:alpine as nginx +FROM nginx:1.25-alpine as nginx ARG LARAVEL_PATH=/app/laravel @@ -180,7 +180,7 @@ $ docker run -dit --rm --network=laravel -p 8080:80 my/nginx ```docker # 注:生产环境推荐使用具体的版本标签,如 node:20-alpine、composer:2.x、php:8.3-fpm-alpine、nginx:1.25-alpine -FROM node:alpine as frontend +FROM node:20-alpine as frontend COPY package.json /app/ @@ -195,7 +195,7 @@ RUN set -x ; cd /app \ && mkdir -p public \ && npm run production -FROM composer as composer +FROM composer:2 as composer COPY database/ /app/database/ COPY composer.json composer.lock /app/ @@ -229,7 +229,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \ && chmod -R 777 storage \ && php artisan package:discover -FROM nginx:alpine as nginx +FROM nginx:1.25-alpine as nginx ARG LARAVEL_PATH=/app/laravel diff --git a/07_dockerfile/multistage_example/laravel/Dockerfile b/07_dockerfile/multistage_example/laravel/Dockerfile index ac08587..6d1da0c 100644 --- a/07_dockerfile/multistage_example/laravel/Dockerfile +++ b/07_dockerfile/multistage_example/laravel/Dockerfile @@ -1,4 +1,4 @@ -FROM node:alpine as frontend +FROM node:20-alpine as frontend COPY package.json /app/ @@ -13,7 +13,7 @@ RUN set -x ; cd /app \ && mkdir -p public \ && npm run production -FROM composer as composer +FROM composer:2 as composer COPY database/ /app/database/ COPY composer.json /app/ @@ -47,7 +47,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \ && chmod -R 777 storage \ && php artisan package:discover -FROM nginx:alpine as nginx +FROM nginx:1.25-alpine as nginx ARG LARAVEL_PATH=/app/laravel diff --git a/15_etcd/15.2_install.md b/15_etcd/15.2_install.md index c9fc019..a0411cb 100644 --- a/15_etcd/15.2_install.md +++ b/15_etcd/15.2_install.md @@ -51,7 +51,7 @@ $ ETCDCTL_API=3 etcdctl member list $ ETCDCTL_API=3 etcdctl put testkey "hello world" OK -$ etcdctl get testkey +$ ETCDCTL_API=3 etcdctl get testkey testkey hello world ``` @@ -96,5 +96,5 @@ $ brew install etcd $ etcd -$ etcdctl member list +$ ETCDCTL_API=3 etcdctl member list ``` diff --git a/19_observability/19.1_prometheus.md b/19_observability/19.1_prometheus.md index 2cc56b5..f17588f 100644 --- a/19_observability/19.1_prometheus.md +++ b/19_observability/19.1_prometheus.md @@ -245,7 +245,7 @@ receivers: ```yaml alertmanager: - image: prom/alertmanager:v0.27.0 + image: prom/alertmanager:v0.32.0 volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml ports: