Update tools to latest version

This commit is contained in:
Baohua Yang
2026-01-11 10:05:49 -08:00
parent 8bdb8406f9
commit 43e12058eb
18 changed files with 203 additions and 56 deletions

4
.gitignore vendored
View File

@@ -11,3 +11,7 @@ node_modules/
package-lock.json package-lock.json
docker-compose.override.yml docker-compose.override.yml
# Editor configs
.obsidian/
.vscode/

View File

@@ -1,6 +1,16 @@
# 修订记录 # 修订记录
* 1.3.0 2021-YY-DD * 1.4.0 2026-01-11
* 全面支持 Docker Engine v29 新版本
* 更新 Docker Compose v2.40.x
* 更新 Kubernetes 相关章节至 1.35 版本
* BuildKit 已成为默认稳定构建器移除实验特性说明
* 新增 Docker ScoutDocker Init 相关内容
* 更新镜像加速器配置
* 添加 CentOS EOL 警告推荐使用 Rocky Linux/AlmaLinux
* 扩充安全章节和底层架构章节内容
* 1.3.0 2021-12-31
* 全面支持 Docker v20.10 新版本 * 全面支持 Docker v20.10 新版本
* 新增 Docker Compose v2 * 新增 Docker Compose v2
* Docker Hub 自动构建转为付费功能 * Docker Hub 自动构建转为付费功能

View File

