Refresh k8s docker versions and references

This commit is contained in:
yeasy
2026-04-21 20:57:33 -07:00
parent 318de33fd4
commit 9a06a18f92
26 changed files with 379 additions and 98 deletions
+2 -2
View File
@@ -94,8 +94,8 @@ flowchart LR
end
```
- **LXC** (2013)Docker 最初基于 Linux Containers
- **libcontainer** (2014v0.7)Docker 自研的容器运行时
- **runC** (2015v1.11)捐献给 OCI 的标准容器运行时
- **libcontainer** (2014Docker 0.9)Docker 自研的容器运行时
- **runC** (2015Docker 1.11 整合)捐献给 OCI 的标准容器运行时
- **containerd**高级容器运行时管理容器生命周期
![Docker 架构](../_images/docker-on-linux.png)
+1 -1
View File
@@ -27,7 +27,7 @@ Docker 支持诸多版本的 [Ubuntu](https://ubuntu.com/server) 操作系统。
* Ubuntu Noble 24.04 (LTS)Docker v29.x
* Ubuntu Jammy 22.04 (LTS), Docker v29.x
> **注意**Ubuntu 20.04 LTS 已于 2025 5 31 日结束标准支持不再推荐用于新部署
> **警告**Ubuntu 20.04 LTS 已于 2025 5 31 日结束标准支持对于生产系统建议升级至 Ubuntu 22.04 LTS Ubuntu 24.04 LTS以获得长期维护支持若必须继续使用 20.04可通过 Ubuntu Pro 订阅获得扩展安全维护ESM
Ubuntu LTS 版本上目前 Docker 支持 amd64arm64armhfppc64els390x 5 个平台而非 LTS 版本支持的平台通常较少同时LTS 版本会获得 5 年的升级维护支持这样的系统会获得更长期的安全保障因此在生产环境中推荐使用 LTS 版本
+5 -3
View File
@@ -16,9 +16,11 @@ Debian 以其稳定性著称,是 Docker 的理想宿主系统。本节将指
Docker 支持以下版本的 [Debian](https://www.debian.org/intro/about) 操作系统:
* Debian Trixie 13 (stable)
* Debian Bookworm 12 (oldstable)
* Debian Bullseye 11 (LTS)
* Debian Trixie 13 (stable2025 8 月发布当前活跃版本)
* Debian Bookworm 12 (oldstable全面支持至 2026 6 LTS 2028 6
* Debian Bullseye 11 (LTS 长期支持支持至 2026 8 31 )
> **注意**Debian Bullseye 11 将于 2026 8 月底结束长期支持建议新部署使用 Bookworm 12 Trixie 13
#### 卸载旧版本
+2 -2
View File
@@ -16,8 +16,8 @@ Fedora 的快速发布周期(每 6 个月发布新版本)决定了它的用
Docker 支持以下版本的 [Fedora](https://getfedora.org/) 操作系统:
* 42
* 43
* Fedora 42 (支持至 2026 5 )
* Fedora 43 (支持至 2026 12 )
#### 卸载旧版本
+1 -1
View File
@@ -14,7 +14,7 @@ CentOS (及其替代品 Rocky Linux、AlmaLinux) 是企业级服务器常用的
#### 系统要求
> **重要提示**CentOS 8 已于 2021 12 31 停止维护CentOS 7 已于 2024 6 30 结束支持建议新项目使用 **Rocky Linux** **AlmaLinux** 作为替代
> **严重警告**CentOS 7 已于 2024 6 30 结束所有支持不再接收任何安全更新CentOS 8 已于 2021 12 31 停止维护强烈建议新项目使用 **Rocky Linux** **AlmaLinux** 替代这两个项目由社区维护提供长期支持承诺
Docker 支持 64 位版本 CentOS Stream 9Rocky Linux 8/9AlmaLinux 8/9并且要求内核版本不低于 3.10
+15 -14
View File
@@ -8,13 +8,13 @@
针对不同的使用场景我们推荐以下几种镜像加速配置方案以确保最佳的拉取速度
1. **云服务器用户**优先使用所在云平台提供的内部加速器 (见本页末尾)
2. **本地开发用户**使用阿里云个人加速器或其他可用的公共加速器
> **重要提示**国内大多数 Docker Hub 加速服务已于 2024 年中旬关闭包括阿里云腾讯云网易云百度云等如下推荐的镜像源可用性因人而异建议先测试可用性再配置
1. **云服务器用户**优先使用所在云平台提供的内部加速器见本页末尾"云服务商"部分
2. **本地开发用户**从以下社区维护的镜像中选择推荐 `docker.1ms.run``dockerproxy.net` DaoCloud `docker.m.daocloud.io`
3. **代理方案**如有条件可配置 HTTP 代理直接访问 Docker Hub
* [阿里云加速器](https://cr.console.aliyun.com/cn-hangzhou/instances) (需登录获取个人加速地址)
本节以 [毫秒镜像](https://docker.1ms.run) 镜像服务 `https://docker.1ms.run` 为例进行介绍。由于镜像加速服务经常变动,建议查阅上方的镜像测试仓库获取最新可用地址。
本节以 [毫秒镜像](https://docker.1ms.run) 镜像服务 `https://docker.1ms.run` 为例进行介绍。由于镜像加速服务可用性经常变动,建议查阅 [docker-practice/docker-registry-cn-mirror-test](https://github.com/docker-practice/docker-registry-cn-mirror-test) 获取最新实时状态。
### 3.9.2 Ubuntu 22.04+Debian 12+Rocky/Alma/CentOS Stream 9+
@@ -90,18 +90,19 @@ Kubernetes 社区已将官方镜像地址从 `k8s.gcr.io` 迁移到 `registry.k8
$ docker pull registry.k8s.io/xxx
```
### 3.9.7 不再提供服务的镜像
### 3.9.7 已停止服务的镜像列表
某些镜像不再提供服务添加无用的镜像加速器会拖慢镜像拉取速度你可以从镜像配置列表中删除它们
以下镜像源已停止服务添加无用的镜像加速器会拖慢拉取速度请从配置中删除
* https://hub.atomgit.com **已于 2024 年底关闭**
* https://dockerhub.azk8s.cn **已转为私有**
* https://reg-mirror.qiniu.com
* https://registry.docker-cn.com
* https://hub-mirror.c.163.com
* https://mirror.baidubce.com
* https://hub.atomgit.com 已于 2024 年底关闭
* https://registry.cn-hangzhou.aliyuncs.com (阿里云 Docker 加速已于 2024 年关闭)
* https://dockerhub.azk8s.cn (已转为私有)
* https://reg-mirror.qiniu.com (已停止服务)
* https://registry.docker-cn.com (已停止服务)
* https://hub-mirror.c.163.com (网易云镜像已于 2024 年关闭)
* https://mirror.baidubce.com (百度云镜像已停止)
建议 **watch (页面右上角)** [镜像测试](https://github.com/docker-practice/docker-registry-cn-mirror-test)这个 GitHub 仓库,我们会在此更新各镜像地址的状态。
建议 **watch (页面右上角)** [镜像测试仓库](https://github.com/docker-practice/docker-registry-cn-mirror-test) 这个 GitHub 仓库,我们会实时更新各镜像源的可用状态。
### 3.9.8 云服务商
+6 -4
View File
@@ -67,13 +67,15 @@ $ docker push username/myapp:v1
#### 镜像拉取限制
2020 11 月起Docker Hub 对匿名和免费用户实施了拉取速率限制
Docker Hub 对不同类型用户实施拉取速率限制2025 4 月起更新
| 用户类型 | 限制 |
|---------|------|
| **匿名用户** (未登录) | 6 小时 100 次请求 |
| **免费账户** (已登录) | 6 小时 200 次请求 |
| **Pro/Team 账户** | 无限制 |
| **匿名用户** (未登录) | 每小时 10 次请求 |
| **免费账户** (已登录) | 每小时 100 次请求 |
| **Pro/Team/Business 账户** | 无限制公平使用政策 |
> **注意**2025 4 月前的旧限制为匿名用户每 6 小时 100 免费账户每 6 小时 200 新政策大幅收紧了匿名拉取额度建议在 CI/CD 环境中始终配置 `docker login`
#### 滥用限流
+2 -3
View File
@@ -104,15 +104,14 @@ REPOSITORY TAG IMAGE ID CREAT
```json
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
"https://docker.your-mirror.example.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
}
```
> 注意该文件必须符合 `json` 规范否则 Docker 将不能启动
> 注意该文件必须符合 `json` 规范否则 Docker 将不能启动镜像加速器地址请替换为实际可用的源具体配置参见 [3.9 镜像加速器](../03_install/3.9_mirror.md)
### 6.2.4 其他
@@ -193,7 +193,7 @@ RUN set -x ; cd /app \
FROM composer as composer
COPY database/ /app/database/
COPY composer.json /app/
COPY composer.json composer.lock /app/
RUN set -x ; cd /app \
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
+2 -2
View File
@@ -84,7 +84,7 @@ RUN apt-get update && \
#### 3. 使用 `set -e` `pipefail`
默认情况下管道命令 `cmd1 | cmd2` 只要 `cmd2` 成功整个 `RUN` 视为成功
默认情况下管道命令 `cmd1 | cmd2` 的返回值由最后一个命令 (`cmd2`) 决定即使前面的命令失败了整个 `RUN` 仍可能视为成功
** 隐蔽的错误**
@@ -193,6 +193,6 @@ wget http://example.com/file.tar.gz
EOF
```
> 💡 使用 heredoc 需要在 Dockerfile 首行声明 BuildKit 语法版本`# syntax=docker/dockerfile:1`
> 使用 heredoc 需要在 Dockerfile 首行声明 BuildKit 语法版本`# syntax=docker/dockerfile:1`
---
+3 -1
View File
@@ -63,7 +63,9 @@ CMD echo $HOME
CMD ["sh", "-c", "echo $HOME"]
```
**优点**可以使用环境变量管道等 shell 特性 **缺点**主进程是 sh信号无法正确传递给应用
**优点**可以使用环境变量管道等 shell 特性
**缺点**主进程是 sh信号无法正确传递给应用
---
+5 -5
View File
@@ -22,12 +22,12 @@ Docker 创建一个容器的时候,会执行如下操作:
完成这些之后容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络
可以在 `docker run` 的时候通过 `--net` 参数来指定容器的网络配置 4 个可选值
可以在 `docker run` 的时候通过 `--network` 参数来指定容器的网络配置 4 个可选值
* `--net=bridge` 这个是默认值连接到默认的网桥
* `--net=host` 告诉 Docker 不要将容器网络放到隔离的命名空间中即不要容器化容器内的网络此时容器使用本地主机的网络它拥有完全的本地主机接口访问权限容器进程可以跟主机其它 root 进程一样可以打开低范围的端口可以访问本地网络服务比如 D-bus还可以让容器做一些影响整个主机系统的事情比如重启主机因此使用这个选项的时候要非常小心如果进一步的使用 `--privileged=true`容器会被允许直接配置主机的网络堆栈
* `--net=container:NAME_or_ID` Docker 将新建容器的进程放到一个已存在容器的网络栈中新容器进程有自己的文件系统进程列表和资源限制但会和已存在的容器共享 IP 地址和端口等网络资源两者进程可以直接通过 `lo` 环回接口通信
* `--net=none` Docker 将新容器放到隔离的网络栈中但是不进行网络配置之后用户可以自己进行配置
* `--network=bridge` 这个是默认值连接到默认的网桥
* `--network=host` 告诉 Docker 不要将容器网络放到隔离的命名空间中即不要容器化容器内的网络此时容器使用本地主机的网络它拥有完全的本地主机接口访问权限容器进程可以跟主机其它 root 进程一样可以打开低范围的端口可以访问本地网络服务比如 D-bus还可以让容器做一些影响整个主机系统的事情比如重启主机因此使用这个选项的时候要非常小心如果进一步的使用 `--privileged=true`容器会被允许直接配置主机的网络堆栈
* `--network=container:NAME_or_ID` Docker 将新建容器的进程放到一个已存在容器的网络栈中新容器进程有自己的文件系统进程列表和资源限制但会和已存在的容器共享 IP 地址和端口等网络资源两者进程可以直接通过 `lo` 环回接口通信
* `--network=none` Docker 将新容器放到隔离的网络栈中但是不进行网络配置之后用户可以自己进行配置
### 12.6.3 网络配置细节
+12 -2
View File
@@ -96,6 +96,16 @@ $ sudo modprobe overlay
$ sudo modprobe br_netfilter
```
#### cgroup v2 要求必须
Kubernetes v1.35 要求节点使用 cgroup v2不再支持 cgroup v1kubelet cgroup v1 节点上会拒绝启动验证节点是否支持 cgroup v2
```bash
$ mount | grep cgroup2
```
如果输出包含 `cgroup2`则系统已支持 cgroup v2对于仍在使用 cgroup v1 的系统如较旧的 RHEL 8需要升级内核或更新系统配置
#### 禁用 swap必须
kubelet 默认要求禁用 swap否则可能导致初始化失败或节点无法加入集群
@@ -147,9 +157,9 @@ $ sudo systemctl daemon-reload
#### master
```bash
$ systemctl enable containerd
$ sudo systemctl enable containerd
$ systemctl start containerd
$ sudo systemctl start containerd
$ sudo kubeadm init \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
@@ -60,6 +60,7 @@ $ sudo mv cri-dockerd/cri-dockerd /usr/local/bin/
$ wget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
$ wget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket
$ sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' cri-docker.service
$ sudo mv cri-docker.service cri-docker.socket /etc/systemd/system/
# 启动 cri-dockerd
@@ -113,6 +114,16 @@ $ sudo yum install -y kubelet kubeadm kubectl
### 14.2.4 修改内核的运行参数
#### cgroup v2 要求必须
Kubernetes v1.35 要求节点使用 cgroup v2不再支持 cgroup v1kubelet cgroup v1 节点上会拒绝启动验证节点是否支持 cgroup v2
```bash
$ mount | grep cgroup2
```
如果输出包含 `cgroup2`则系统已支持 cgroup v2对于仍在使用 cgroup v1 的系统如较旧的 RHEL 8需要升级内核或更新系统配置
#### 加载内核模块
```bash
+263 -34
View File
@@ -2,80 +2,309 @@
[kubectl](https://github.com/kubernetes/kubernetes) 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes。
使用格式有两种
kubectl 的基本用法格式为
```bash
kubectl [flags]
kubectl [command]
kubectl [command] [resource] [name] [flags]
```
其中 `command` 是操作命令 getapplydelete`resource` 是资源类型 poddeploymentservice`name` 是资源名称可选`flags` 是各种选项参数
### 14.8.1 get
显示一个或多个资源
显示一个或多个资源最常用的命令之一用于查询集群中的资源状态
```bash
# 查看所有 Pod
$ kubectl get pods
# 查看指定命名空间中的 Deployment
$ kubectl get deployment -n kube-system
# 查看所有资源
$ kubectl get all
# 使用更详细的输出格式
$ kubectl get pods -o wide
# 输出为 YAML 格式
$ kubectl get pod my-pod -o yaml
# 根据标签选择资源
$ kubectl get pods -l app=nginx
```
### 14.8.2 describe
显示资源详情
显示资源的详细信息包括事件状态配置等用于调试和查看资源的完整信息
### 14.8.3 create
```bash
# 查看特定 Pod 的详情
$ kubectl describe pod my-pod
从文件或标准输入创建资源
# 查看 Node 的详情
$ kubectl describe node node-1
### 14.8.4 update
# 查看 Deployment 的详情
$ kubectl describe deployment nginx-deployment
```
从文件或标准输入更新资源
### 14.8.3 apply
从文件或标准输入应用配置这是声明式资源管理的标准方式可用于创建或更新资源
```bash
# 应用 YAML 文件
$ kubectl apply -f deployment.yaml
# 应用目录中的所有 YAML 文件
$ kubectl apply -f ./manifests/
# 从标准输入应用配置
$ cat deployment.yaml | kubectl apply -f -
```
### 14.8.4 create
从文件或标准输入创建资源 apply 不同create 仅用于创建新资源如果资源已存在会报错
```bash
# 创建资源
$ kubectl create -f pod.yaml
# 从标准输入创建
$ kubectl create -f - < deployment.yaml
```
### 14.8.5 delete
通过文件名准输入资源名或者 label selector 删除资源
删除一个或多个资源支持按名称资源类型等多种方式删除
```bash
# 按名称删除
$ kubectl delete pod my-pod
# 删除整个 Deployment同时删除其管理的 Pod
$ kubectl delete deployment nginx-deployment
# 按标签删除
$ kubectl delete pods -l app=nginx
# 从文件删除
$ kubectl delete -f deployment.yaml
```
### 14.8.6 logs
输出 pod 一个容器的日志
查看 Pod 中容器的日志用于调试应用和查看容器输出
### 14.8.7 rollout
```bash
# 查看 Pod 的日志
$ kubectl logs my-pod
Deployment 等资源执行滚动更新/回滚
# 查看 Pod 中特定容器的日志
$ kubectl logs my-pod -c container-name
### 14.8.8 exec
# 实时跟踪日志类似 tail -f
$ kubectl logs -f my-pod
在容器内部执行命令
# 查看最近 100 行日志
$ kubectl logs my-pod --tail=100
### 14.8.9 port-forward
# 查看 Pod 启动前的日志适用于已崩溃的容器
$ kubectl logs my-pod --previous
```
将本地端口转发到 Pod
### 14.8.7 exec
### 14.8.10 proxy
在运行中的容器内部执行命令用于调试排查问题或执行应用内的操作
Kubernetes API server 启动代理服务器
```bash
# 进入容器的交互式 shell
$ kubectl exec -it my-pod -- /bin/sh
### 14.8.11 run
# 在容器中执行命令
$ kubectl exec my-pod -- ls -la /app
在集群中使用指定镜像启动容器
# Pod 中的特定容器执行命令
$ kubectl exec -it my-pod -c container-name -- /bin/bash
```
### 14.8.12 expose
### 14.8.8 port-forward
replication controller service pod 暴露为新的 Kubernetes service
本地端口转发到 Pod 的端口用于本地访问集群内的服务无需暴露 Service
### 14.8.13 label
```bash
# 将本地 8080 端口转发到 Pod 80 端口
$ kubectl port-forward pod/my-pod 8080:80
更新资源的 label
# 使用随机本地端口
$ kubectl port-forward pod/my-pod :80
### 14.8.14 config
# 转发到 Service
$ kubectl port-forward svc/my-service 8080:80
```
修改 Kubernetes 配置文件
### 14.8.9 rollout
### 14.8.15 cluster-info
DeploymentDaemonSetStatefulSet 等资源执行滚动更新暂停继续或回滚操作
显示集群信息
```bash
# 查看滚动更新状态
$ kubectl rollout status deployment/nginx-deployment
# 暂停滚动更新
$ kubectl rollout pause deployment/nginx-deployment
# 继续滚动更新
$ kubectl rollout resume deployment/nginx-deployment
# 查看更新历史
$ kubectl rollout history deployment/nginx-deployment
# 回滚到前一个版本
$ kubectl rollout undo deployment/nginx-deployment
# 回滚到特定版本
$ kubectl rollout undo deployment/nginx-deployment --to-revision=2
```
### 14.8.10 label
向资源添加修改或删除标签标签用于组织和选择资源
```bash
# Pod 添加标签
$ kubectl label pod my-pod env=production
# 修改已有标签
$ kubectl label pod my-pod env=staging --overwrite
# 删除标签
$ kubectl label pod my-pod env-
# 为多个资源添加标签
$ kubectl label pods -l app=nginx version=v1
```
### 14.8.11 annotate
向资源添加或修改注解注解用于存储任意元数据不用于资源选择
```bash
# 添加注解
$ kubectl annotate pod my-pod description=Production pod
# 修改注解
$ kubectl annotate pod my-pod description=Staging pod --overwrite
# 删除注解
$ kubectl annotate pod my-pod description-
```
### 14.8.12 edit
直接编辑 Kubernetes 资源编辑器由 `EDITOR` 环境变量指定
```bash
# 编辑 Pod
$ kubectl edit pod my-pod
# 编辑 Deployment
$ kubectl edit deployment nginx-deployment
```
### 14.8.13 config
管理 kubectl 的配置文件通常位于 `~/.kube/config`
```bash
# 查看当前配置
$ kubectl config view
# 切换上下文
$ kubectl config use-context my-cluster
# 查看所有上下文
$ kubectl config get-contexts
# 设置默认命名空间
$ kubectl config set-context --current --namespace=my-namespace
```
### 14.8.14 cluster-info
显示集群的连接信息和组件状态
```bash
# 显示集群信息
$ kubectl cluster-info
# 显示完整的集群状态包括所有组件
$ kubectl get componentstatuses
```
### 14.8.15 version
显示 kubectl 客户端和 Kubernetes API server 的版本信息
```bash
# 显示版本
$ kubectl version
# 仅显示客户端版本
$ kubectl version --client
# JSON 格式输出
$ kubectl version --output=json
```
### 14.8.16 api-versions
/版本 的格式输出服务端支持的 API 版本
列出 API server 支持的所有 API 版本格式为 /版本
### 14.8.17 version
```bash
$ kubectl api-versions
```
输出服务端和客户端的版本信息
### 14.8.17 explain
### 14.8.18 help
解释资源的字段含义用于了解 YAML 配置文件中各字段的作用
显示各个命令的帮助信息
```bash
# 查看 Pod 资源的字段说明
$ kubectl explain pod
# 查看 Pod spec 字段的说明
$ kubectl explain pod.spec
# 查看具体字段的详细说明
$ kubectl explain pod.spec.containers
```
### 14.8.18 auth
检查用户权限用于验证 RBAC 配置
```bash
# 检查当前用户是否有权限执行操作
$ kubectl auth can-i create pods
# 检查特定用户的权限
$ kubectl auth can-i create pods --as=other-user
```
### 14.8.19 help
显示任何命令的帮助信息
```bash
# 显示 kubectl 的一般帮助
$ kubectl help
# 显示特定命令的帮助
$ kubectl get --help
# 显示资源的 API 文档
$ kubectl explain deployment
```
+3 -3
View File
@@ -14,10 +14,10 @@ USAGE:
etcdctl
VERSION:
3.4.0
3.5.21
API VERSION:
3.4
3.5
COMMANDS:
@@ -145,5 +145,5 @@ testkey
```bash
$ etcdctl member list
422a74f03b622fef, started, node1, http://172.16.238.100:2380, http://172.16.238.100:23
422a74f03b622fef, started, node1, http://172.16.238.100:2380, http://172.16.238.100:2379
```
+1 -1
View File
@@ -7,7 +7,7 @@
| 特性 | Google GKE | AWS EKS | Azure AKS |
| :--- | :--- | :--- | :--- |
| **版本更新** | 最快通常是 K8s 新特性的首发地 | 相对保守注重稳定性 | 跟随社区更新速度适中 |
| **控制平面管理** | 全托管自动升级免费 (部分区域)| 托管每小时收费 | 全托管控制平面免费 |
| **控制平面管理** | 全托管自动升级$0.10/h Free Tier 抵扣| 托管$0.10/h | 全托管控制平面免费 |
| **节点管理** | GKE Autopilot 模式完全托管节点 | Managed Node Groups 简化管理 | Virtual Machine Scale Sets |
| **网络模型** | VPC-native, 性能优秀 | AWS VPC CNI, Pod 直接获取 VPC IP | Azure CNI (消耗 IP ) Kubenet |
| **集成度** | GCP 数据分析AI 服务集成紧密 | AWS IAM, ALB, CloudWatch 集成深度高 | Active Directory, Azure DevOps 集成好 |
+2 -2
View File
@@ -35,7 +35,7 @@ Kubernetes 作为一个容器编排系统,为了屏蔽底层不同容器运行
- 早期版本中Kubernetes 默认使用 docker 作为运行时通过一个名为 `dockershim` 的桥接组件对接 DockerDocker 再对接 containerd
- 随着 containerd 原生支持了 CRI 插件Kubernetes 开始直接与 containerd 通信去掉了 `dockershim` `dockerd` 的中间层这就是为什么从 Kubernetes v1.24 开始弃用 Docker引发了广泛关注实际上 Kubernetes 只是弃用 `dockershim`底层依然在使用从 Docker 基因中诞生的 containerd
- containerd 2.0 移除了已弃用的 CRI v1alpha2 接口仅保留 CRI v1Kubernetes v1.26 起仅支持 CRI v1如果集群中仍有依赖 CRI v1alpha2 的组件升级 containerd 2.x 前需先完成迁移
- containerd 2.0 移除了已弃用的 CRI v1alpha2 接口仅保留 CRI v1Kubernetes v1.26 起仅支持 CRI v1如果集群中仍有依赖 CRI v1alpha2 的组件升级 containerd 2.x 前需先完成迁移containerd 2.32026 4 是首个 LTS 版本支持从 1.7 LTS 直接升级生产环境推荐使用
### 为什么直接使用 containerd
@@ -50,7 +50,7 @@ Kubernetes 作为一个容器编排系统,为了屏蔽底层不同容器运行
- **ctr**containerd 自带的调试用客户端它功能比较基础主要用于开发者在开发 containerd 时进行快速调试一般不作为最终用户的日常管理工具
- **crictl**Kubernetes 提供的 CRI 命令行工具它用于排查 Kubernetes 节点上的容器和沙箱Pod问题
- **nerdctl**这是一个由系统社区成员主要是 containerd 项目维护者开发的完全兼容 Docker CLI 体验的 containerd 命令行客户端对于习惯了 `docker run/ps/build` 命令的用户来说`nerdctl` 可以作为直接操作 containerd 的理想替代品并且它还支持直接构建镜像依赖 BuildKit
- **nerdctl**这是一个由 containerd 项目维护者开发的完全兼容 Docker CLI 体验的 containerd 命令行客户端对于习惯了 `docker run/ps/build` 命令的用户来说`nerdctl` 可以作为直接操作 containerd 的理想替代品并且它还支持直接构建镜像依赖 BuildKit
#### nerdctl 使用示例
+1
View File
@@ -413,6 +413,7 @@ jobs:
- name: Run Trivy vulnerability scan
# 安全提醒2026 3 Trivy GitHub Actions 遭受供应链攻击
# 76 个版本标签被劫持务必使用不可变的 commit SHA 引用而非可变标签
# 使用前请到 https://github.com/aquasecurity/trivy-action/releases 核实 SHA 对应正确版本。
uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # v0.35.0
with:
image-ref: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
+2 -2
View File
@@ -89,7 +89,7 @@ services:
- monitoring
cadvisor:
image: ghcr.io/google/cadvisor:latest
image: ghcr.io/google/cadvisor:v0.56.2
ports:
- "8080:8080"
volumes:
@@ -115,7 +115,7 @@ $ docker compose up -d
启动后访问以下地址
* Prometheus: `http://localhost:9090`
* Grafana`http://localhost:3000` (默认账号密码admin/admin)
* Grafana`http://localhost:3000` (默认账号密码admin/admin首次登录后务必立即修改密码)
### 19.1.3 配置 Grafana 面板
+3 -3
View File
@@ -12,7 +12,7 @@
`Alpine` 由非商业组织维护的支持广泛场景的 `Linux` 发行版它特别为资深/重度 `Linux` 用户而优化关注安全性能和资源效能`Alpine` 镜像可以适用于更多常用场景并且是一个优秀的可以适用于生产的基础系统/环境
`Alpine` Docker 镜像也继承了 `Alpine Linux` 发行版的这些优势相比于其他 `Docker` 镜像它的容量非常小压缩后仅约 **3.6 MB**对比 `Ubuntu` 系列镜像约 `28 MB`且拥有非常友好的包管理机制官方镜像来自 `docker-alpine` 项目
`Alpine` Docker 镜像也继承了 `Alpine Linux` 发行版的这些优势相比于其他 `Docker` 镜像它的容量非常小压缩后仅约 **5 MB**对比 `Ubuntu` 系列镜像约 `28 MB`且拥有非常友好的包管理机制官方镜像来自 `docker-alpine` 项目
目前 Docker 官方已开始推荐使用 `Alpine` 替代之前的 `Ubuntu` 做为基础镜像环境这样会带来多个好处包括镜像下载速度加快镜像安全性提高主机之间的切换更方便占用更少磁盘空间等
@@ -20,7 +20,7 @@
```bash
REPOSITORY TAG COMPRESSED SIZE
alpine latest ~3.6 MB
alpine latest ~5 MB
debian latest ~30 MB
ubuntu latest ~28 MB
```
@@ -69,4 +69,4 @@ RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories
* `Alpine` 官网https://www.alpinelinux.org/
* `Alpine` 官方仓库https://github.com/alpinelinux
* `Alpine` 官方镜像https://hub.docker.com/\_/alpine/
* `Alpine` 官方镜像仓库https://github.com/gliderlabs/docker-alpine
* `Alpine` 官方镜像仓库https://github.com/alpinelinux/docker-alpine
+2 -2
View File
@@ -17,7 +17,7 @@
#### 使用 Debian 官方镜像
Debian 是一个也是一个常用的基础镜像
Debian 是一个常用的基础镜像
官方提供了大家熟知的 `debian` 镜像以及面向科研领域的 `neurodebian` 镜像可以使用 `docker run` 直接运行 `Debian` 镜像
@@ -25,7 +25,7 @@ Debian 是一个也是一个常用的基础镜像。
```bash
$ docker run -it debian bash
root@668e178d8d69:/# cat /etc/issue
Debian GNU/Linux 8
Debian GNU/Linux 12
```
`Debian` 镜像很适合作为基础镜像构建自定义镜像
+2 -2
View File
@@ -24,8 +24,8 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: actions/checkout@v6
- uses: docker/setup-buildx-action@v4
- uses: docker/build-push-action@v6
with:
context: .
+7 -7
View File
@@ -171,7 +171,7 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
-o app .
# 最终镜像
FROM alpine:3.17
FROM alpine:3.21
RUN apk add --no-cache ca-certificates tzdata
@@ -233,7 +233,7 @@ name = "rust-app"
path = "src/main.rs"
[dependencies]
actix-web = "4.4"
actix-web = "4.13"
tokio = { version = "1.35", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
@@ -242,7 +242,7 @@ serde_json = "1.0"
```dockerfile
# Stage 1: 编译
FROM rust:1.75-alpine AS builder
FROM rust:1.95-alpine AS builder
RUN apk add --no-cache musl-dev
@@ -255,7 +255,7 @@ COPY src ./src
RUN cargo build --release
# Stage 2: 运行镜像
FROM alpine:3.17
FROM alpine:3.21
RUN apk add --no-cache ca-certificates
@@ -499,7 +499,7 @@ binlog_format = ROW
#### Redis 缓存部署
```dockerfile
FROM redis:7-alpine
FROM redis:8-alpine
# 复制 Redis 配置
COPY redis.conf /usr/local/etc/redis/redis.conf
@@ -632,7 +632,7 @@ services:
# Redis 缓存
redis:
image: redis:7-alpine
image: redis:8-alpine
container_name: redis
command: redis-server --appendonly yes --requirepass redispass
volumes:
@@ -848,7 +848,7 @@ services:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
image: redis:8-alpine
volumes:
postgres_data:
+1 -1
View File
@@ -403,7 +403,7 @@ Kubernetes 进阶 (Week 24-36)
- Docker 深入浅出- 本书的原版
- Kubernetes 权威指南- 深入 Kubernetes 的必读书
- 容器技术核心技术与应用- 理解底层实现
- SRE Google 运维之道- 生产环最佳实践
- SRE Google 运维之道- 生产环最佳实践
#### 博客和社区
+24
View File
@@ -7,6 +7,30 @@
"GitHub": "https://github.com/yeasy/docker_practice"
}
},
"plugins": [
"-livereload",
"mermaid-gb3",
"github",
"page-treeview",
"editlink"
],
"pluginsConfig": {
"mermaid-gb3": {
"theme": "default"
},
"github": {
"url": "https://github.com/yeasy/docker_practice"
},
"editlink": {
"base": "https://github.com/yeasy/docker_practice/blob/master/",
"label": "编辑本页"
},
"page-treeview": {
"copyright": "Copyright &#169; yeasy",
"minHeaderCount": "2",
"minHeaderDeep": "2"
}
},
"pdf": {
"pageNumbers": true,
"fontSize": 12,