Update Grafana to v13, add version notes

This commit is contained in:
yeasy
2026-04-25 15:50:13 +00:00
parent e3861040ec
commit 396cdf0744
55 changed files with 220 additions and 70 deletions
+4
View File
@@ -10,6 +10,8 @@
比如我们想要创建一个 [OpenVZ](https://openvz.org) 的 Ubuntu 16.04 [模板](https://wiki.openvz.org/Download/template/precreated)的镜像:
> **版本提示**示例中的 Ubuntu 16.04 (Xenial) 已于 2021 4 月停止支持如果用于生产环境建议更新至 Ubuntu 22.04 LTS 或更新版本
```bash
$ docker import \
http://download.openvz.org/template/precreated/ubuntu-16.04-x86_64.tar.gz \
@@ -50,6 +52,8 @@ $ docker image ls alpine
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest baa5d63471ea 5 weeks ago 4.803 MB
```
> **版本提示**`alpine:latest` 为最新版本的 Alpine Linux如果需要特定版本号 `alpine:3.20`可以明确指定以确保可重现性
保存镜像的命令为
```bash
+2
View File
@@ -60,6 +60,8 @@ Docker 镜像的每一层都有一个唯一的 ID,这个 ID 是根据该层的
Docker 使用联合文件系统 (Union FS) 与写时复制思路来实现这种分层挂载传统的实现方式常见于 `overlay2``aufs``btrfs``zfs` 等存储驱动而在 Docker Engine 29.0 及之后的全新安装中默认镜像后端已经变为 containerd image store它使用 snapshotter 来管理这些层
> **版本背景**Docker Engine 29.0发布于 2024 2 是一个重要版本分界点引入了 containerd image store 作为默认镜像存储后端这对镜像管理OCI 合规性和供应链安全都有深远影响如果你的 Docker 版本低于 29.0镜像存储仍使用传统的 classic store 路径
虽然底层实现细节不同但它们都遵循上述的 **分层 + CoW** 模型因此无论你看到的是 `overlay2` 还是 containerd snapshotter理解镜像层容器层和写时复制的方式都是一样重要的
> 想要深入了解 Overlay2 等文件系统的具体实现原理包括 WorkDirUpperDirLowerDir 等底层细节请阅读 **[第十二章 底层实现](../12_implementation/README.md)** 中的 **[联合文件系统](../12_implementation/12.4_ufs.md)** 章节
+18 -16
View File
@@ -29,6 +29,8 @@ Hello world
```
这与直接执行 `/bin/echo 'Hello world'` 几乎没有区别但实际上已经启动了一个完整的 Ubuntu 容器来执行这条命令
> **版本说明**示例使用 `ubuntu:24.04`这是最新 LTS 版本如需其他版本可替换为 `ubuntu:22.04``ubuntu:20.04`
#### 交互式容器
启动一个可以交互的 bash 终端
@@ -82,25 +84,25 @@ flowchart TD
| 选项 | 说明 | 示例 |
|------|------|------|
| `-d` | 后台运行 (detach)| `docker run -d nginx` |
| `-it` | 交互式终端 | `docker run -it ubuntu bash` |
| `--name` | 指定容器名称 | `docker run --name myapp nginx` |
| `--rm` | 退出后自动删除容器 | `docker run --rm ubuntu echo hi` |
| `-d` | 后台运行 (detach)| `docker run -d nginx:latest` |
| `-it` | 交互式终端 | `docker run -it ubuntu:24.04 bash` |
| `--name` | 指定容器名称 | `docker run --name myapp nginx:latest` |
| `--rm` | 退出后自动删除容器 | `docker run --rm ubuntu:24.04 echo hi` |
#### 端口映射
```bash
## 将容器的 80 端口映射到宿主机的 8080 端口
$ docker run -d -p 8080:80 nginx
$ docker run -d -p 8080:80 nginx:latest
## 随机映射端口
$ docker run -d -P nginx
$ docker run -d -P nginx:latest
## 只绑定到 localhost
$ docker run -d -p 127.0.0.1:8080:80 nginx
$ docker run -d -p 127.0.0.1:8080:80 nginx:latest
```
#### 数据卷挂载
@@ -108,15 +110,15 @@ $ docker run -d -p 127.0.0.1:8080:80 nginx
```bash
## 挂载命名卷
$ docker run -v mydata:/data nginx
$ docker run -v mydata:/data nginx:latest
## 挂载宿主机目录
$ docker run -v /host/path:/container/path nginx
$ docker run -v /host/path:/container/path nginx:latest
## 只读挂载
$ docker run -v /host/path:/container/path:ro nginx
$ docker run -v /host/path:/container/path:ro nginx:latest
```
#### 环境变量
@@ -136,11 +138,11 @@ $ docker run --env-file .env myapp
```bash
## 限制内存
$ docker run -m 512m nginx
$ docker run -m 512m nginx:latest
## 限制 CPU
$ docker run --cpus=1.5 nginx
$ docker run --cpus=1.5 nginx:latest
```
### 5.1.5 启动已终止容器
@@ -186,11 +188,11 @@ root@ba267838cc1b:/# ps
```bash
## 这个容器会立即退出(echo 执行完就结束了)
$ docker run ubuntu echo "hello"
$ docker run ubuntu:24.04 echo "hello"
## 解决:使用能持续运行的命令
$ docker run -d nginx # nginx 是持续运行的服务
$ docker run -d nginx:latest # nginx 是持续运行的服务
```
详细解释见[后台运行](5.2_daemon.md)
@@ -201,11 +203,11 @@ $ docker run -d nginx # nginx 是持续运行的服务
```bash
## 错误:没有 -p 参数,外部无法访问
$ docker run -d nginx
$ docker run -d nginx:latest
## 正确:映射端口
$ docker run -d -p 80:80 nginx
$ docker run -d -p 80:80 nginx:latest
```
#### Q容器内修改的文件丢失
+8 -6
View File
@@ -122,17 +122,19 @@ $ docker container ls -a
```bash
## Web 服务器
$ docker run -d -p 80:80 nginx
$ docker run -d -p 80:80 nginx:latest
## 数据库
$ docker run -d -p 3306:3306 mysql:8
$ docker run -d -p 3306:3306 mysql:8.0
## 缓存服务
$ docker run -d -p 6379:6379 redis
$ docker run -d -p 6379:6379 redis:latest
```
> **版本说明**示例使用常见的标签如 `latest` 或稳定大版本号如 `mysql:8.0`具体版本可根据需求调整生产环境建议明确指定版本号 `mysql:8.0.35`而非使用 `latest`
#### 2. 调试时先用前台模式
当容器启动有问题时**去掉 `-d` 参数** 可以直接看到输出和错误
@@ -140,7 +142,7 @@ $ docker run -d -p 6379:6379 redis
```bash
## 有问题的容器,先前台运行看看发生了什么
$ docker run myimage:latest
$ docker run myimage:v1.0.0
```
#### 3. 使用 --rm 自动清理
@@ -161,7 +163,7 @@ Hello, World!
```bash
## 后台启动
$ docker run -d --name myapp myimage:latest
$ docker run -d --name myapp myimage:v1.0.0
## 查看最近 100 行日志
@@ -194,7 +196,7 @@ $ docker logs -t myapp
3. **以交互模式调试**
```bash
$ docker run -it myimage:latest /bin/sh
$ docker run -it myimage:v1.0.0 /bin/sh
# 进入容器手动执行命令,查找问题
```
+3 -1
View File
@@ -204,7 +204,7 @@ $ docker stop $(docker ps -q) && docker container prune -f
```dockerfile
## Dockerfile 示例
FROM node:22
FROM node:22-alpine
...
## 使用 exec 形式确保信号能传递给 node 进程
@@ -212,6 +212,8 @@ FROM node:22
CMD ["node", "server.js"]
```
> **版本说明**示例使用 `node:22-alpine`这是一个精简的 Node.js 22 版本镜像可根据需求替换为其他版本 `node:20-alpine``node:latest`
#### Q容器无法停止
```bash
+2
View File
@@ -13,6 +13,8 @@ $ docker export 7691a814370e > ubuntu.tar
```
这样将导出容器快照到本地文件
> **版本说明**导出的容器快照不包含镜像版本历史导入时可以自定义标签和版本号
### 5.5.2 导入容器快照
可以使用 `docker import` 从容器快照文件中再导入为镜像例如
+10
View File
@@ -6,6 +6,16 @@
本章将具体介绍如何来管理一个容器包括创建启动和停止等
## 版本号说明
本章示例涉及多个 Docker 镜像遵循以下版本号最佳实践
- **官方镜像** `ubuntu``nginx``mysql`使用具体大版本号 `ubuntu:24.04``mysql:8.0`而非 `latest`确保示例的可重复性
- **镜像标签约定**
- `latest` `v1.0.0` 带标签的自定义镜像示例中指定具体版本
- `24.04``8.0`官方镜像的稳定版本分支
- 生产环境建议指定精确版本号 `nginx:1.24.0``mysql:8.0.35`而非仅大版本号
* [启动容器](5.1_run.md)
* [守护态运行](5.2_daemon.md)
* [终止容器](5.3_stop.md)
+4 -2
View File
@@ -15,15 +15,17 @@
你可以使用官方 `registry` 镜像来运行
```bash
$ docker run -d -p 5000:5000 --restart=always --name registry registry
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
```
> **版本说明**使用 `registry:2` 表示 Docker Registry 2.x 版本这是当前推荐的版本旧版本 Registry 1.x 已停止维护不建议使用
这将使用官方的 `registry` 镜像来启动私有仓库默认情况下仓库会被创建在容器的 `/var/lib/registry` 目录下你可以通过 `-v` 参数来将镜像文件存放在本地的指定路径例如下面的例子将上传的镜像放到本地的 `/opt/data/registry` 目录
```bash
$ docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry
registry:2
```
### 6.2.2 在私有仓库上传搜索下载镜像
+8 -2
View File
@@ -122,11 +122,13 @@ $ mkdir auth
$ docker run --rm \
--entrypoint htpasswd \
httpd:alpine \
httpd:2.4-alpine \
-Bbn username password > auth/nginx.htpasswd
```
> 将上面的 `username` `password` 替换为你自己的用户名和密码
> **版本说明**使用 `httpd:2.4-alpine` 基于 Apache 2.4 的精简镜像如需其他版本可替换为 `httpd:latest` 或指定具体版本号如 `httpd:2.4.58-alpine`
### 6.3.4 编辑 Docker Compose 配置
编辑 `compose.yaml` ( `docker-compose.yml`) 配置如下
@@ -134,7 +136,7 @@ $ docker run --rm \
```yaml
services:
registry:
image: registry
image: registry:2
ports:
- "443:443"
volumes:
@@ -145,6 +147,8 @@ volumes:
registry-data:
```
> **版本说明**Compose 配置中明确指定 `registry:2` 版本生产环境建议固定版本号 `registry:2.8.3`而非使用 `latest`以保证部署的可重复性
### 6.3.5 修改 Hosts 文件
编辑 `/etc/hosts`
@@ -187,6 +191,8 @@ $ docker image rm docker.domain.com/username/ubuntu:24.04
$ docker pull docker.domain.com/username/ubuntu:24.04
```
> **版本说明**示例使用 `ubuntu:24.04`这是最新 LTS 版本推送到私有仓库时保持了原有的版本标签建议生产环境明确指定镜像版本号
如果我们退出登录尝试推送镜像
```bash
+6 -2
View File
@@ -8,8 +8,10 @@
$ docker run -d --name nexus3 --restart=always \
-p 8081:8081 \
--mount src=nexus-data,target=/nexus-data \
sonatype/nexus3
sonatype/nexus3:3.69
```
> **版本说明**使用 `sonatype/nexus3:3.69` 指定稳定的 Nexus 版本使用具体版本号而非 `latest` 可以避免意外升级带来的不兼容问题
首次运行需等待 3-5 分钟你可以使用 `docker logs nexus3 -f` 查看日志
```bash
@@ -18,10 +20,12 @@ $ docker logs nexus3 -f
2021-03-11 15:31:21,990+0000 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer -
-------------------------------------------------
Started Sonatype Nexus OSS 3.30.0-01
Started Sonatype Nexus OSS 3.69.0
-------------------------------------------------
```
> **版本说明**上述日志中显示的是 Nexus 3.69 版本的启动日志具体版本号会随着容器镜像版本而不同
如果你看到以上内容说明 `Nexus` 已经启动成功你可以使用浏览器打开 `http://YourIP:8081` 访问 `Nexus`
首次运行请通过以下命令获取初始密码
+10
View File
@@ -6,6 +6,16 @@
大部分时候并不需要严格区分这两者的概念
## 版本号说明
本章涉及的 Registry 和相关工具版本说明
- **Docker Registry**使用 `registry:2` 推荐版本已停止维护的 `registry:1` 不建议使用
- **Nexus 3**建议指定具体版本 `sonatype/nexus3:3.69`而非 `latest`避免自动升级带来的兼容性问题
- **镜像标签规范**
- 生产环境推送至仓库时应明确指定版本号 `myapp:v1.0.0`
- 避免依赖 `latest` 标签因为其含义存在歧义且易导致版本混淆
## 为什么需要私有仓库
在讨论具体的安装和配置前让我们先理解**什么时候你应该建设私有仓库**
+3
View File
@@ -82,6 +82,7 @@ RUN pwd # 输出 /app
```docker
## 构建阶段
## 建议使用 node:20 node: 等具体版本标签避免使用 latest
FROM node:20 AS builder
WORKDIR /build
@@ -91,6 +92,7 @@ COPY . .
RUN npm run build
## 生产阶段
## 建议使用 nginx:alpine 或其他具体版本
FROM nginx:alpine
WORKDIR /usr/share/nginx/html
@@ -103,6 +105,7 @@ COPY --from=builder /build/dist .
#### 1. 尽早设置 WORKDIR
```docker
# 建议使用 node:20 等主/次版本号标签
FROM node:20
WORKDIR /app # 尽早设置
+1
View File
@@ -34,6 +34,7 @@ Starting ──成功──> Healthy ──失败N次──> Unhealthy
#### Web 服务检查
```docker
# nginx 镜像推荐使用具体的版本标签 nginx:1.25-alpine
FROM nginx
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
@@ -60,6 +60,7 @@ server {
第一阶段进行前端构建
```docker
# node 镜像推荐使用具体的版本标签 node:20-alpine
FROM node:alpine as frontend
COPY package.json /app/
@@ -81,6 +82,7 @@ RUN set -x ; cd /app \
第二阶段安装 Composer 依赖
```docker
# composer 镜像推荐使用具体的版本标签 composer:2.x
FROM composer as composer
COPY database/ /app/database/
@@ -101,6 +103,7 @@ RUN set -x ; cd /app \
第三阶段对以上阶段生成的文件进行整合
```docker
# php 镜像版本号已包含 major.minor8.3生产环境可根据需要调整
FROM php:8.3-fpm-alpine as laravel
ARG LARAVEL_PATH=/app/laravel
@@ -125,6 +128,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \
### 7.18.5 最后一个阶段构建 NGINX 镜像
```docker
# nginx 镜像推荐使用具体的版本标签 nginx:1.25-alpine
FROM nginx:alpine as nginx
ARG LARAVEL_PATH=/app/laravel
@@ -175,6 +179,7 @@ $ docker run -dit --rm --network=laravel -p 8080:80 my/nginx
完整的 `Dockerfile` 文件如下
```docker
# 生产环境推荐使用具体的版本标签 node:20-alpinecomposer:2.xphp:8.3-fpm-alpinenginx:1.25-alpine
FROM node:alpine as frontend
COPY package.json /app/
@@ -225,6 +230,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \
&& php artisan package:discover
FROM nginx:alpine as nginx
```
ARG LARAVEL_PATH=/app/laravel
+2
View File
@@ -164,6 +164,7 @@ curl -s http://myip.ipip.net -i
#### 实现方式
```docker
# 建议使用 redis:7 redis:latest具体版本号根据生产需求选择
FROM redis:7-alpine
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
@@ -216,6 +217,7 @@ docker-entrypoint.sh redis-server docker-entrypoint.sh bash
### 7.5.6 场景三带参数的应用
```docker
# 建议使用 python:3.12 python:3具体版本号根据应用兼容性需求选择
FROM python:3.12-slim
WORKDIR /app
COPY . .
+6 -6
View File
@@ -18,14 +18,14 @@ ENV <key1>=<value1> <key2>=<value2> ...
#### 设置单个变量
```docker
ENV NODE_VERSION 20.10.0
ENV NODE_VERSION 20
ENV APP_ENV production
```
#### 设置多个变量
```docker
ENV NODE_VERSION=20.10.0 \
ENV NODE_VERSION=20 \
APP_ENV=production \
APP_NAME="My Application"
```
@@ -158,15 +158,15 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
```docker
## 版本集中管理
ENV NGINX_VERSION=1.25.0 \
NODE_VERSION=20.10.0 \
PYTHON_VERSION=3.12.0
ENV NGINX_VERSION=1.25 \
NODE_VERSION=20 \
PYTHON_VERSION=3.12
RUN apt-get install nginx=${NGINX_VERSION}
## 版本分散在各处
RUN apt-get install nginx=1.25.0
RUN apt-get install nginx=1.25
```
#### 2. 不要存储敏感信息
+9 -5
View File
@@ -35,6 +35,7 @@ ARG <参数名>[=<默认值>]
```docker
## 定义有默认值的 ARG
## 建议使用主版本号 20 而非 20.10.0这样可以自动获取最新的补丁版本
ARG NODE_VERSION=20
@@ -113,17 +114,19 @@ RUN echo "Running with Node $NODE_VERSION"
#### 1. 控制基础镜像版本
```docker
ARG ALPINE_VERSION=3.19
# 推荐使用主版本号 3或指定次版本号 3.19避免指定完整补丁版本
ARG ALPINE_VERSION=3
FROM alpine:${ALPINE_VERSION}
```
```bash
$ docker build --build-arg ALPINE_VERSION=3.18 .
$ docker build --build-arg ALPINE_VERSION=3.19 .
```
#### 2. 设置软件版本
```docker
ARG NGINX_VERSION=1.25.0
# 使用次版本号 (1.25) 而非完整版本号 (1.25.0)以便自动更新到最新补丁版本
ARG NGINX_VERSION=1.25
RUN curl -fsSL https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz | tar -xz
```
@@ -197,7 +200,7 @@ $ docker build --build-arg HTTP_PROXY=http://proxy:8080 .
#### 1. ARG 提供合理默认值
```docker
## 有默认值
## 有默认值建议使用主或次版本号而非完整版本号
ARG NODE_VERSION=20
@@ -222,12 +225,13 @@ RUN echo "password=$DB_PASSWORD" > /app/.env
#### 3. 使用 ARG 提高构建灵活性
```docker
# 推荐使用次版本号标签允许Docker自动拉取最新的补丁版本
ARG BASE_IMAGE=python:3.12-slim
FROM ${BASE_IMAGE}
## 可以构建不同基础镜像的版本
## docker build --build-arg BASE_IMAGE=python:3.14-alpine .
## docker build --build-arg BASE_IMAGE=python:3-slim .
...
```
+2
View File
@@ -120,6 +120,7 @@ VOLUME /data
#### 数据库持久化
```docker
# 建议使用 postgres:16 postgres:latest具体版本号根据数据库兼容性需求选择
FROM postgres:16
VOLUME /var/lib/postgresql/data
```
@@ -173,6 +174,7 @@ $ docker inspect mycontainer --format '{{json .Mounts}}' | jq
```yaml
services:
db:
# 建议使用 postgres:16 或其他具体版本避免 latest
image: postgres:16
volumes:
# 命名卷推荐
+12 -1
View File
@@ -72,6 +72,17 @@ docker build [选项] <上下文路径/URL/->
例如 Dockerfile 所在目录执行
```bash
docker build -t my-image:v1 .
docker build -t my-image:1.0 .
```
### 关于版本号最佳实践
本章中的 Dockerfile 示例使用的基础镜像标签遵循以下原则
- **通用标签** `ubuntu:24.04``alpine``nginx`保持原样无需修改
- **基础镜像版本号** `node:20``python:3.12`使用主或次版本号而非完整版本号patch这样可以自动获取最新的补丁版本确保获得安全更新
- **避免**不建议使用 `latest` 标签和完整的 patch 版本号 `20.10.0`作为基础镜像因为这会导致构建的不可重现性或安全风险
读者在使用这些示例时应根据实际生产环境需求选择合适的版本号
更多关于 `docker build` 的用法我们在实战中会结合具体指令进行演示
+2 -2
View File
@@ -171,7 +171,7 @@ $ docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=secret \
-v postgres_data:/var/lib/postgresql/data \
postgres:16
postgres:16 # 确保与环境兼容的 PostgreSQL 版本
## 即使删除容器数据仍然保留
@@ -183,7 +183,7 @@ $ docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=secret \
-v postgres_data:/var/lib/postgresql/data \
postgres:16
postgres:16 # 确保与环境兼容的 PostgreSQL 版本
```
#### 场景二多容器共享数据
+5 -5
View File
@@ -53,7 +53,7 @@ docker network inspect my-overlay-net
docker service create --name web \
--network my-overlay-net \
--replicas 3 \
nginx:latest
nginx # 确保与环境兼容的 Nginx 版本
# 单机环境下也可以让普通容器加入 attachable overlay 网络
docker run -d --name container1 --network my-overlay-net busybox sleep 1d
@@ -111,14 +111,14 @@ docker run -d \
--dns 8.8.8.8 \
--dns 1.1.1.1 \
--dns-search example.com \
nginx:latest
nginx # 确保与环境兼容的 Nginx 版本
# DNS 选项
docker run -d \
--dns-option ndots:2 \
--dns-option timeout:1 \
--dns-option attempts:3 \
nginx:latest
nginx # 确保与环境兼容的 Nginx 版本
# 查看容器 DNS 配置
docker exec <container_id> cat /etc/resolv.conf
@@ -171,8 +171,8 @@ networks:
docker network create mynet
# 运行服务
docker run -d --name web --network mynet nginx:latest
docker run -d --name db --network mynet postgres:latest
docker run -d --name web --network mynet nginx # 确保与环境兼容的 Nginx 版本
docker run -d --name db --network mynet postgres # 确保与环境兼容的 PostgreSQL 版本
# 在其他容器中通过服务名访问
docker run -it --network mynet busybox sh
+2 -2
View File
@@ -2,7 +2,7 @@
**BuildKit** 是下一代的镜像构建组件 [moby/buildkit](https://github.com/moby/buildkit) 开源。
> **重要** Docker 23.0 BuildKit 已成为 **默认稳定构建器**无需手动启用Docker Engine v29 进一步将 Containerd 镜像存储设为默认提升与 Kubernetes 的互操作性
> **重要** Docker 23 BuildKit 已成为 **默认稳定构建器**无需手动启用Docker Engine 29 进一步将 Containerd 镜像存储设为默认提升与 Kubernetes 的互操作性
目前Docker Hub 自动构建已经支持 BuildKit具体请参考 [docker-practice/docker-hub-buildx](https://github.com/docker-practice/docker-hub-buildx)。
@@ -159,7 +159,7 @@ $ docker build -t test --ssh default=$SSH_AUTH_SOCK .
Docker Compose 同样支持 BuildKit这使得多服务应用的构建更加高效
Docker 23.0 BuildKit 已默认启用无需额外配置如果使用旧版本可设置 `DOCKER_BUILDKIT=1` 环境变量启用
Docker 23 BuildKit 已默认启用无需额外配置如果使用旧版本可设置 `DOCKER_BUILDKIT=1` 环境变量启用
### 10.1.3 官方文档
+1 -1
View File
@@ -43,7 +43,7 @@ $ docker buildx build --sbom=true -t myimage .
>
> **正确的解决路径有两条**
> 1. **推送到远端仓库**使用 `docker buildx build --sbom=true --push -t myimage:tag` SBOM 会正确保存到远端仓库远端 OCI 兼容的镜像仓库能够完整存储这些元数据
> 2. **启用 containerd image store** Docker 守护进程中启用 `containerd image store` 特性Docker v29+新安装场景默认启用Docker Desktop 上也更容易直接使用可以在本地查看和管理 SBOM attestation 元数据
> 2. **启用 containerd image store** Docker 守护进程中启用 `containerd image store` 特性Docker 29+新安装场景默认启用Docker Desktop 上也更容易直接使用可以在本地查看和管理 SBOM attestation 元数据
### 10.2.2 官方文档
+1 -1
View File
@@ -44,7 +44,7 @@ $ docker manifest inspect hello-world
`docker buildx` 是构建多架构镜像的最佳实践工具它屏蔽了底层的复杂性提供了一键构建多架构镜像的能力
Docker 19.03+ 版本中`docker buildx` 是推荐的用于构建多架构镜像的工具它使用 `BuildKit` 作为后端可以大大简化构建过程
Docker 19.03+ 版本中`docker buildx` 是推荐的用于构建多架构镜像的工具它使用 `BuildKit` 作为后端可以大大简化构建过程Docker 23+ 默认启用 BuildKit
#### 新建 `builder` 实例
+2 -2
View File
@@ -2,7 +2,7 @@
Docker Buildx 是一个 docker CLI 插件其扩展了 docker 命令支持 [Moby BuildKit](10.1_buildkit.md) 提供的功能提供了与 docker build 相同的用户体验并增加了许多新功能
> Buildx 需要 Docker v19.03+在较新版本中已更常用且功能更完整
> Buildx 需要 Docker v19.03+ Docker 19.03 及以上版本在较新版本中已更常用且功能更完整
## 本章内容
@@ -13,4 +13,4 @@ Docker Buildx 是一个 docker CLI 插件,其扩展了 docker 命令,支持
* [构建多种系统架构支持的 Docker 镜像](10.3_multi-arch-images.md)
> **供应链安全与存储后端前瞻**现代软件供应链中镜像来源证明Provenance BuildKit 中默认以 `mode=min` 添加和软件物料清单SBOM可通过 `--sbom=true` 显式开启已经成为极其重要的构建产出这些 Attestations 数据会作为 manifest 附着在 **镜像索引 (Image Index)**
> 正是基于此诉求 Docker Engine v29 起在**新安装场景**默认启用的 `containerd image store` 提供对 Image Index 的完美本地支持能力解决了传统经典存储后端Classic Store无法有效处理带 Attestations 镜像索引的瓶颈这使得你可以利用 `docker buildx imagetools inspect` 等手段甚至做到无需拉取完整镜像内容即可在 Registry 或本地高效校验镜像的安全元数据
> 正是基于此诉求 Docker Engine 29 起在**新安装场景**默认启用的 `containerd image store` 提供对 Image Index 的完美本地支持能力解决了传统经典存储后端Classic Store无法有效处理带 Attestations 镜像索引的瓶颈这使得你可以利用 `docker buildx imagetools inspect` 等手段甚至做到无需拉取完整镜像内容即可在 Registry 或本地高效校验镜像的安全元数据
+1 -1
View File
@@ -4,7 +4,7 @@ Docker Buildx 是 Docker 构建系统的重要进化,提供了高效、安全
| 概念 | 要点 |
|------|------|
| **BuildKit** | 下一代构建引擎Docker 23.0+ 默认启用 |
| **BuildKit** | 下一代构建引擎Docker 23+ 默认启用 |
| **缓存挂载** | `RUN --mount=type=cache` 加速依赖安装 |
| **Secret 挂载** | `RUN --mount=type=secret` 安全传递密钥 |
| **buildx build** | 替代 `docker build`支持更多构建功能 |
+1 -1
View File
@@ -19,7 +19,7 @@ $ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
```bash
$ docker compose version
Docker Compose version vX.Y.Z
Docker Compose version v5.x
```
### 11.2.3 卸载
+5
View File
@@ -2,6 +2,11 @@
> 本小节内容适合 `Python` 开发人员阅读
> **版本说明**本示例使用以下镜像版本
> - Python3.12-slim可替换为其他 3.x 版本
> - PostgreSQL16可替换为其他 16.x15.x 等版本
> - Django>=5.0,<6.0可根据项目需求调整
本节将使用 Docker Compose 配置并运行一个 **Django + PostgreSQL** 应用笔者不仅会介绍具体步骤还会解释每个配置项的作用以及开发环境和生产环境的差异
### 11.6.1 架构概览
+5
View File
@@ -2,6 +2,11 @@
> 本小节内容适合 Ruby 开发人员阅读
> **版本说明**本示例使用以下镜像版本
> - Ruby3.2可替换为其他 3.x 版本
> - PostgreSQL16可替换为其他 16.x15.x 等版本
> - Rails~> 7.1可根据项目需求调整
本节使用 Docker Compose 配置并运行一个 **Rails + PostgreSQL** 应用
### 11.7.1 架构概览
+4
View File
@@ -1,5 +1,9 @@
## 11.8 实战 WordPress
> **版本说明**本示例使用以下镜像版本
> - MySQL8.0可替换为其他 8.x 版本或使用 MariaDB 替代
> - WordPresslatest建议在生产环境指定具体版本 6.x
WordPress 是全球最流行的内容管理系统 (CMS)使用 Docker Compose 可以在几分钟内搭建一个包含数据库Web 服务和持久化存储的生产级 WordPress 环境
---
+3 -3
View File
@@ -95,11 +95,11 @@ flowchart TD
---
### 12.1.4 Docker Engine v29+ 变化
### 12.1.4 Docker Engine v29.x 变化
Docker Engine v29 开始架构进一步简化和标准化
Docker Engine v29.x 开始架构进一步简化和标准化
- **Containerd 镜像存储 (Image Store)** v29+ 的新安装场景中默认启用Docker 直接使用 Containerd 的镜像管理能力不再维护自己的一套 graphdriver
- **Containerd 镜像存储 (Image Store)** v29.x 的新安装场景中默认启用Docker 直接使用 Containerd 的镜像管理能力不再维护自己的一套 graphdriver
- **优势**多平台镜像支持更好镜像拉取更快 (lazy pulling) K8s 共享镜像
---
+3 -3
View File
@@ -88,11 +88,11 @@ flowchart LR
### 12.4.4 Docker 支持的存储驱动
Docker 的存储驱动经历了从早期各式各样的机制 aufs, devicemapper到被广泛使用的现代经典 graph driver (`overlay2`)再到当下Engine v29 及以后**在新安装场景中默认启用的 containerd 镜像存储引擎containerd image store** 的演进
Docker 的存储驱动经历了从早期各式各样的机制 aufs, devicemapper到被广泛使用的现代经典 graph driver (`overlay2`)再到当下Engine v29.x 及以后**在新安装场景中默认启用的 containerd 镜像存储引擎containerd image store** 的演进
| 存储后端 / 驱动 | 核心特性说明 | 推荐程度 |
|---------|------|---------|
| **containerd image store**| (v29+ 新一代默认后端新装默认) 基于 containerd snapshotters原生支持 OCI image index多架构镜像与 Attestations 构建溯源元数据存储 | **强烈推荐 (现代默认)** |
| **containerd image store**| (v29.x 新一代默认后端新装默认) 基于 containerd snapshotters原生支持 OCI image index多架构镜像与 Attestations 构建溯源元数据存储 | **强烈推荐 (现代默认)** |
| **overlay2**| (经典 Graph Driver) 传统架构下的现代 Linux 默认驱动性能优秀但在处理复杂溯源元数据索引时受限 | **推荐 (主要后备)** |
| **aufs** | 早期默认兼容性好 | 遗留系统 |
| **btrfs**/**zfs** | 使用原生稳定文件系统快照能力 | 特定场景 |
@@ -113,7 +113,7 @@ Docker 的存储驱动经历了从早期各式各样的机制(如 aufs, device
$ docker info | grep "Storage Driver"
Storage Driver: overlay2
## Engine v29+ 可以通过如下输出验证是否开启了 containerd 镜像后端
## Engine v29.x 可以通过如下输出验证是否开启了 containerd 镜像后端
$ docker info | grep "containerd image store"
containerd image store: true
```
+2
View File
@@ -271,6 +271,8 @@ $ kubectl get node -o yaml | grep CIDR
podCIDRs:
```
```bash
# 注意v0.28.2 为编写本文档时的最新版本请根据需要替换为当前版本
# 参见 https://github.com/flannel-io/flannel/releases
$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.28.2/Documentation/kube-flannel.yml
```
@@ -2,6 +2,8 @@
`kubeadm` 提供了 `kubeadm init` 以及 `kubeadm join` 这两个命令作为快速创建 `Kubernetes` 集群的最佳实践
> **版本说明**本文档基于 Kubernetes v1.36 编写Kubernetes 版本更新较快约每 4 个月一个新版本本文档中的第三方工具版本 cri-dockerdflannel仅为示例请根据实际需求更新至当前版本更完整的安装和兼容性说明请以 [Kubernetes 官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/) 为准。
> **强烈提示Docker Kubernetes 环境的时代分界**
>
> Kubernetes v1.24 内置的 `dockershim` 组件已被正式移除这意味着 **Kubernetes 不再将 Docker Engine 作为默认内置的容器运行时**虽然 Docker 仍然是你本地构建管理镜像的绝佳工具但它已不再是 kubelet 的默认运行时选项
@@ -22,6 +24,8 @@
```bash
# 安装 cri-dockerd
# 注意v0.3.24 为编写本文档时的最新版本请根据需要替换为当前版本
# 参见 https://github.com/Mirantis/cri-dockerd/releases
$ cd /tmp
$ wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.24/cri-dockerd-0.3.24.amd64.tgz
@@ -50,6 +54,8 @@ $ sudo /usr/local/bin/cri-dockerd --version
```bash
# 安装 cri-dockerd
# 注意v0.3.24 为编写本文档时的最新版本请根据需要替换为当前版本
# 参见 https://github.com/Mirantis/cri-dockerd/releases
$ cd /tmp
$ wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.24/cri-dockerd-0.3.24.amd64.tgz
@@ -282,6 +288,8 @@ $ kubectl get node -o yaml | grep CIDR
podCIDRs:
```
```bash
# 注意v0.28.2 为编写本文档时的最新版本请根据需要替换为当前版本
# 参见 https://github.com/flannel-io/flannel/releases
$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.28.2/Documentation/kube-flannel.yml
```
+4
View File
@@ -2,6 +2,8 @@
[Kind](https://kind.sigs.k8s.io/) (Kubernetes in Docker) 是一个使用 Docker 容器作为节点运行本地 Kubernetes 集群的工具。主要用于测试 Kubernetes 本身,也非常适合本地开发和 CI 环境。
> **版本说明**本文档基于 Kind v0.31.0 编写Kind 会根据下载时的默认行为自动拉取对应的 Kubernetes 版本建议定期更新 Kind 到最新版本以获得最新的 Kubernetes 支持详见 [Kind Releases](https://github.com/kubernetes-sigs/kind/releases)。
### 14.4.1 为什么选择 Kind
Kind 相比其他本地集群方案 ( Minikube) 有以下显著优势
@@ -27,6 +29,8 @@ brew install kind
```bash
# Linux AMD64
# 注意v0.31.0 为编写本文档时的最新版本请根据需要替换为当前版本
# 参见 https://github.com/kubernetes-sigs/kind/releases
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-linux-amd64
chmod +x ./kind
+4
View File
@@ -2,6 +2,8 @@
[K3s](https://k3s.io/) 是一个轻量级的 Kubernetes 发行版,由 Rancher Labs 开发。它专为边缘计算、物联网、CI、ARM 等资源受限的环境设计。K3s 被打包为单个二进制文件,只有不到 100MB,但通过了 CNCF 的一致性测试。
> **版本说明**K3s 版本与 Kubernetes 版本对应安装脚本会自动拉取最新稳定版本如需指定特定版本可在安装时设置 `INSTALL_K3S_VERSION` 环境变量详见 [K3s Releases](https://github.com/k3s-io/k3s/releases)。
### 14.5.1 核心特性
* **轻量级**移除过时的非必须的 Kubernetes 功能 (如传统的云提供商插件)使用 SQLite 作为默认数据存储 (也支持 Etcd/MySQL/Postgres)
@@ -33,6 +35,8 @@ NAME STATUS ROLES AGE VERSION
k3s-master Ready control-plane,master 1m v1.36.0+k3s1
```
> **版本说明**输出中的 `v1.36.0+k3s1` 为编写本文档时的版本示例实际输出版本号取决于你所安装的 K3s 版本更多信息请参见 [K3s Releases](https://github.com/k3s-io/k3s/releases)。
### 14.5.3 快速使用
K3s 内置了 `kubectl` 命令 (通过 `k3s kubectl` 调用)为了方便通常会建立别名或配置 `KUBECONFIG`
+2
View File
@@ -1,5 +1,7 @@
## 15.1 简介
> **版本说明** 本章内容基于 etcd 3.5 系列版本编写当前最新为 v3.5.x请访问 [etcd 官方发布页](https://github.com/etcd-io/etcd/releases) 获取最新版本信息。
如图 15-1 所示etcd 项目使用该标识
![etcd 标识](./_images/etcd_logo.png)
+3
View File
@@ -13,6 +13,7 @@
例如使用 `curl` 工具下载压缩包并解压
```bash
# 下载 etcd v3.5.29 版本请访问 https://github.com/etcd-io/etcd/releases 获取最新版本)
$ curl -L https://github.com/etcd-io/etcd/releases/download/v3.5.29/etcd-v3.5.29-linux-amd64.tar.gz -o etcd-v3.5.29-linux-amd64.tar.gz
## 国内用户可选择就近的网络加速方式以可用镜像站为准
@@ -60,6 +61,8 @@ hello world
镜像名称为 `quay.io/coreos/etcd`可以通过下面的命令启动 `etcd` 服务监听到 `2379` `2380` 端口
> **版本说明** 示例中使用 `v3.5.29` 标签请访问 [etcd 官方发布页](https://github.com/etcd-io/etcd/releases) 获取最新可用版本标签。
```bash
$ docker run \
-p 2379:2379 \
+2
View File
@@ -1,5 +1,7 @@
## 15.3 集群
> **版本说明** 本节示例使用 etcd v3.5.29请访问 [etcd 官方发布页](https://github.com/etcd-io/etcd/releases) 获取最新版本信息。
下面我们使用 [Docker Compose](../11_compose/README.md) 模拟启动一个 3 节点的 `etcd` 集群
编辑 `compose.yaml` ( `docker-compose.yml`) 文件
+2
View File
@@ -1,5 +1,7 @@
## 15.4 使用 etcdctl
> **版本说明** 本节示例基于 etcd 3.5 系列版本请访问 [etcd 官方发布页](https://github.com/etcd-io/etcd/releases) 获取最新版本信息。
`etcdctl` 是一个命令行客户端它能提供一些简洁的命令供用户直接跟 `etcd` 服务打交道而无需基于 `HTTP API` 方式这在某些情况下将很方便例如用户对服务进行测试或者手动修改数据库内容我们也推荐在刚接触 `etcd` 时通过 `etcdctl` 命令来熟悉相关的操作这些操作跟 `HTTP API` 实际上是对应的
`etcd` 项目二进制发行包中已经包含了 `etcdctl` 工具没有的话可以从 [github.com/etcd-io/etcd/releases](https://github.com/etcd-io/etcd/releases) 下载。
+3 -1
View File
@@ -1,6 +1,8 @@
# 第十五章 Etcd 项目
`etcd` `CoreOS` 团队发起的一个管理配置信息和服务发现 (`Service Discovery`) 的项目在这一章里面我们将基于 `etcd 3.x` 版本介绍该项目的目标安装和使用以及实现的技术
`etcd` `CoreOS` 团队发起的一个管理配置信息和服务发现 (`Service Discovery`) 的项目在这一章里面我们将基于 `etcd 3.5 系列`版本介绍该项目的目标安装和使用以及实现的技术
> **版本说明** 本章示例基于 etcd 3.5 系列版本编写etcd 官方维护最新两个次版本当前为 3.5 3.6请访问 [etcd 官方发布页](https://github.com/etcd-io/etcd/releases) 获取最新版本信息。
## 本章内容
+2
View File
@@ -1,5 +1,7 @@
## 16.1 简介
> **版本说明**各云平台的容器服务版本更新频繁本章示例适用于常见的 Kubernetes API 版本建议访问各云厂商官方文档 [AWS EKS](https://aws.amazon.com/eks/)、[Azure AKS](https://azure.microsoft.com/en-us/services/kubernetes-service/)、[Google GKE](https://cloud.google.com/kubernetes-engine)、[阿里云 ACK](https://www.aliyun.com/product/kubernetes)、[腾讯云 TKE](https://cloud.tencent.com/product/tke))获取最新信息。
随着容器技术的普及目前主流的云计算服务商都提供了成熟的容器服务与容器相关的云计算服务主要分为以下几种类型
### 16.1.1 容器编排托管服务
+2
View File
@@ -1,5 +1,7 @@
# 第十六章 容器与云计算
> **版本说明**云平台的 Kubernetes 版本和容器服务功能更新迅速本章示例使用通用的 API 版本 `apps/v1`建议查阅各云厂商官方文档获取最新的服务版本和配置指南
Docker 目前已经得到了众多公有云平台的支持并成为除虚拟机之外的核心云业务
除了 AWSGoogleAzure 国内的各大公有云厂商基本上都同时支持了虚拟机服务和基于 Kubernetes 的容器云业务有的还推出了其他服务例如[容器镜像服务](https://cloud.tencent.com/act/cps/redirect?redirect=11588&cps_key=3a5255852d5db99dcd5da4c72f05df61)让用户在云上享有安全高效的镜像托管、分发等服务。
+2
View File
@@ -1,5 +1,7 @@
## 17.1 Fedora CoreOS 简介
> **版本说明**Fedora CoreOS 定期发布更新建议访问 [官方下载页面](https://getfedora.org/coreos/download/) 获取最新版本和兼容性信息。
[Fedora CoreOS](https://getfedora.org/coreos/) 是一个自动更新的,最小的,整体的,以容器为中心的操作系统,不仅适用于集群,而且可独立运行,并针对运行 Kubernetes 进行了优化。它旨在结合 CoreOS Container Linux 和 Fedora Atomic Host 的优点,将 Container Linux 中的 [Ignition](https://github.com/coreos/ignition) 与 [rpm-ostree](https://github.com/coreos/rpm-ostree) 和 Project Atomic 中的 SELinux 强化等技术相集成。其目标是提供最佳的容器主机,以安全,大规模地运行容器化的工作负载。
### 17.1.1 FCOS 特性
+2
View File
@@ -1,5 +1,7 @@
## 17.3 Podman - 下一代 Linux 容器工具
> **版本说明**Podman 保持活跃的开发和发布周期建议访问 [Podman 官方文档](https://podman.io/docs) 和 [GitHub Releases](https://github.com/containers/podman/releases) 获取最新版本。
[Podman](https://github.com/containers/podman) 是一个无守护进程、与 Docker 命令高度兼容的下一代 Linux 容器工具。它由 Red Hat 开发,旨在提供一个更安全的容器运行环境。
### 17.3.1 Podman vs Docker
+2
View File
@@ -1,5 +1,7 @@
## 17.4 Buildah - 容器镜像构建工具
> **版本说明**Buildah Podman Skopeo 共同维护建议查阅 [Buildah 官方文档](https://buildah.io/) 和 [GitHub Releases](https://github.com/containers/buildah/releases) 了解最新版本。
本节介绍 Buildah包括其基础概念应用场景以及基本指令
### 17.4.1 Buildah 简介
+2
View File
@@ -1,5 +1,7 @@
## 17.5 Skopeo - 容器镜像管理工具
> **版本说明**Skopeo 属于 containers 项目生态建议访问 [Skopeo 官方仓库](https://github.com/containers/skopeo) 和 [GitHub Releases](https://github.com/containers/skopeo/releases) 获取最新版本信息。
本节介绍 Skopeo包括其基础概念应用场景以及基本指令
### 17.5.1 Skopeo 简介
+6 -2
View File
@@ -1,5 +1,7 @@
## 17.6 containerd - 核心容器运行时
> **版本说明**containerd nerdctl 保持活跃的发布周期建议查阅 [containerd 官方文档](https://containerd.io/) 和 [nerdctl GitHub Releases](https://github.com/containerd/nerdctl/releases) 获取最新版本信息。
本节介绍 containerd它是现代容器技术栈中最为核心的基础组件之一了解 containerd 有助于更深入地理解 Docker Kubernetes 的底层运行机制
### 17.6.1 containerd 简介
@@ -16,6 +18,8 @@
### 17.6.2 Docker Kubernetes 的关系
> **版本说明**本章节涉及 containerdDocker Kubernetes 的多个版本建议查阅官方文档了解最新的兼容性信息
理解 containerd首先要理清它与用户日常操作的 Docker 以及 Kubernetes 的关系
#### Docker 的架构
@@ -36,8 +40,8 @@
Kubernetes 作为一个容器编排系统为了屏蔽底层不同容器运行时的实现差异引入了 CRIContainer Runtime Interface标准
- 早期版本中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.32026 4 2.x 系列首个 LTS 版本支持从 1.7 LTS 直接升级生产环境推荐使用
- 随着 containerd 原生支持了 CRI 插件Kubernetes 开始直接与 containerd 通信去掉了 `dockershim` `dockerd` 的中间层这就是为什么从 Kubernetes 1.24+ 开始弃用 Docker引发了广泛关注实际上 Kubernetes 只是弃用 `dockershim`底层依然在使用从 Docker 基因中诞生的 containerd参见 [Kubernetes 官方文档](https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd)。
- containerd 2.0+ 移除了已弃用的 CRI v1alpha2 接口仅保留 CRI v1Kubernetes 1.26+ 仅支持 CRI v1如果集群中仍有依赖 CRI v1alpha2 的组件升级 containerd 2.x 前需先完成迁移containerd 2.3+ 2.x 系列首个 LTS 版本支持从 1.7 LTS 直接升级生产环境推荐使用详见 [containerd 发布说明](https://github.com/containerd/containerd/releases)。
### 17.6.3 为什么直接使用 containerd
+2
View File
@@ -1,5 +1,7 @@
## 17.7 安全容器运行时
> **版本说明**Kata ContainersgVisor Firecracker 均为活跃开发的项目建议查阅各项目官方文档获取最新版本和兼容性信息[Kata Containers](https://katacontainers.io/)、[gVisor](https://gvisor.dev/)、[Firecracker](https://firecracker-microvm.github.io/)。
本节介绍容器技术生态中的安全运行时机制主要探讨在隔离性和安全性上比标准 Linux 容器更进一步的方案重点介绍 Kata Containers gVisor
### 17.7.1 为什么需要安全容器
+2
View File
@@ -1,5 +1,7 @@
## 17.8 WebAssembly 与容器
> **版本说明**WebAssembly 和相关的 Wasm 运行时 WasmEdgeSpin处于快速演进阶段建议查阅 [WebAssembly 官方文档](https://webassembly.org/)、[WasmEdge](https://wasmedge.org/) 和 [Spin](https://developer.fermyon.com/spin) 官方文档获取最新信息。
本节介绍 WebAssembly (简写为 Wasm) 以及它为何成为现代容器生态中备受瞩目的前沿技术路线
### 17.8.1 什么是 WebAssembly
+5
View File
@@ -1,5 +1,10 @@
# 第十七章 容器其它生态
> **版本说明**本章介绍的工具和运行时PodmanBuildahSkopeocontainerdKata ContainersgVisorWasmEdge 都保持活跃的开发建议
> - 查阅各项目官方文档获取最新版本
> - 在生产环境使用前验证版本兼容性
> - 关注官方发布说明了解重大变更
本章将介绍 Docker Kubernetes 之外的容器生态技术
## 本章内容
+1 -1
View File
@@ -103,7 +103,7 @@ $ docker version
此后Docker 守护进程会在执行任何 API 请求前将请求转发给授权插件进行审批
> [!CAUTION]
> 重要的安全事项在配置 Authorization Plugin 务必确保插件本身的可靠性和及时更新2026 4 月披露的 CVE-2026-34040 表明不完整的 AuthZ 验证可能导致攻击者绕过授权检查并获得宿主机访问权限建议
> 重要的安全事项在配置 Authorization Plugin 务必确保插件本身的可靠性和及时更新历史上已发现多个 AuthZ 验证绕过漏洞可能导致攻击者绕过授权检查并获得宿主机访问权限建议
> - 定期审计授权插件的日志检查是否有可疑的请求被错误允许
> - 使用来自可信来源的授权插件并保持其版本最新
> - 将授权检查结果与其他安全措施 TLS 认证Rootless 模式结合使用构建纵深防御
+6 -2
View File
@@ -51,7 +51,11 @@ rule_files:
#### 2. 编写 Docker Compose 文件
创建 `compose.yaml` ( `docker-compose.yml`)下面示例使用的是 2026 4 月的稳定版本对于生产环境部署建议查阅 [Prometheus 官方文档](https://prometheus.io/docs/prometheus/latest/installation/) 确认最新推荐版本
创建 `compose.yaml` ( `docker-compose.yml`)下面示例使用的是相对较新的稳定版本**镜像版本提示**本示例中 PrometheusGrafananode-exportercAdvisor 的版本号仅为参考生产环境部署请查阅以下官方资源确认最新推荐版本
- [Prometheus 官方文档](https://prometheus.io/docs/prometheus/latest/installation/)
- [Grafana 官方发布](https://grafana.com/grafana/download)
- [node-exporter 发布页](https://github.com/prometheus/node_exporter/releases)
- [cAdvisor 发布页](https://github.com/google/cadvisor/releases)
```yaml
services:
@@ -71,7 +75,7 @@ services:
- monitoring
grafana:
image: grafana/grafana:11.3.0
image: grafana/grafana:13.0.1
ports:
- "3000:3000"
environment:
+1 -1
View File
@@ -17,7 +17,7 @@ ELK (ElasticsearchLogstashKibana) 是目前业界最流行的开源日志
#### 1. 编写 Compose 文件
1. 编写 `compose.yaml` ( `docker-compose.yml`) 配置如下示例基于 Elasticsearch 9.x请查阅 [Elastic 官方文档](https://www.elastic.co/docs/) 确认最新版本与配置兼容性):
1. 编写 `compose.yaml` ( `docker-compose.yml`) 配置如下**版本提示**示例使用 Elasticsearch 9.xKibana 9.xFluentd 等组件的特定版本号仅作为参考生产环境部署前请查阅 [Elastic 官方文档](https://www.elastic.co/docs/) 和 [Fluentd 官方文档](https://docs.fluentd.org/) 确认最新版本与配置兼容性
```yaml
services:
@@ -163,6 +163,9 @@ scrape_configs:
**完整监控栈部署**
> [!TIP]
> 以下示例中的镜像标签 `prom/prometheus:v3.11.0``prom/node-exporter:v1.11.1``ghcr.io/google/cadvisor:v0.56.2``grafana/grafana:13.0.1`仅为参考在生产环境部署前请访问各项目的官方发布页或文档获取最新版本号
```yaml
services:
prometheus:
@@ -211,7 +214,7 @@ services:
- monitoring
grafana:
image: grafana/grafana:11.3.0
image: grafana/grafana:13.0.1
container_name: grafana
ports:
- "3000:3000"