@@ -1,8 +1,8 @@
# Docker 从入门到实践 # Docker 从入门到实践
[![](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%20CE%20v27.x-blue.svg)](https://github.com/docker/docker-ce) [![](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] [![](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%20CE%20v29.x-blue.svg)](https://github.com/docker/docker-ce) [![](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.4.0** **v1.4.1**
| 语言 | - | | 语言 | - |
| :----------------------------------------------- | :------------------------------------------------- | | :----------------------------------------------- | :------------------------------------------------- |

View File

@@ -6,7 +6,6 @@
* [Docker 简介](introduction/README.md) * [Docker 简介](introduction/README.md)
* [什么是 Docker](introduction/what.md) * [什么是 Docker](introduction/what.md)
* [为什么要用 Docker](introduction/why.md) * [为什么要用 Docker](introduction/why.md)
* [基本概念](basic_concept/README.md) * [基本概念](basic_concept/README.md)
* [镜像](basic_concept/image.md) * [镜像](basic_concept/image.md)
* [容器](basic_concept/container.md) * [容器](basic_concept/container.md)

View File

@@ -4,15 +4,27 @@
[CentOS](https://en.wikipedia.org/wiki/CentOS) 是流行的 Linux 发行版,其软件包大多跟 RedHat 系列保持一致。 [CentOS](https://en.wikipedia.org/wiki/CentOS) 是流行的 Linux 发行版,其软件包大多跟 RedHat 系列保持一致。
该仓库位于 `https://hub.docker.com/_/centos` 提供了 CentOS 5 ~ 8 各个版本的镜像 > **重要提示**CentOS 8 已于 2021 12 31 日停止维护EOLCentOS 7 将于 2024 6 30 日结束支持Docker Hub 上的 CentOS 官方镜像**已停止更新**
>
> 对于新项目建议使用以下替代方案
> - [Rocky Linux](https://hub.docker.com/_/rockylinux)CentOS 创始人发起的社区驱动项目
> - [AlmaLinux](https://hub.docker.com/_/almalinux):由 CloudLinux 支持的企业级发行版
> - [CentOS Stream](https://hub.docker.com/r/centos/centos)RHEL 的上游开发分支
该仓库位于 `https://hub.docker.com/_/centos`提供了 CentOS 5 ~ 8 各个版本的镜像仅供参考不再更新
## 使用方法 ## 使用方法
默认会启动一个最小化的 CentOS 环境 使用 Rocky Linux 替代推荐
```bash ```bash
$ docker run --name centos -it centos bash $ docker run --name rocky -it rockylinux:9 bash
bash-4.2# ```
使用旧版 CentOS 7仅用于遗留系统
```bash
$ docker run --name centos -it centos:7 bash
``` ```
## Dockerfile ## Dockerfile

View File

@@ -2,13 +2,21 @@
**BuildKit** 是下一代的镜像构建组件 https://github.com/moby/buildkit 开源。 **BuildKit** 是下一代的镜像构建组件 https://github.com/moby/buildkit 开源。
**注意如果您的镜像构建使用的是云服务商提供的镜像构建服务腾讯云容器服务阿里云容器服务等由于上述服务提供商的 Docker 版本低于 18.09BuildKit 无法使用将造成镜像构建失败建议使用 BuildKit 构建镜像时使用一个新的 Dockerfile 文件例如 Dockerfile.buildkit** > **重要** Docker 23.0 BuildKit 已成为**默认稳定构建器**无需手动启用Docker Engine v29 进一步将 Containerd 镜像存储设为默认提升与 Kubernetes 的互操作性
目前Docker Hub 自动构建已经支持 buildkit具体请参考 https://github.com/docker-practice/docker-hub-buildx 目前Docker Hub 自动构建已经支持 BuildKit具体请参考 https://github.com/docker-practice/docker-hub-buildx
## `Dockerfile` 新增指令详解 ## `Dockerfile` 新增指令详解
`BuildKit` 我们可以使用下面几个新的 `Dockerfile` 指令来加快镜像构建 使 BuildKit 我们可以使用下面几个新的 `Dockerfile` 指令来加快镜像构建
要使用最新的 Dockerfile 语法特性建议在 Dockerfile 开头添加语法指令
```docker
# syntax=docker/dockerfile:1
```
这将使用最新的稳定版语法解析器确保你可以使用所有最新特性
### `RUN --mount=type=cache` ### `RUN --mount=type=cache`
@@ -23,7 +31,7 @@ WORKDIR /app
COPY package.json /app/ COPY package.json /app/
RUN npm i --registry=https://registry.npm.taobao.org \ RUN npm i --registry=https://registry.npmmirror.com \
&& rm -rf ~/.npm && rm -rf ~/.npm
COPY src /app/src COPY src /app/src
@@ -42,7 +50,7 @@ COPY --from=builder /app/dist /app/dist
`BuildKit` 提供了 `RUN --mount=type=cache` 指令可以实现上边的设想 `BuildKit` 提供了 `RUN --mount=type=cache` 指令可以实现上边的设想
```docker ```docker
# syntax = docker/dockerfile:experimental # syntax=docker/dockerfile:1
FROM node:alpine as builder FROM node:alpine as builder
WORKDIR /app WORKDIR /app
@@ -51,7 +59,7 @@ COPY package.json /app/
RUN --mount=type=cache,target=/app/node_modules,id=my_app_npm_module,sharing=locked \ RUN --mount=type=cache,target=/app/node_modules,id=my_app_npm_module,sharing=locked \
--mount=type=cache,target=/root/.npm,id=npm_cache \ --mount=type=cache,target=/root/.npm,id=npm_cache \
npm i --registry=https://registry.npm.taobao.org npm i --registry=https://registry.npmmirror.com
COPY src /app/src COPY src /app/src
@@ -69,11 +77,6 @@ RUN --mount=type=cache,target=/tmp/dist,from=builder,source=/app/dist \
mkdir -p /app/dist && cp -r /tmp/dist/* /app/dist mkdir -p /app/dist && cp -r /tmp/dist/* /app/dist
``` ```
**由于 `BuildKit` 为实验特性每个 `Dockerfile` 文件开头都必须加上如下指令**
```docker
# syntax = docker/dockerfile:experimental
```
第一个 `RUN` 指令执行后`id` `my_app_npm_module` 的缓存文件夹挂载到了 `/app/node_modules` 文件夹中多次执行也不会产生多个中间层镜像 第一个 `RUN` 指令执行后`id` `my_app_npm_module` 的缓存文件夹挂载到了 `/app/node_modules` 文件夹中多次执行也不会产生多个中间层镜像
@@ -97,7 +100,7 @@ RUN --mount=type=cache,target=/tmp/dist,from=builder,source=/app/dist \
该指令可以将一个镜像或上一构建阶段的文件挂载到指定位置 该指令可以将一个镜像或上一构建阶段的文件挂载到指定位置
```docker ```docker
# syntax = docker/dockerfile:experimental # syntax=docker/dockerfile:1
RUN --mount=type=bind,from=php:alpine,source=/usr/local/bin/docker-php-entrypoint,target=/docker-php-entrypoint \ RUN --mount=type=bind,from=php:alpine,source=/usr/local/bin/docker-php-entrypoint,target=/docker-php-entrypoint \
cat /docker-php-entrypoint cat /docker-php-entrypoint
``` ```
@@ -107,7 +110,7 @@ RUN --mount=type=bind,from=php:alpine,source=/usr/local/bin/docker-php-entrypoin
该指令可以将一个 `tmpfs` 文件系统挂载到指定位置 该指令可以将一个 `tmpfs` 文件系统挂载到指定位置
```docker ```docker
# syntax = docker/dockerfile:experimental # syntax=docker/dockerfile:1
RUN --mount=type=tmpfs,target=/temp \ RUN --mount=type=tmpfs,target=/temp \
mount | grep /temp mount | grep /temp
``` ```
@@ -117,7 +120,7 @@ RUN --mount=type=tmpfs,target=/temp \
该指令可以将一个文件(例如密钥)挂载到指定位置 该指令可以将一个文件(例如密钥)挂载到指定位置
```docker ```docker
# syntax = docker/dockerfile:experimental # syntax=docker/dockerfile:1
RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \ RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \
cat /root/.aws/credentials cat /root/.aws/credentials
``` ```
@@ -131,7 +134,7 @@ $ docker build -t test --secret id=aws,src=$HOME/.aws/credentials .
该指令可以挂载 `ssh` 密钥 该指令可以挂载 `ssh` 密钥
```docker ```docker
# syntax = docker/dockerfile:experimental # syntax=docker/dockerfile:1
FROM alpine FROM alpine
RUN apk add --no-cache openssh-client RUN apk add --no-cache openssh-client
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan gitlab.com >> ~/.ssh/known_hosts RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
@@ -145,9 +148,9 @@ $ ssh-add ~/.ssh/id_rsa
$ docker build -t test --ssh default=$SSH_AUTH_SOCK . $ docker build -t test --ssh default=$SSH_AUTH_SOCK .
``` ```
## docker compose build 使用 Buildkit ## docker compose build 使用 BuildKit
设置 `COMPOSE_DOCKER_CLI_BUILD=1` `DOCKER_BUILDKIT=1` 环境变量即可使 Docker 23.0 BuildKit 已默认启用无需额外配置如果使用旧版本可设置 `DOCKER_BUILDKIT=1` 环境变量
## 官方文档 ## 官方文档

View File

@@ -16,12 +16,14 @@ Linux 系统请使用以下介绍的方法安装。
[官方 GitHub Release](https://github.com/docker/compose/releases) 处直接下载编译好的二进制文件即可。 [官方 GitHub Release](https://github.com/docker/compose/releases) 处直接下载编译好的二进制文件即可。
例如 Linux 64 位系统上直接下载对应的二进制包 > **提示**版本更新较快请访问上述链接获取最新版本号替换下方命令中的版本号
例如 Linux 64 位系统上直接下载对应的二进制包 v2.40.3 为例
```bash ```bash
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} $ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
$ mkdir -p $DOCKER_CONFIG/cli-plugins $ mkdir -p $DOCKER_CONFIG/cli-plugins
$ curl -SL https://github.com/docker/compose/releases/download/v2.29.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose $ curl -SL https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
``` ```
之后执行 之后执行
@@ -34,13 +36,13 @@ $ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
```bash ```bash
$ docker compose version $ docker compose version
Docker Compose version v2.29.1 Docker Compose version v2.40.3
``` ```
## bash 补全命令 ## bash 补全命令
```bash ```bash
$ curl -L https://raw.githubusercontent.com/docker/compose/v2.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose $ curl -L https://raw.githubusercontent.com/docker/compose/v2.40.3/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
``` ```
## 卸载 ## 卸载

View File

@@ -4,6 +4,18 @@
Dockerfile 是一个文本文件其内包含了一条条的 **指令(Instruction)**每一条指令构建一层因此每一条指令的内容就是描述该层应当如何构建 Dockerfile 是一个文本文件其内包含了一条条的 **指令(Instruction)**每一条指令构建一层因此每一条指令的内容就是描述该层应当如何构建
## 使用 docker init 快速创建推荐
Docker 提供了 `docker init` 命令可以根据项目类型自动生成 Dockerfile.dockerignore compose.yaml 文件
```bash
$ docker init
```
该命令会交互式地询问项目类型 GoNode.jsPythonRust 并生成符合最佳实践的配置文件对于新项目这是推荐的起步方式
## 手动创建 Dockerfile
还以之前定制 `nginx` 镜像为例这次我们使用 Dockerfile 来定制 还以之前定制 `nginx` 镜像为例这次我们使用 Dockerfile 来定制
在一个空白目录中建立一个文本文件并命名为 `Dockerfile` 在一个空白目录中建立一个文本文件并命名为 `Dockerfile`

View File

@@ -6,7 +6,11 @@
### 系统要求 ### 系统要求
Docker 支持 64 位版本 CentOS 7/8/9以及 Rocky Linux/AlmaLinux 8/9并且要求内核版本不低于 3.10 CentOS 7 满足最低内核的要求但由于内核版本比较低部分功能 `overlay2` 存储层驱动无法使用并且部分功能可能不太稳定对于 CentOS 8 及更高版本以及 Rocky Linux/AlmaLinux推荐使用 `dnf` 包管理器 > **重要提示**CentOS 8 已于 2021 12 31 日停止维护CentOS 7 已于 2024 6 30 日结束支持建议新项目使用 **Rocky Linux** **AlmaLinux** 作为替代
Docker 支持 64 位版本 CentOS 7/8/9StreamRocky Linux 8/9AlmaLinux 8/9并且要求内核版本不低于 3.10CentOS 7 满足最低内核的要求但由于内核版本比较低部分功能 `overlay2` 存储层驱动无法使用并且部分功能可能不太稳定
对于 Rocky LinuxAlmaLinux CentOS Stream推荐使用 `dnf` 包管理器
### 卸载旧版本 ### 卸载旧版本

View File

@@ -42,7 +42,7 @@ $ brew install --cask docker
```bash ```bash
$ docker --version $ docker --version
Docker version 27.2.1, build 9e34c9b Docker version 29.1.4, build 048e46e
``` ```
如果 `docker version``docker info` 都正常的话可以尝试运行一个 [Nginx 服务器](https://hub.docker.com/_/nginx/) 如果 `docker version``docker info` 都正常的话可以尝试运行一个 [Nginx 服务器](https://hub.docker.com/_/nginx/)

View File

@@ -1,14 +1,18 @@
# 镜像加速器 # 镜像加速器
国内从 Docker Hub 拉取镜像有时会遇到困难此时可以配置镜像加速器~~国内很多云服务商都提供了国内加速器服务例如~~ 国内从 Docker Hub 拉取镜像有时会遇到困难此时可以配置镜像加速器
* [阿里云加速器(点击管理控制台 -> 登录账号(淘宝账号) -> 左侧镜像工具 -> 镜像加速器 -> 复制加速器地址)](https://cr.console.aliyun.com/cn-hangzhou/instances) > **注意**镜像加速器的可用性经常变化配置前请先访问 [docker-practice/docker-registry-cn-mirror-test](https://github.com/docker-practice/docker-registry-cn-mirror-test/actions) 查看各镜像站的实时状态。
**由于镜像服务可能出现宕机建议同时配置多个镜像各个镜像站测试结果请到 [docker-practice/docker-registry-cn-mirror-test](https://github.com/docker-practice/docker-registry-cn-mirror-test/actions) 查看。** ## 推荐配置方案
> 国内各大云服务商腾讯云阿里云百度云均提供了 Docker 镜像加速服务建议根据运行 Docker 的云平台选择对应的镜像加速服务具体请参考本页最后一小节 1. **云服务器用户**优先使用所在云平台提供的内部加速器见本页末尾
2. **本地开发用户**使用阿里云个人加速器或其他可用的公共加速器
3. **代理方案**如有条件可配置 HTTP 代理直接访问 Docker Hub
本节我们以 [AtomHub 可信镜像中心](https://hub.atomgit.com/) 镜像服务 `https://hub.atomgit.com` 为例进行介绍。 * [阿里云加速器](https://cr.console.aliyun.com/cn-hangzhou/instances)(需登录获取个人加速地址)
本节以 [AtomHub 可信镜像中心](https://hub.atomgit.com/) 镜像服务 `https://hub.atomgit.com` 为例进行介绍。
> `hub.atomgit.com` 仅包含部分官方镜像可以满足初学者的使用 > `hub.atomgit.com` 仅包含部分官方镜像可以满足初学者的使用

View File

@@ -6,12 +6,13 @@
### 系统要求 ### 系统要求
Docker 支持诸多版本的 [Ubuntu](https://ubuntu.com/server) 操作系统。但是较旧的版本上将不会有Docker新版本的持续更新以截至2024年中的几个 Ubuntu LTSLong Term Support长期支持版本为例 Docker 支持诸多版本的 [Ubuntu](https://ubuntu.com/server) 操作系统。但是较旧的版本上将不会有 Docker 新版本的持续更新,以截至 2026 年初的几个 Ubuntu LTSLong Term Support长期支持版本为例
* Ubuntu Noble 24.04 (LTS)Docker v27.2.1 * Ubuntu Noble 24.04 (LTS)Docker v29.1.x
* Ubuntu Jammy 22.04 (LTS), Docker v27.2.1 * Ubuntu Jammy 22.04 (LTS), Docker v29.1.x
* Ubuntu Focal 20.04 (LTS), Docker v27.2.1 * Ubuntu Focal 20.04 (LTS), Docker v29.1.x
* Ubuntu Bionic 18.04 (LTS)Docker v24.0.2
> **注意**Ubuntu 18.04 LTS 已于 2023 年结束标准支持不再推荐用于新部署
Ubuntu LTS 版本上目前 Docker 支持 amd64arm64armhfppc64els390x 5 个平台而非 LTS 版本支持的平台通常较少同时LTS 版本会获得 5 年的升级维护支持这样的系统会获得更长期的安全保障因此在生产环境中推荐使用 LTS 版本 Ubuntu LTS 版本上目前 Docker 支持 amd64arm64armhfppc64els390x 5 个平台而非 LTS 版本支持的平台通常较少同时LTS 版本会获得 5 年的升级维护支持这样的系统会获得更长期的安全保障因此在生产环境中推荐使用 LTS 版本

View File

@@ -2,7 +2,7 @@
**Docker** 最初是 `dotCloud` 公司创始人 [Solomon Hykes](https://github.com/shykes) 在法国期间发起的一个公司内部项目,它是基于 `dotCloud` 公司多年云服务技术的一次革新,并于 [2013 年 3 月以 Apache 2.0 授权协议开源](https://en.wikipedia.org/wiki/Docker_\(software\)),主要项目代码在 [GitHub](https://github.com/moby/moby) 上进行维护。`Docker` 项目后来还加入了 Linux 基金会,并成立推动 [开放容器联盟OCI](https://opencontainers.org/)。 **Docker** 最初是 `dotCloud` 公司创始人 [Solomon Hykes](https://github.com/shykes) 在法国期间发起的一个公司内部项目,它是基于 `dotCloud` 公司多年云服务技术的一次革新,并于 [2013 年 3 月以 Apache 2.0 授权协议开源](https://en.wikipedia.org/wiki/Docker_\(software\)),主要项目代码在 [GitHub](https://github.com/moby/moby) 上进行维护。`Docker` 项目后来还加入了 Linux 基金会,并成立推动 [开放容器联盟OCI](https://opencontainers.org/)。
**Docker** 自开源后受到广泛的关注和讨论至今其 [GitHub 项目](https://github.com/moby/moby) 已经超过 5 万 7 千个星标和一万多个 `fork`。甚至由于 `Docker` 项目的火爆,在 `2013` 年底,[dotCloud 公司决定改名为 Docker](https://www.docker.com/blog/dotcloud-is-becoming-docker-inc/)。`Docker` 最初是在 `Ubuntu 12.04` 上开发实现的;`Red Hat` 则从 `RHEL 6.5` 开始对 `Docker` 进行支持;`Google` 也在其 `PaaS` 产品中广泛应用 `Docker`。 **Docker** 自开源后受到广泛的关注和讨论至今其 [GitHub 项目](https://github.com/moby/moby) 已经超过 6.8 万个星标和一万多个 `fork`。甚至由于 `Docker` 项目的火爆,在 `2013` 年底,[dotCloud 公司决定改名为 Docker](https://www.docker.com/blog/dotcloud-is-becoming-docker-inc/)。`Docker` 最初是在 `Ubuntu 12.04` 上开发实现的;`Red Hat` 则从 `RHEL 6.5` 开始对 `Docker` 进行支持;`Google` 也在其 `PaaS` 产品中广泛应用 `Docker`。
**Docker** 使用 `Google` 公司推出的 [Go 语言](https://golang.google.cn/) 进行开发实现,基于 `Linux` 内核的 [cgroup](https://zh.wikipedia.org/wiki/Cgroups)[namespace](https://en.wikipedia.org/wiki/Linux_namespaces),以及 [OverlayFS](https://docs.docker.com/storage/storagedriver/overlayfs-driver/) 类的 [Union FS](https://en.wikipedia.org/wiki/Union_mount) 等技术,对进程进行封装隔离,属于 [操作系统层面的虚拟化技术](https://en.wikipedia.org/wiki/Operating-system-level_virtualization)。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 [LXC](https://linuxcontainers.org/lxc/introduction/),从 `0.7` 版本以后开始去除 `LXC`,转而使用自行开发的 [libcontainer](https://github.com/docker/libcontainer),从 `1.11` 版本开始,则进一步演进为使用 [runC](https://github.com/opencontainers/runc) 和 [containerd](https://github.com/containerd/containerd)。 **Docker** 使用 `Google` 公司推出的 [Go 语言](https://golang.google.cn/) 进行开发实现,基于 `Linux` 内核的 [cgroup](https://zh.wikipedia.org/wiki/Cgroups)[namespace](https://en.wikipedia.org/wiki/Linux_namespaces),以及 [OverlayFS](https://docs.docker.com/storage/storagedriver/overlayfs-driver/) 类的 [Union FS](https://en.wikipedia.org/wiki/Union_mount) 等技术,对进程进行封装隔离,属于 [操作系统层面的虚拟化技术](https://en.wikipedia.org/wiki/Operating-system-level_virtualization)。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 [LXC](https://linuxcontainers.org/lxc/introduction/),从 `0.7` 版本以后开始去除 `LXC`,转而使用自行开发的 [libcontainer](https://github.com/docker/libcontainer),从 `1.11` 版本开始,则进一步演进为使用 [runC](https://github.com/opencontainers/runc) 和 [containerd](https://github.com/containerd/containerd)。

View File

@@ -2,6 +2,8 @@
`kubeadm` 提供了 `kubeadm init` 以及 `kubeadm join` 这两个命令作为快速创建 `kubernetes` 集群的最佳实践 `kubeadm` 提供了 `kubeadm init` 以及 `kubeadm join` 这两个命令作为快速创建 `kubernetes` 集群的最佳实践
> **版本说明**Kubernetes 版本更新较快约每 4 个月一个新版本本文档基于 Kubernetes 1.35 编写请访问 [Kubernetes 官方发布页](https://kubernetes.io/releases/) 获取最新版本信息。
## 安装 containerd ## 安装 containerd
参考 [安装 Docker](../../install) 一节添加 apt/yum 之后执行如下命令 参考 [安装 Docker](../../install) 一节添加 apt/yum 之后执行如下命令
@@ -107,7 +109,7 @@ oom_score = 0
stream_idle_timeout = "4h0m0s" stream_idle_timeout = "4h0m0s"
enable_selinux = false enable_selinux = false
selinux_category_range = 1024 selinux_category_range = 1024
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9" sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10"
stats_collect_period = 10 stats_collect_period = 10
# systemd_cgroup = false # systemd_cgroup = false
enable_tls_streaming = false enable_tls_streaming = false
@@ -377,7 +379,7 @@ $ kubectl get node -o yaml | grep CIDR
``` ```
```bash ```bash
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.24.0/Documentation/kube-flannel.yml $ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.26.1/Documentation/kube-flannel.yml
``` ```
## master 节点默认不能运行 pod ## master 节点默认不能运行 pod

View File

@@ -57,15 +57,15 @@ docker.io/library/centos:latest
以下命令中的 `username` 请替换为你的 Docker 账号用户名 以下命令中的 `username` 请替换为你的 Docker 账号用户名
```bash ```bash
$ docker tag ubuntu:18.04 username/ubuntu:18.04 $ docker tag ubuntu:24.04 username/ubuntu:24.04
$ docker image ls $ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 275d79972a86 6 days ago 94.6MB ubuntu 24.04 5a81c4b8502e 6 days ago 78.3MB
username/ubuntu 18.04 275d79972a86 6 days ago 94.6MB username/ubuntu 24.04 5a81c4b8502e 6 days ago 78.3MB
$ docker push username/ubuntu:18.04 $ docker push username/ubuntu:24.04
$ docker search username $ docker search username

View File

@@ -1,7 +1,59 @@
# 安全 # 安全
评估 Docker 的安全性时主要考虑个方面: 容器安全是生产环境部署的核心考量评估 Docker 的安全性时主要考虑以下几个方面
* 由内核的命名空间和控制组机制提供的容器内在安全 ## 核心安全机制
* Docker 程序特别是服务端本身的抗攻击性
* 内核安全性的加强机制对容器安全性的影响 * **内核命名空间Namespace**提供进程网络文件系统等资源的隔离
* **控制组Cgroups**限制容器的 CPU内存I/O 等资源使用
* **Docker 守护进程安全**服务端的访问控制和防护
* **内核能力机制Capabilities**细粒度的权限控制
## 现代安全实践
### 镜像安全扫描
使用工具扫描镜像中的已知漏洞
* **Docker Scout**Docker 官方集成的安全扫描工具提供 SBOM 分析
* **Trivy**开源的全面漏洞扫描器
* **Snyk**商业级安全平台
```bash
# 使用 Docker Scout 扫描镜像
$ docker scout cves myimage:latest
# 使用 Trivy 扫描
$ trivy image myimage:latest
```
### root 用户运行
避免以 root 用户运行容器降低权限逃逸风险
```dockerfile
FROM node:20-alpine
RUN addgroup -g 1001 appgroup && adduser -u 1001 -G appgroup -D appuser
USER appuser
```
### 只读文件系统
使用只读根文件系统增强安全性
```bash
$ docker run --read-only --tmpfs /tmp myimage
```
### Docker Content TrustDCT
启用镜像签名验证确保镜像来源可信
```bash
$ export DOCKER_CONTENT_TRUST=1
$ docker pull myregistry/myimage:latest
```
## 本章内容
本章将详细介绍各安全机制的原理和配置方法

View File

@@ -2,4 +2,6 @@
Docker 1.12 [Swarm mode](https://docs.docker.com/engine/swarm/) 已经内嵌入 Docker 引擎,成为了 docker 子命令 `docker swarm`。请注意与旧的 `Docker Swarm` 区分开来。 Docker 1.12 [Swarm mode](https://docs.docker.com/engine/swarm/) 已经内嵌入 Docker 引擎,成为了 docker 子命令 `docker swarm`。请注意与旧的 `Docker Swarm` 区分开来。
`Swarm mode` 内置 kv 存储功能提供了众多的新特性比如具有容错能力的去中心化设计内置服务发现负载均衡路由网格动态伸缩滚动更新安全传输等使得 Docker 原生的 `Swarm` 集群具备与 MesosKubernetes 竞争的实力 `Swarm mode` 内置 kv 存储功能提供了众多的新特性比如具有容错能力的去中心化设计内置服务发现负载均衡路由网格动态伸缩滚动更新安全传输等
> **定位说明**Swarm mode 适合小型团队和简单的容器编排场景具有学习成本低配置简单的优势对于大规模生产部署复杂的微服务架构建议使用 [Kubernetes](../kubernetes/README.md)它拥有更丰富的生态系统和更强大的扩展能力

View File

@@ -1,11 +1,51 @@
# 基本架构 # 基本架构
Docker 采用了 `C/S` 架构包括客户端和服务端Docker 守护进程 `Daemon`作为服务端接受来自客户端的请求并处理这些请求创建运行分发容器 Docker 采用了 `C/S`客户端/服务端架构包括客户端和服务端Docker 守护进程`Daemon`作为服务端接受来自客户端的请求并处理这些请求创建运行分发容器
客户端和服务端既可以运行在一个机器上也可通过 `socket` 或者 `RESTful API` 来进行通信 客户端和服务端既可以运行在一个机器上也可通过 `socket` 或者 `RESTful API` 来进行通信
![Docker 基本架构](../.gitbook/assets/docker_arch.png) ![Docker 基本架构](../.gitbook/assets/docker_arch.png)
Docker 守护进程一般在宿主主机后台运行等待接收来自客户端的消息 ## 核心组件
Docker 客户端则为用户提供一系列可执行命令用户用这些命令实现跟 Docker 守护进程交互 Docker 的核心组件形成了一个层次化的架构
```
┌─────────────────────────────────────────────────┐
│ Docker CLI │
│ (docker 命令行工具) │
├─────────────────────────────────────────────────┤
│ dockerd │
│ (Docker 守护进程/引擎) │
├─────────────────────────────────────────────────┤
│ containerd │
│ (容器生命周期管理器) │
├─────────────────────────────────────────────────┤
│ runc │
│ (OCI 容器运行时) │
└─────────────────────────────────────────────────┘
```
* **Docker CLI**用户与 Docker 交互的命令行工具
* **dockerd**Docker 守护进程提供 Docker API管理镜像网络存储等
* **containerd**高级容器运行时管理容器的完整生命周期
* **runc**低级容器运行时根据 OCI 规范创建和运行容器
## Docker Desktop 架构
macOS Windows Docker Desktop 使用轻量级虚拟机运行 Linux 内核
* **macOS**使用 Apple Hypervisor Framework QEMU
* **Windows**使用 WSL 2推荐 Hyper-V
这意味着容器实际运行在虚拟机内的 Linux 环境中而非直接运行在宿主系统上
## Docker Engine v29 重要变化
Docker Engine v29 **Containerd 镜像存储**成为新安装的默认配置这一变化
* 简化了 Docker 的内部架构
* 提升了与 Kubernetes containerd 平台的互操作性
* Lazy Pulling 等新特性奠定基础
Docker 守护进程一般在宿主主机后台运行等待接收来自客户端的消息Docker 客户端则为用户提供一系列可执行命令用户用这些命令实现跟 Docker 守护进程交互