mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-04-12 03:05:54 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d0e1a20411 | ||
|
|
fae0a7a092 | ||
|
|
9074524eaa | ||
|
|
ab2e5651d6 | ||
|
|
6668bfd7b3 |
@@ -1,4 +1,4 @@
|
||||
name: Build PDF on Release
|
||||
name: Auto Release
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -10,12 +10,10 @@ permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build-pdf:
|
||||
name: Generate PDF
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Install Chromium and CJK fonts
|
||||
run: |
|
||||
@@ -27,9 +25,9 @@ jobs:
|
||||
LATEST_TAG=$(curl -fsSL -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ github.token }}" https://api.github.com/repos/yeasy/mdpress/releases/latest | jq -r .tag_name)
|
||||
VERSION="${LATEST_TAG#v}"
|
||||
echo "Installing mdpress $VERSION"
|
||||
curl -fsSL "https://github.com/yeasy/mdPress/releases/download/$LATEST_TAG/mdpress_${VERSION}_linux_amd64.tar.gz" -o mdpress.tar.gz
|
||||
tar xzf mdpress.tar.gz
|
||||
sudo mv mdpress /usr/local/bin/
|
||||
curl -fsSL "https://github.com/yeasy/mdPress/releases/download/$LATEST_TAG/mdpress_${VERSION}_linux_amd64.tar.gz" -o /tmp/mdpress.tar.gz
|
||||
tar xzf /tmp/mdpress.tar.gz -C /tmp mdpress
|
||||
sudo mv /tmp/mdpress /usr/local/bin/
|
||||
mdpress --version
|
||||
|
||||
- name: Extract tag name
|
||||
@@ -39,7 +37,7 @@ jobs:
|
||||
- name: Build PDF
|
||||
run: mdpress build --format pdf --output docker_practice-${{ steps.tag.outputs.TAG_NAME || 'latest' }}.pdf
|
||||
|
||||
- name: Create Release and upload PDF
|
||||
- name: Create Release with PDF
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
2
.github/workflows/ci.yaml
vendored
2
.github/workflows/ci.yaml
vendored
@@ -2,6 +2,8 @@ name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
|
||||
@@ -14,9 +14,7 @@
|
||||
|
||||
* [阿里云加速器](https://cr.console.aliyun.com/cn-hangzhou/instances) (需登录获取个人加速地址)
|
||||
|
||||
本节以 [AtomHub 可信镜像中心](https://hub.atomgit.com/)镜像服务 `https://hub.atomgit.com` 为例进行介绍。
|
||||
|
||||
> `hub.atomgit.com` 仅包含部分官方镜像,可以满足初学者的使用。
|
||||
本节以 [毫秒镜像](https://docker.1ms.run) 镜像服务 `https://docker.1ms.run` 为例进行介绍。由于镜像加速服务经常变动,建议查阅上方的镜像测试仓库获取最新可用地址。
|
||||
|
||||
### 3.9.2 Ubuntu 22.04+、Debian 12+、Rocky/Alma/CentOS Stream 9+
|
||||
|
||||
@@ -34,7 +32,7 @@ $ systemctl cat docker | grep '\-\-registry\-mirror'
|
||||
```json
|
||||
{
|
||||
"registry-mirrors": [
|
||||
"https://hub.atomgit.com"
|
||||
"https://docker.1ms.run"
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -54,7 +52,7 @@ $ sudo systemctl restart docker
|
||||
```json
|
||||
{
|
||||
"registry-mirrors": [
|
||||
"https://hub.atomgit.com"
|
||||
"https://docker.1ms.run"
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -66,7 +64,7 @@ $ sudo systemctl restart docker
|
||||
```json
|
||||
{
|
||||
"registry-mirrors": [
|
||||
"https://hub.atomgit.com"
|
||||
"https://docker.1ms.run"
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -77,7 +75,7 @@ $ sudo systemctl restart docker
|
||||
|
||||
```bash
|
||||
Registry Mirrors:
|
||||
https://hub.atomgit.com/
|
||||
https://docker.1ms.run/
|
||||
```
|
||||
|
||||
### 3.9.6 Kubernetes 官方镜像地址迁移
|
||||
@@ -96,6 +94,7 @@ $ docker pull registry.k8s.io/xxx
|
||||
|
||||
某些镜像不再提供服务,添加无用的镜像加速器,会拖慢镜像拉取速度,你可以从镜像配置列表中删除它们。
|
||||
|
||||
* https://hub.atomgit.com **已于 2024 年底关闭**
|
||||
* https://dockerhub.azk8s.cn **已转为私有**
|
||||
* https://reg-mirror.qiniu.com
|
||||
* https://registry.docker-cn.com
|
||||
|
||||
@@ -12,7 +12,7 @@ Docker Buildx 是 Docker 构建系统的重要进化,提供了高效、安全
|
||||
| **Manifest List** | 多架构镜像的索引文件 |
|
||||
| **SBOM** | 通过 `--sbom=true` 生成软件物料清单 |
|
||||
|
||||
### 10.4.1 延伸阅读
|
||||
### 延伸阅读
|
||||
|
||||
- [Dockerfile 指令详解](../07_dockerfile/README.md):Dockerfile 编写基础
|
||||
- [多阶段构建](../07_dockerfile/7.17_multistage_builds.md):优化镜像体积
|
||||
|
||||
@@ -178,7 +178,121 @@ Deployment 的核心能力包括:
|
||||
|
||||
> 早期 Kubernetes 使用 Replication Controller (RC) 来管理副本,现已被 ReplicaSet/Deployment 取代。
|
||||
|
||||
### 13.2.4 服务
|
||||
### 13.2.4 StatefulSet
|
||||
|
||||
Deployment 适合无状态应用,而 **StatefulSet** 用于管理有状态应用(如数据库、消息队列)。与 Deployment 不同,StatefulSet 为每个 Pod 提供稳定的网络标识和持久化存储。
|
||||
|
||||
```yaml
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: mysql
|
||||
spec:
|
||||
serviceName: mysql
|
||||
replicas: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app: mysql
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: mysql
|
||||
spec:
|
||||
containers:
|
||||
- name: mysql
|
||||
image: mysql:8.0
|
||||
volumeMounts:
|
||||
- name: data
|
||||
mountPath: /var/lib/mysql
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: data
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
```
|
||||
|
||||
StatefulSet 的核心特性:
|
||||
|
||||
* **稳定的网络标识**:Pod 名称按顺序编号(mysql-0, mysql-1, mysql-2),配合 Headless Service 提供可预测的 DNS 名称
|
||||
* **有序部署与删除**:Pod 按序号顺序创建,逆序删除
|
||||
* **持久化存储**:通过 `volumeClaimTemplates` 为每个 Pod 自动创建独立的 PVC
|
||||
|
||||
### 13.2.5 DaemonSet
|
||||
|
||||
**DaemonSet** 确保在集群的每个节点(或指定节点)上运行一个 Pod 副本。典型用途包括日志收集、监控代理和网络插件。
|
||||
|
||||
```yaml
|
||||
apiVersion: apps/v1
|
||||
kind: DaemonSet
|
||||
metadata:
|
||||
name: fluentd
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: fluentd
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: fluentd
|
||||
spec:
|
||||
containers:
|
||||
- name: fluentd
|
||||
image: fluent/fluentd:v1.17
|
||||
volumeMounts:
|
||||
- name: varlog
|
||||
mountPath: /var/log
|
||||
volumes:
|
||||
- name: varlog
|
||||
hostPath:
|
||||
path: /var/log
|
||||
```
|
||||
|
||||
当新节点加入集群时,DaemonSet 会自动在该节点上创建 Pod;当节点被移除时,对应的 Pod 也会被回收。
|
||||
|
||||
### 13.2.6 Job 与 CronJob
|
||||
|
||||
**Job** 用于运行一次性任务,确保指定数量的 Pod 成功完成后自动退出。**CronJob** 则按照 cron 表达式周期性地创建 Job。
|
||||
|
||||
```yaml
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: data-migration
|
||||
spec:
|
||||
completions: 1
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: migrate
|
||||
image: myapp/migrate:latest
|
||||
command: ["python", "migrate.py"]
|
||||
restartPolicy: Never
|
||||
backoffLimit: 3
|
||||
```
|
||||
|
||||
```yaml
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: daily-backup
|
||||
spec:
|
||||
schedule: "0 2 * * *"
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: backup
|
||||
image: myapp/backup:latest
|
||||
restartPolicy: OnFailure
|
||||
```
|
||||
|
||||
Job 的 `backoffLimit` 控制失败重试次数,`completions` 指定需要成功完成的 Pod 数量。CronJob 适用于定时备份、报表生成等场景。
|
||||
|
||||
### 13.2.7 服务
|
||||
|
||||
服务 (Service) 定义了一组 Pod 的逻辑集合和访问策略。由于 Pod 的 IP 地址是动态分配的,Service 提供了一个稳定的访问入口。
|
||||
|
||||
@@ -203,7 +317,7 @@ spec:
|
||||
| **NodePort** | 在每个节点上开放固定端口,集群外部可通过 `节点IP:端口` 访问 |
|
||||
| **LoadBalancer** | 通过云平台的负载均衡器暴露服务 |
|
||||
|
||||
### 13.2.5 卷
|
||||
### 13.2.8 卷
|
||||
|
||||
卷 (Volume) 为 Pod 中的容器提供持久化存储。Kubernetes 支持多种卷类型:
|
||||
|
||||
@@ -216,7 +330,7 @@ spec:
|
||||
|
||||
生产环境中,推荐使用 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来管理存储,实现存储资源与使用者的解耦。
|
||||
|
||||
### 13.2.6 标签
|
||||
### 13.2.9 标签
|
||||
|
||||
标签 (Label) 是附加到 Kubernetes 对象上的键值对,用于组织和选择对象子集。标签是 Kubernetes 中实现松耦合的关键机制。
|
||||
|
||||
@@ -229,7 +343,7 @@ $ kubectl get pods -l env=production
|
||||
```
|
||||
Service、Deployment 等资源都通过标签选择器 (`selector`) 来关联目标 Pod。
|
||||
|
||||
### 13.2.7 API 访问控制
|
||||
### 13.2.10 API 访问控制
|
||||
|
||||
Kubernetes API 的访问通过三个阶段进行控制:
|
||||
|
||||
@@ -237,11 +351,11 @@ Kubernetes API 的访问通过三个阶段进行控制:
|
||||
2. **授权 (Authorization)**:判断请求者是否有权限执行操作(通常使用 RBAC)
|
||||
3. **准入控制 (Admission Control)**:在请求被持久化之前对其进行校验或修改
|
||||
|
||||
### 13.2.8 Dashboard
|
||||
### 13.2.11 Dashboard
|
||||
|
||||
Kubernetes Dashboard 是一个基于 Web 的用户界面,用于部署容器化应用、监控集群资源和排查问题。Dashboard 的部署方法详见[部署 Dashboard](../14_kubernetes_setup/14.7_dashboard.md) 章节。
|
||||
|
||||
### 13.2.9 命令行工具 kubectl
|
||||
### 13.2.12 命令行工具 kubectl
|
||||
|
||||
`kubectl` 是 Kubernetes 的命令行工具,用于与集群进行交互。常用命令如下:
|
||||
|
||||
|
||||
@@ -5,14 +5,17 @@ Kubernetes 是当前最主流的容器编排平台,其声明式管理模型和
|
||||
| 概念 | 要点 |
|
||||
|------|------|
|
||||
| **Pod** | 最小调度单位,包含一组共享网络和存储的容器 |
|
||||
| **Deployment** | 管理 Pod 副本集,支持滚动更新和回滚 |
|
||||
| **Deployment** | 管理无状态应用的 Pod 副本集,支持滚动更新和回滚 |
|
||||
| **StatefulSet** | 管理有状态应用,提供稳定的网络标识和持久化存储 |
|
||||
| **DaemonSet** | 确保每个节点运行一个 Pod 副本,适用于日志、监控等场景 |
|
||||
| **Job/CronJob** | 运行一次性或定时任务,确保任务成功完成 |
|
||||
| **Service** | 为 Pod 提供稳定的网络访问入口和负载均衡 |
|
||||
| **Namespace** | 资源隔离和多租户支持 |
|
||||
| **ConfigMap/Secret** | 配置与敏感信息的管理 |
|
||||
| **Master 节点** | 运行 API Server、Scheduler、Controller Manager |
|
||||
| **Worker 节点** | 运行 kubelet、kube-proxy 和容器运行时 |
|
||||
|
||||
### 13.6.1 延伸阅读
|
||||
### 延伸阅读
|
||||
|
||||
- [部署 Kubernetes](../14_kubernetes_setup/README.md):搭建 Kubernetes 集群
|
||||
- [Etcd](../15_etcd/README.md):Kubernetes 使用的分布式存储
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
| **K3s** | 边缘计算/IoT | 轻量级,资源占用少 |
|
||||
| **手动部署** | 学习原理 | 逐步配置每个组件,加深理解 |
|
||||
|
||||
### 14.9.1 延伸阅读
|
||||
### 延伸阅读
|
||||
|
||||
- [容器编排基础](../13_kubernetes_concepts/README.md):Kubernetes 核心概念
|
||||
- [Dashboard](14.7_dashboard.md):部署可视化管理界面
|
||||
|
||||
@@ -11,7 +11,7 @@ etcd 是 Kubernetes 的核心存储组件,为分布式系统提供可靠的键
|
||||
| **etcdctl** | 命令行管理工具,支持 put/get/del/watch 等操作 |
|
||||
| **安全** | 支持 TLS 加密通信和 RBAC 访问控制 |
|
||||
|
||||
### 15.5.1 延伸阅读
|
||||
### 延伸阅读
|
||||
|
||||
- [容器编排基础](../13_kubernetes_concepts/README.md):Kubernetes 如何使用 etcd
|
||||
- [部署 Kubernetes](../14_kubernetes_setup/README.md):在集群中部署 etcd
|
||||
|
||||
16
README.md
16
README.md
@@ -101,6 +101,16 @@ docker run -it --rm -p 4000:80 ccr.ccs.tencentyun.com/dockerpracticesig/docker_p
|
||||
> * 341410255 (I), 419042067 (II), 210028779 (III), 483702734 (IV), 460598761 (V)
|
||||
> * 581983671 (VI), 252403484 (VII), 544818750 (VIII), 571502246 (IX), 145983035 (X)
|
||||
|
||||
## 推荐阅读
|
||||
|
||||
本书是技术丛书的一部分。以下书籍与本书形成互补:
|
||||
|
||||
| 书名 | 与本书的关系 |
|
||||
|------|------------|
|
||||
| [《智能体 Harness 工程指南》](https://yeasy.gitbook.io/harness_engineering_guide) | Agent 基础设施中的容器化部署与隔离 |
|
||||
| [《大模型安全权威指南》](https://yeasy.gitbook.io/ai_security_guide) | 容器安全与 AI 系统安全的交叉实践 |
|
||||
| [《区块链技术指南》](https://yeasy.gitbook.io/blockchain_guide) | 区块链节点的容器化部署 |
|
||||
|
||||
## 参与贡献
|
||||
|
||||
欢迎[参与项目维护](CONTRIBUTING.md)。
|
||||
@@ -137,4 +147,10 @@ docker run -it --rm -p 4000:80 ccr.ccs.tencentyun.com/dockerpracticesig/docker_p
|
||||
</a>
|
||||
</p>
|
||||
|
||||
## 许可证
|
||||
|
||||
本书采用 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) 许可证。
|
||||
|
||||
您可以自由分享和演绎,但需署名、非商业使用、相同方式共享。
|
||||
|
||||
[1]: https://item.jd.com/10200902362001.html
|
||||
|
||||
Reference in New Issue
Block a user