Polish Docker workflow formatting

This commit is contained in:
yeasy
2026-03-16 00:32:49 -07:00
parent 5840c160f1
commit b5830eb690
44 changed files with 107 additions and 121 deletions

View File

@@ -178,7 +178,7 @@ ubuntu:24.04
nginx # 等同于 nginx:latest
```
#### 2. 镜像 ID (Content-Addressable)
#### 2. 镜像 IDContent-Addressable 标识
每个镜像有一个基于内容计算的唯一 ID

View File

@@ -95,7 +95,7 @@ flowchart TD
ContainerLayer --> ImageLayerN --> ImageLayerN1 --> Dots --> ImageLayer1
```
#### Copy-on-Write (写时复制)
#### Copy-on-Write写时复制
当容器需要修改镜像层中的文件时

View File

@@ -12,7 +12,7 @@
> 注意以下命令以 CentOS 7 为例对于 CentOS Stream 9Rocky Linux 9 AlmaLinux 9请将 `yum` 替换为 `dnf`并将软件包后缀 `el7` 替换为 `el9`
#### YUM 本地文件安装 (推荐)
#### YUM 本地文件安装推荐
推荐这种方式是因为在生产环境中一般会选定某个指定的文档软件版本使用
@@ -78,7 +78,7 @@ Total
exiting because "Download Only" specified
```
##### 复制到目标服务器之后进入文件夹安装 (C-N)
##### 复制到目标服务器之后进入文件夹安装C-N
* 离线安装时必须使用 rpm 命令不检查依赖的方式安装
@@ -86,7 +86,7 @@ exiting because "Download Only" specified
rpm -Uvh *.rpm --nodeps --force
```
##### 锁定软件版本 (C-N)
##### 锁定软件版本C-N
**下载锁定版本软件**
@@ -228,7 +228,7 @@ reposync -r docker-ce-stable -p /tmp/docker-ce/
createrepo /var/www/html/docker-ce/
```
##### YUM 客户端设置 (C...N)
##### YUM 客户端设置C...N
```bash
rm -f /etc/yum.repos.d/*
@@ -253,7 +253,7 @@ EOF
```
##### Docker 安装 (C...N)
##### Docker 安装C...N
```bash
sudo yum makecache fast

View File

@@ -162,7 +162,7 @@ $ docker image prune
除了虚悬镜像`docker image ls` 默认列出的只是顶层镜像还有一种镜像是为了加速镜像构建重复利用资源而存在的中间层镜像
#### 查看所有镜像 (包含中间层)
#### 查看所有镜像包含中间层
```bash
$ docker images -a

View File

@@ -208,7 +208,7 @@ Untagged: ubuntu:24.04
当同一个镜像有多个标签时`docker rmi` 只是删除指定的标签不会删除镜像本身
#### 原因三被其他镜像依赖 (中间层)
#### 原因三被其他镜像依赖中间层
```bash
$ docker rmi some_base_image

View File

@@ -4,7 +4,7 @@
Dockerfile 是一个文本文件其内包含了一条条的 **指令 (Instruction)**每一条指令构建一层因此每一条指令的内容就是描述该层应当如何构建
### 4.5.1 使用 docker init 快速创建 (推荐)
### 4.5.1 使用 docker init 快速创建推荐
Docker 提供了 `docker init` 命令可以根据项目类型自动生成 Dockerfile.dockerignore compose.yaml 文件

View File

@@ -13,7 +13,7 @@ Docker 容器默认是 **前台运行** 的。使用 `-d` (detach) 参数可以
### 5.2.2 基本使用
#### 前台运行 (默认)
#### 前台运行默认
```bash
$ docker run ubuntu:24.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
@@ -29,7 +29,7 @@ hello world
- `Ctrl+C` 会终止容器
- 关闭终端窗口容器也会停止
#### 后台运行 (使用 -d 参数)
#### 后台运行使用 -d 参数
```bash
$ docker run -d ubuntu:24.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

View File

@@ -14,7 +14,7 @@
---
### 5.3.2 docker stop (推荐)
### 5.3.2 docker stop推荐
#### docker stop 基本用法

View File

@@ -22,7 +22,7 @@ Docker 提供两种进入容器的命令:
---
### 5.4.3 docker exec (推荐)
### 5.4.3 docker exec推荐
#### docker exec 基本用法
@@ -109,7 +109,7 @@ root@69d137adef7a:/# # 有提示符
---
### 5.4.4 docker attach (谨慎使用)
### 5.4.4 docker attach谨慎使用
#### docker attach 基本用法

View File

@@ -78,7 +78,7 @@ Total reclaimed space: 150MB
$ docker container prune -f
```
#### 删除所有容器 (包括运行中的)
#### 删除所有容器包括运行中的
```bash
## 先停止所有容器,再删除

View File

@@ -94,7 +94,7 @@ $ docker push username/myapp:v1
### 6.1.4 安全最佳实践
#### 1. 启用 2FA (双因素认证)
#### 1. 启用 2FA双因素认证
为了保护您的 Docker Hub 账号安全我们建议采取以下措施

View File

@@ -112,7 +112,7 @@ RUN addgroup -g 1001 -S appgroup && \
### 7.11.5 运行时切换用户
#### 使用 gosu (推荐)
#### 使用 gosu推荐
ENTRYPOINT 脚本中切换用户时不要使用 `su` `sudo`应使用 [gosu](https://github.com/tianon/gosu)

View File

@@ -28,7 +28,7 @@ LABEL version="1.0"
LABEL description="这是一个 Web 应用服务器"
```
#### 定义多个标签 (推荐)
#### 定义多个标签推荐
```docker
LABEL maintainer="user@example.com" \
@@ -68,7 +68,7 @@ LABEL org.opencontainers.image.authors="yeasy" \
---
### 7.14.5 MAINTAINER 指令 (已废弃)
### 7.14.5 MAINTAINER 指令已废弃
旧版本的 Dockerfile 中常看到 `MAINTAINER` 指令

View File

@@ -40,7 +40,7 @@ RUN ["apt-get", "update"]
### 7.1.3 常见最佳实践
#### 1. 组合命令 (减少层数)
#### 1. 组合命令减少层数
每一个 `RUN` 指令都会新建一层镜像为了减少镜像体积和层数应使用 `&&` 连接命令

View File

@@ -84,7 +84,7 @@ COPY app[0-9].js /app/ # app0.js ~ app9.js
COPY app.js /usr/src/app/
```
#### 相对路径 (基于 WORKDIR)
#### 相对路径基于 WORKDIR
```docker
WORKDIR /app

View File

@@ -30,7 +30,7 @@ ADD [选项] ["<源路径>", ... "<目标路径>"]
### 7.3.3 自动解压功能
#### 基本用法 (自动解压本地 tar)
#### 基本用法自动解压本地 tar
```docker
## 自动解压 tar.gz 到目标目录
@@ -71,7 +71,7 @@ app.tar.gz 包含: /app/ 目录结果:
---
### 7.3.4 URL 下载功能 (不推荐)
### 7.3.4 URL 下载功能不推荐
#### 基本用法

View File

@@ -18,7 +18,7 @@ CMD 有三种格式:
| **shell 格式** | `CMD 命令 参数1 参数2` | 简单场景 |
| **参数格式** | `CMD [“参数1”, “参数2”]` | 配合 ENTRYPOINT |
#### exec 格式 (推荐)
#### exec 格式推荐
```docker
CMD ["nginx", "-g", "daemon off;"]

View File

@@ -80,7 +80,7 @@ $ docker run myimage -v http://other.com # curl -s -v http://other.com ✓
### 7.5.4 场景一让镜像像命令一样使用
#### 需求 (启动前准备)
#### 需求启动前准备
创建一个查询公网 IP 命令 镜像

View File

@@ -29,7 +29,7 @@ flowchart LR
### 8.1.3 数据卷 vs 容器存储层
#### 容器存储层 (不推荐存储重要数据)
#### 容器存储层不推荐存储重要数据
```mermaid
graph TD
@@ -43,7 +43,7 @@ graph TD
Delete[容器删除] -->|导致| DataLost[数据丢失 ❌]
```
#### 数据卷 (推荐)
#### 数据卷推荐
```mermaid
graph TD
@@ -105,7 +105,7 @@ $ docker volume inspect my-vol
### 8.1.5 挂载数据卷
#### 方式一--mount (推荐)
#### 方式一--mount推荐
```bash
$ docker run -d \
@@ -122,7 +122,7 @@ $ docker run -d \
| `target` | 容器内挂载路径 |
| `readonly` | 可选只读挂载 |
#### 方式二-v (简写)
#### 方式二-v简写
```bash
$ docker run -d \

View File

@@ -53,7 +53,7 @@ flowchart LR
### 8.2.3 基本语法
#### 使用 --mount (推荐)
#### 使用 --mount推荐
```bash
$ docker run -d \
@@ -61,7 +61,7 @@ $ docker run -d \
nginx
```
#### 使用 -v (简写)
#### 使用 -v简写
```bash
$ docker run -d \

View File

@@ -59,7 +59,7 @@ nameserver 114.114.114.114
$ docker run --dns-search=example.com myapp
```
#### 3. --hostname (-h)
#### 3. --hostname -h
设置容器的主机名

View File

@@ -22,7 +22,7 @@ ghi789... none null local
| **overlay** | 跨主机网络 | Docker Swarm 集群 |
| **macvlan** | 容器拥有独立 MAC 地址 | 需要直接接入物理网络 |
### 9.2.2 Bridge 网络 (默认)
### 9.2.2 Bridge 网络默认
Bridge Docker 默认使用的网络模式Docker 启动时会自动创建 `docker0` 虚拟网桥所有未指定网络的容器都会连接到这个网桥上

View File

@@ -10,7 +10,7 @@ Overlay 网络在现有网络基础上建立虚拟网络,允许容器跨宿主
Overlay 网络通过隧道封装技术通常是 VXLAN将容器网络流量封装在宿主机物理网络的 UDP 数据包中传输
```
```text
容器 A (192.168.0.2)
veth 对
@@ -250,7 +250,7 @@ Docker 内置 DNS 服务器,但 DNS 解析涉及多个层面的配置。
#### DNS 解析流程
```
```text
容器应用 (dig www.example.com)
容器内 /etc/resolv.conf (127.0.0.11:53)

View File

@@ -101,7 +101,7 @@ COPY bin/dist-${TARGETOS}-${TARGETARCH} /dist
ENTRYPOINT ["/dist"]
```
### 10.3.3 使用 `docker manifest` (底层工具)
### 10.3.3 使用 `docker manifest`底层工具
除了 `docker buildx`我们也可以直接操作 Manifest List 来手动组合不同架构的镜像

View File

@@ -79,7 +79,7 @@ networks:
### 11.8.3 配置文件详解
#### 1. 环境变量 (.env)
#### 1. 环境变量文件 .env
为了安全不要在 `compose.yaml` 中直接写密码创建 `.env` 文件

View File

@@ -8,17 +8,10 @@ Docker 采用了 **C/S (客户端/服务端)** 架构。Client 向 Daemon 发送
```mermaid
graph LR
Client[客户端 (Docker CLI)] -- docker run --> Dockerd
Client -- docker pull --> Dockerd
subgraph "Docker Host"
Dockerd(dockerd<br>守护进程)
Containers(Containers<br>容器)
Images(Images<br>镜像)
Dockerd -- 管理 --> Containers
Dockerd -- 管理 --> Images
end
C1["客户端"] -->|docker run| D["dockerd\n守护进程"]
C1 -->|docker pull| D
D -->|管理| C2["Containers\n容器"]
D -->|管理| C3["Images\n镜像"]
```
---
@@ -27,11 +20,11 @@ graph LR
Docker 的内部架构如同洋葱一样分层每一层专注解决特定问题
#### 1. Docker CLI (客户端)
#### 1. Docker CLI客户端
用户与 Docker 交互的主要方式它将用户命令 ( `docker run`) 转换为 API 请求发送给 dockerd
#### 2. Dockerd (守护进程)
#### 2. Dockerd守护进程
Docker 的大脑
@@ -39,7 +32,7 @@ Docker 的大脑。
- 管理 Docker 对象 (镜像容器网络)
- 编排下层组件完成工作
#### 3. Containerd (高级运行时)
#### 3. Containerd高级运行时
行业标准的容器运行时 (CNCF 毕业项目)
@@ -48,7 +41,7 @@ Docker 的大脑。
- **不包含** 复杂的与容器无关的功能 (如构建API)
- Kubernetes 也可以直接使用 containerd (跳过 Docker)
#### 4. Runc (低级运行时)
#### 4. Runc低级运行时
用于创建和运行容器的 CLI 工具
@@ -72,31 +65,24 @@ Docker 的大脑。
```mermaid
flowchart TD
User((用户))
subgraph DockerCLI [Docker CLI]
Cmd[docker run -d nginx]
end
subgraph DockerHost [Docker Host]
Dockerd[Dockerd]
Containerd[Containerd]
subgraph ContainerRuntime [Runtime]
Shim[Containerd-shim]
Runc[Runc]
Container[容器进程 (nginx)]
end
end
User --> Cmd
Cmd -- 1. REST API --> Dockerd
Dockerd -- 2. gRPC --> Containerd
Containerd -- 3. 准备镜像 & Bundle --> Containerd
Containerd -- 4. Fork --> Shim
Shim -- 5. Exec --> Runc
Runc -- 6. Create Namespaces/Cgroups --> Container
Runc -.-> |7. Exit| Runc
Shim -.-> |8. Monitor IO/Exit| Container
U["用户"]
K["docker run -d nginx"]
D["Dockerd"]
C["Containerd"]
B["OCI Bundle"]
S["Containerd-shim"]
R["Runc"]
P["容器进程\nnginx"]
E["退出"]
U -->|1. REST API| D
K -->|2. gRPC| C
C -->|3. 准备镜像和 Bundle| B
C -->|4. 启动 Shim| S
S -->|5. 执行| R
R -->|6. 创建 Namespaces 和 Cgroups| P
R -->|7. 进程退出| E
S -->|8. 监控 IO 和退出| P
```
1. **CLI** 发送请求给 **Dockerd**

View File

@@ -60,7 +60,7 @@ COPY . . # 层4应用代码
---
### 12.4.3 Copy-on-Write (写时复制)
### 12.4.3 Copy-on-Write写时复制
当容器修改只读层中的文件时

View File

@@ -32,23 +32,23 @@ Kubernetes 完美解决了这些问题。
### 13.1.3 核心概念
#### Pod (豆荚)
#### Pod豆荚
Kubernetes 的最小调度单位一个 Pod 可以包含一个或多个紧密协作的容器 (共享网络和存储)就像豌豆荚里的豌豆一样
#### Node (节点)
#### Node节点
运行 Pod 的物理机或虚拟机
#### Deployment (部署)
#### Deployment部署
定义应用的期望状态 (需要 3 个副本镜像版本为 v1)K8s 会持续确保当前状态符合期望状态
#### Service (服务)
#### Service服务
定义一组 Pod 的访问策略提供稳定的 Cluster IP DNS 名称负责负载均衡
#### Namespace (命名空间)
#### Namespace命名空间
用于多租户资源隔离

View File

@@ -284,7 +284,7 @@ $ sudo modprobe overlay
$ sudo modprobe br_netfilter
```
#### 禁用 swap (必须)
#### 禁用 swap必须
kubelet 默认要求禁用 swap否则可能导致初始化失败或节点无法加入集群

View File

@@ -1,4 +1,4 @@
## 14.2 使用 kubeadm 部署 Kubernetes (使用 Docker)
## 14.2 使用 kubeadm 部署 Kubernetes使用 Docker
`kubeadm` 提供了 `kubeadm init` 以及 `kubeadm join` 这两个命令作为快速创建 `Kubernetes` 集群的最佳实践
@@ -70,7 +70,7 @@ $ sudo modprobe overlay
$ sudo modprobe br_netfilter
```
#### 禁用 swap (必须)
#### 禁用 swap必须
kubelet 默认要求禁用 swap否则可能导致初始化失败或节点无法加入集群

View File

@@ -25,7 +25,7 @@
为了让 systemd 管理 Kubernetes 服务需要创建相应的 `.service` 文件例如
```
```text
/etc/systemd/system/kubelet.service
/etc/systemd/system/kube-proxy.service
/etc/systemd/system/kube-apiserver.service

View File

@@ -16,7 +16,7 @@
16-2腾讯云容器服务示意图
### 腾讯云容器服务 (TKE) 简介
### 腾讯云容器服务TKE 简介
腾讯云容器服务 (TKE, Tencent Kubernetes Engine) 是一款容器编排平台基于原生 Kubernetes 提供支持自动扩展负载均衡多可用区高可用等企业级功能TKE 帮助开发者快速部署和管理容器化应用消除集群运维的复杂度
@@ -132,7 +132,7 @@ docker info | grep -A 5 "Registry Mirrors"
3. JSON 配置中添加上述 `registry-mirrors` 字段
4. 点击 Apply & Restart
### 腾讯云容器镜像服务 (TCR)
### 腾讯云容器镜像服务TCR
腾讯云容器镜像服务 (TCR) 提供企业级容器镜像存储和分发能力

View File

@@ -156,7 +156,7 @@ docker pull nginx:latest
time docker pull alpine:latest
```
### 阿里云容器镜像服务 (ACR)
### 阿里云容器镜像服务ACR
阿里云容器镜像服务 (ACR, Container Registry) 是企业级的容器镜像存储和分发平台

View File

@@ -16,14 +16,14 @@
随着企业业务的扩展单一云平台可能无法满足所有需求多云部署成为趋势
#### 1. 跨云灾备 (Active-Passive)
#### 1. 跨云灾备Active-Passive
主要业务运行在一个云 ( AWS)数据实时复制到另一个云 (如阿里云)当主云发生故障时流量切换到备云
* **优点**架构相对简单数据一致性好控制
* **缺点**资源闲置浪费切换可能有 RTO
#### 2. 多活部署 (Active-Active)
#### 2. 多活部署Active-Active
业务同时在多个云上运行通过全局流量管理 (DNS/GSLB) 分发流量

View File

@@ -48,7 +48,7 @@ dockerd \
> [!CAUTION]
> 永远不要将不可信的普通用户加入到 `docker` 用户组中同样在容器编排时尽量避免将宿主机的 `/var/run/docker.sock` 直接映射给普通容器使用这种模式被称为 Docker-in-Docker (DinD) Docker-out-of-Docker (DooD)存在极高的越权风险
### 18.3.3 Rootless 模式 (非特权运行)
### 18.3.3 Rootless 模式非特权运行
为了从根本上解决拥有 Docker socket 就是 root的问题Docker 在近年推出了 **Rootless 模式**

View File

@@ -39,7 +39,7 @@ chmod: /etc/passwd: Operation not permitted
```
应用只要被劫持进行越界尝试其操作系统层命令便会立刻吃瘪
### 18.5.2 强制访问控制 (AppArmor / SELinux)
### 18.5.2 强制访问控制AppArmor / SELinux
传统的 Linux 模型遵循 DAC自主访问控制这意味着如果一个文件被赋予了全员读写权限`777`普通隔离下任何人便都能修改 **MAC强制访问控制** 技术诸如 `AppArmor` (常用于 Ubuntu/Debian) `SELinux` (常用于 CentOS/RHEL)可以制定比文件所有权更宏观且优先的策略控制模块

View File

@@ -150,7 +150,7 @@ $ docker compose up -d
* **cAdvisor 无数据或报错**确认挂载了 Docker 目录与宿主机的 `/sys``/var/run` 等路径并确保宿主机上 Docker 运行正常
* **指标缺失**确认你的 Docker/内核版本与 cAdvisor 兼容对于 containerd 等运行时采集方式会不同
#### 关键指标速查 (节点/容器)
#### 关键指标速查节点/容器
在生产环境排障时建议优先关注下面几类指标并在 Grafana 面板中建立对应的常用视图

View File

@@ -135,7 +135,7 @@ docker run -d \
* **时间窗口/时区**Discover 右上角的时间范围默认可能是最近 15 分钟且时区可能影响显示建议先把范围扩大到最近 24 小时再验证
* **数据解析失败**若日志是非结构化文本仍可入库但字段不可用生产环境建议输出 JSON 并在采集端解析
#### 5. 验证日志是否写入 Elasticsearch (生产排错必备)
#### 5. 验证日志是否写入 Elasticsearch生产排错必备
当你在 Kibana 看不到日志时建议先跳过 UI从存储端直接验证日志是否入库

View File

@@ -113,7 +113,7 @@ docker history go-app:latest
**go.mod go.sum 示例**
```
```text
module github.com/example/go-app
go 1.20

View File

@@ -65,7 +65,7 @@ graph LR
您也可以选择以下方式在本地离线阅读
#### 方式 1Docker 镜像 (推荐)
#### 方式 1Docker 镜像推荐
无需安装任何依赖一条命令即可启动

View File

@@ -4,7 +4,7 @@
`dockerd` 参数会随版本变化建议优先在目标机器上执行 `dockerd --help`并以 `daemon.json` 为主进行持久化配置
### 常用选项 (Docker Engine 29.x)
### 常用选项Docker Engine 29.x
* `--config-file="/etc/docker/daemon.json"`指定 daemon 配置文件路径
* `--data-root=""`Docker 数据目录 (默认 `/var/lib/docker`)

View File

@@ -24,7 +24,7 @@
* **全书统一标准**所有的编排命令必须书写为 `docker compose` (带空格的 V2 CLI 插件版)
* 不得在新的文档和案例中提及或使用旧版格式除非是为了特意说明 V1 V2 的迁移
## 4. 可复现性目标 (以可重建为目标)
## 4. 可复现性目标以可重建为目标
本书中的所有实战和案例 (尤其 OS DevOps 章节) 应尽量给出最小可复现实验环境

View File

@@ -86,7 +86,7 @@ $ docker run --network=my-net --ip=172.25.3.3 -itd --name=my-container busybox
一般并不推荐在同一个容器内运行多个应用进程如果有类似需求可以通过一些额外的进程管理机制比如 `supervisord` 来管理所运行的进程可以参考 https://docs.docker.com/engine/containers/multi-service_container/ 。
### 如何控制容器占用系统资源 (CPU内存) 的份额
### 如何控制容器占用 CPU内存等系统资源的份额
在使用 `docker create` 命令创建容器或使用 `docker run` 创建并启动容器的时候可以使用 -c|--cpu-shares\[=0] 参数来调整容器使用 CPU 的权重使用 -m|--memory\[=MEMORY] 参数来调整容器使用内存的大小
@@ -166,7 +166,7 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
## 其它
### Docker 能在非 Linux 平台 (比如 Windows macOS) 上运行么
### Docker 能在非 Linux 平台上运行么比如 Windows macOS
完全可以安装方法请查看[安装 Docker](../../03_install/README.md) 一节

View File

@@ -14,7 +14,7 @@ Docker 学习可分为四个递进阶段,每个阶段都有明确的学习目
- 了解镜像和仓库的基本操作
**核心内容**
```
```text
Docker 简介
├── 为什么需要 Docker
├── 容器 vs 虚拟机 vs 云计算
@@ -64,7 +64,7 @@ Docker 安装配置
- 熟悉 Docker Compose 编排
**核心内容**
```
```text
Dockerfile 指令详解
├── FROM / RUN / COPY / ADD
├── WORKDIR / ENV / ARG
@@ -122,7 +122,7 @@ Docker Compose
- 总计4-6
**项目实战**
```
```text
项目 1: Python Web 应用Flask/Django
- 编写多阶段 Dockerfile
- 使用 Compose 配置数据库
@@ -148,7 +148,7 @@ Docker Compose
- 熟悉 CI/CD 集成
**核心内容**
```
```text
容器安全
├── 镜像安全
│ ├── 漏洞扫描Trivy/Grype/Snyk
@@ -231,7 +231,7 @@ CI/CD 集成
- 总计6-12
**项目实战**
```
```text
项目 1: 安全镜像构建流程
- 集成 Trivy 扫描
- 镜像签名和验证
@@ -263,7 +263,7 @@ CI/CD 集成
- 贡献开源社区
**核心内容**
```
```text
Kubernetes 高级特性
├── 集群管理
│ ├── 节点管理和驱逐
@@ -329,7 +329,7 @@ DevOps 工程化
### 知识点依赖关系
```
```text
基础概念 (Week 0-2)
├── 容器 vs 虚拟机
├── Docker 三大概念
@@ -430,7 +430,7 @@ Kubernetes 进阶 (Week 24-36)
- 有效期3
考试内容比例
```
```text
镜像和仓库20%
- 镜像构建和管理
- 镜像层和缓存
@@ -513,7 +513,7 @@ docker stats / events / inspect
**Q1: Docker 容器和虚拟机有什么区别**
A要点
```
```text
虚拟机:
- 完整的操作系统环境GB 级)
- 启动时间:分钟级
@@ -532,7 +532,7 @@ A要点
**Q2: 什么是 Docker 镜像它如何存储的**
A要点
```
```text
镜像本质:
- 只读的文件系统快照
- 分层存储结构
@@ -552,7 +552,7 @@ A要点
**Q3: 容器如何实现隔离**
A要点
```
```text
技术手段:
1. Namespace资源隔离
- PID Namespace进程隔离
@@ -579,7 +579,7 @@ A要点
**Q4: 如何优化 Docker 镜像大小**
A要点
```
```text
1. 选择合适的基础镜像:
scratch < alpine:3.17 < python:3.11-slim < python:3.11
@@ -610,7 +610,7 @@ A要点
**Q5: CMD ENTRYPOINT 有什么区别**
A要点
```
```text
CMD
- 定义容器默认命令
- 容器运行时可被覆盖docker run image_name custom_cmd
@@ -634,7 +634,7 @@ CMD ["--port", "8000"]
**Q6: Docker 网络驱动的区别**
A要点
```
```text
Bridge默认
- 虚拟网桥,容器间通过网桥通信
- 支持端口映射
@@ -662,7 +662,7 @@ None
**Q7: Volume Bind Mount 有什么区别**
A要点
```
```text
Volume
- Docker 管理,存储位置:/var/lib/docker/volumes/
- 跨平台兼容,隔离性好
@@ -686,7 +686,7 @@ tmpfs
**Q8: 如何提高 Docker 安全性**
A要点
```
```text
镜像安全:
- 使用官方镜像或可信镜像源
- 定期扫描漏洞Trivy/Grype
@@ -714,7 +714,7 @@ A要点
**Q9: 容器被 OOM 杀死如何诊断和解决**
A要点
```
```text
诊断:
1. 检查容器是否被 OOM 杀死:
docker inspect <container> | grep OOMKilled
@@ -746,7 +746,7 @@ A要点
**Q10: 如何在 CI/CD 中集成 Docker**
A要点
```
```text
构建阶段:
- 触发器Push / PR 事件
- 构建镜像docker build