style: apply global formatting fixes (struct, spacing, zhlint)

This commit is contained in:
Baohua Yang
2026-02-21 11:08:52 -08:00
parent ad68b2d973
commit 79ac9c639a
159 changed files with 1708 additions and 882 deletions

View File

@@ -4,9 +4,11 @@
### 一般性的指南和建议
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 容器应该是短暂的
通过 `Dockerfile` 构建的镜像所启动的容器应该尽可能短暂生命周期短短暂意味着可以停止和销毁容器并且创建一个新容器并部署好所需的设置和配置工作量应该是极小的
通过 `Dockerfile` 构建的镜像所启动的容器应该尽可能短暂 (生命周期短)短暂 意味着可以停止和销毁容器并且创建一个新容器并部署好所需的设置和配置工作量应该是极小的
#### 使用 `.dockerignore` 文件
@@ -14,7 +16,7 @@
#### 使用多阶段构建
Docker 17.05 以上版本中你可以使用 [多阶段构建](../07_dockerfile/7.17_multistage_builds.md) 来减少所构建镜像的大小
Docker 17.05 以上版本中你可以使用[多阶段构建](../07_dockerfile/7.17_multistage_builds.md)来减少所构建镜像的大小
#### 避免安装不必要的包
@@ -22,17 +24,17 @@
#### 一个容器只运行一个进程
应该保证在一个容器中只运行一个进程将多个应用解耦到不同容器中保证了容器的横向扩展和复用例如 web 应用应该包含三个容器web应用数据库缓存
应该保证在一个容器中只运行一个进程将多个应用解耦到不同容器中保证了容器的横向扩展和复用例如 web 应用应该包含三个容器web 应用数据库缓存
如果容器互相依赖你可以使用 [Docker 自定义网络](../08_data_network/network/README.md) 来把这些容器连接起来
如果容器互相依赖你可以使用 [Docker 自定义网络](../08_data_network/network/README.md)来把这些容器连接起来
#### 镜像层数尽可能少
你需要在 `Dockerfile` 可读性也包括长期的可维护性和减少层数之间做一个平衡
你需要在 `Dockerfile` 可读性 (也包括长期的可维护性) 和减少层数之间做一个平衡
#### 将多行参数排序
将多行参数按字母顺序排序比如要安装多个包时这可以帮助你避免重复包含同一个包更新包列表时也更容易也便于 `PRs` 阅读和审查建议在反斜杠符号 `\` 之前添加一个空格以增加可读性
将多行参数按字母顺序排序 (比如要安装多个包时)这可以帮助你避免重复包含同一个包更新包列表时也更容易也便于 `PRs` 阅读和审查建议在反斜杠符号 `\` 之前添加一个空格以增加可读性
下面是来自 `buildpack-deps` 镜像的例子
@@ -51,7 +53,7 @@ RUN apt-get update && apt-get install -y \
但是如果你想在构建的过程中使用缓存你得明白什么时候会什么时候不会找到匹配的镜像遵循的基本规则如下
* 从一个基础镜像开始`FROM` 指令指定下一条指令将和该基础镜像的所有子镜像进行匹配检查这些子镜像被创建时使用的指令是否和被检查的指令完全一样如果不是则缓存失效
* 从一个基础镜像开始 (`FROM` 指令指定)下一条指令将和该基础镜像的所有子镜像进行匹配检查这些子镜像被创建时使用的指令是否和被检查的指令完全一样如果不是则缓存失效
* 在大多数情况下只需要简单地对比 `Dockerfile` 中的指令和子镜像然而有些指令需要更多的检查和解释
* 对于 `ADD` `COPY` 指令镜像中对应文件的内容也会被检查每个文件都会计算出一个校验和文件的最后修改时间和最后访问时间不会纳入校验在缓存的查找过程中会将这些校验和和已存在镜像中的文件校验和进行对比如果文件有任何改变比如内容和元数据则缓存失效
* 除了 `ADD` `COPY` 指令缓存匹配过程不会查看临时容器中的文件来决定缓存是否匹配例如当执行完 `RUN apt-get -y update` 指令后容器中一些文件被更新 Docker 不会检查这些文件这种情况下只有指令字符串本身被用来匹配缓存
@@ -64,7 +66,7 @@ RUN apt-get update && apt-get install -y \
#### FROM
尽可能使用当前官方仓库作为你构建镜像的基础推荐使用 [Alpine](https://hub.docker.com/_/alpine/) 镜像,因为它被严格控制并保持最小尺寸目前小于 5 MB,但它仍然是一个完整的发行版。
尽可能使用当前官方仓库作为你构建镜像的基础推荐使用 [Alpine](https://hub.docker.com/_/alpine/) 镜像,因为它被严格控制并保持最小尺寸 (目前小于 5 MB),但它仍然是一个完整的发行版。
#### LABEL
@@ -102,11 +104,15 @@ LABEL vendor=ACME\ Incorporated \
为了保持 `Dockerfile` 文件的可读性可理解性以及可维护性建议将长的或复杂的 `RUN` 指令用反斜杠 `\` 分割成多行
##### 概述
总体概述了以下内容
##### apt-get
`RUN` 指令最常见的用法是安装包用的 `apt-get`因为 `RUN apt-get` 指令会安装包所以有几个问题需要注意
不要使用 `RUN apt-get upgrade` `dist-upgrade`因为许多基础镜像中的必须包不会在一个非特权容器中升级如果基础镜像中的某个包过时了你应该联系它的维护者如果你确定某个特定的包比如 `foo`需要升级使用 `apt-get install -y foo` 就行该指令会自动升级 `foo`
不要使用 `RUN apt-get upgrade` `dist-upgrade`因为许多基础镜像中的 必须 包不会在一个非特权容器中升级如果基础镜像中的某个包过时了你应该联系它的维护者如果你确定某个特定的包比如 `foo`需要升级使用 `apt-get install -y foo` 就行该指令会自动升级 `foo`
永远将 `RUN apt-get update` `apt-get install` 组合成一条 `RUN` 声明例如
@@ -174,9 +180,9 @@ RUN apt-get update && apt-get install -y \
#### CMD
`CMD` 指令用于执行目标镜像中包含的软件可以包含参数`CMD` 大多数情况下都应该以 `CMD ["executable", "param1", "param2"...]` 的形式使用因此如果创建镜像的目的是为了部署某个服务(比如 `Apache`)你可能会执行类似于 `CMD ["apache2", "-DFOREGROUND"]` 形式的命令我们建议任何服务镜像都使用这种形式的命令
`CMD` 指令用于执行目标镜像中包含的软件可以包含参数`CMD` 大多数情况下都应该以 `CMD ["executable", "param1", "param2"...]` 的形式使用因此如果创建镜像的目的是为了部署某个服务 (比如 `Apache`)你可能会执行类似于 `CMD ["apache2", "-DFOREGROUND"]` 形式的命令我们建议任何服务镜像都使用这种形式的命令
多数情况下`CMD` 都需要一个交互式的 `shell` (bash, Python, perl )例如 `CMD ["perl", "-de0"]`或者 `CMD ["PHP", "-a"]`使用这种形式意味着当你执行类似 `docker run -it python` 你会进入一个准备好的 `shell` `CMD` 应该在极少的情况下才能以 `CMD ["param", "param"]` 的形式与 `ENTRYPOINT` 协同使用除非你和你的镜像使用者都对 `ENTRYPOINT` 的工作方式十分熟悉
多数情况下`CMD` 都需要一个交互式的 `shell` (bashPythonperl )例如 `CMD ["perl", "-de0"]`或者 `CMD ["PHP", "-a"]`使用这种形式意味着当你执行类似 `docker run -it python` 你会进入一个准备好的 `shell` `CMD` 应该在极少的情况下才能以 `CMD ["param", "param"]` 的形式与 `ENTRYPOINT` 协同使用除非你和你的镜像使用者都对 `ENTRYPOINT` 的工作方式十分熟悉
#### EXPOSE
@@ -206,7 +212,7 @@ ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
#### ADD COPY
虽然 `ADD` `COPY` 功能类似但一般优先使用 `COPY`因为它比 `ADD` 更透明`COPY` 只支持简单将本地文件拷贝到容器中 `ADD` 有一些并不明显的功能比如本地 tar 提取和远程 URL 支持因此`ADD` 的最佳用例是将本地 tar 文件自动提取到镜像中例如 `ADD rootfs.tar.xz`
虽然 `ADD` `COPY` 功能类似但一般优先使用 `COPY`因为它比 `ADD` 更透明`COPY` 只支持简单将本地文件拷贝到容器中 `ADD` 有一些并不明显的功能 (比如本地 tar 提取和远程 URL 支持)因此`ADD` 的最佳用例是将本地 tar 文件自动提取到镜像中例如 `ADD rootfs.tar.xz`
如果你的 `Dockerfile` 有多个步骤需要使用上下文中不同的文件单独 `COPY` 每个文件而不是一次性的 `COPY` 所有文件这将保证每个步骤的构建缓存只在特定的文件变化时失效例如
@@ -245,9 +251,9 @@ RUN mkdir -p /usr/src/things \
#### ENTRYPOINT
`ENTRYPOINT` 的最佳用处是设置镜像的主命令允许将镜像当成命令本身来运行 `CMD` 提供默认选项
`ENTRYPOINT` 的最佳用处是设置镜像的主命令允许将镜像当成命令本身来运行 ( `CMD` 提供默认选项)
例如下面的示例镜像提供了命令行工具 `s3cmd`:
例如下面的示例镜像提供了命令行工具 `s3cmd`
```docker
ENTRYPOINT ["s3cmd"]
@@ -330,7 +336,7 @@ $ docker run --rm -it postgres bash
>注意在镜像中用户和用户组每次被分配的 UID/GID 都是不确定的下次重新构建镜像时被分配到的 UID/GID 可能会不一样如果要依赖确定的 UID/GID你应该显式的指定一个 UID/GID
你应该避免使用 `sudo`因为它不可预期的 TTY 和信号转发行为可能造成的问题比它能解决的问题还多如果你真的需要和 `sudo` 类似的功能例如 root 权限初始化某个守护进程以非 root 权限执行它你可以使用 [gosu](https://github.com/tianon/gosu)。
你应该避免使用 `sudo`因为它不可预期的 TTY 和信号转发行为可能造成的问题比它能解决的问题还多如果你真的需要和 `sudo` 类似的功能 (例如 root 权限初始化某个守护进程以非 root 权限执行它)你可以使用 [gosu](https://github.com/tianon/gosu)。
最后为了减少层数和复杂度避免频繁地使用 `USER` 来回切换用户

View File

@@ -1,8 +1,10 @@
## 16.2 如何调试 Docker
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 开启 Debug 模式
dockerd 配置文件 daemon.json默认位于 /etc/docker/中添加
dockerd 配置文件 daemon.json (默认位于 /etc/docker/) 中添加
```json
{
@@ -45,7 +47,7 @@ $ sudo kill -SIGUSR1 $(pidof dockerd)
$ docker system prune
```
如果你只是想恢复出厂设置 Docker Desktop 里也提供了相应入口
如果你只是想 恢复出厂设置 Docker Desktop 里也提供了相应入口
```bash
$ sudo rm -rf /var/lib/docker
@@ -53,32 +55,36 @@ $ sudo rm -rf /var/lib/docker
### 常见故障排查
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 容器启动失败
如果容器启动后立即退出可以使用 `docker logs` 查看原因
* **Exit Code 1**: 应用程序错误通常是配置错误或依赖缺失
* **Exit Code 137**: OOM (Out Of Memory)容器内存不足被内核杀掉
* **Exit Code 1**应用程序错误通常是配置错误或依赖缺失
* **Exit Code 137**OOM (Out Of Memory)容器内存不足被内核杀掉
* 检查宿主机内存
* 调整容器内存限制 (`--memory`)
* **Exit Code 127**: 命令未找到可能是 `ENTRYPOINT` `CMD` 指定的命令不存在
* **Exit Code 127**命令未找到可能是 `ENTRYPOINT` `CMD` 指定的命令不存在
#### 网络连接问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面
##### 容器内部无法联网
1. 检查 Docker DNS 配置 (`/etc/docker/daemon.json`)
2. 检查宿主机防火墙 (iptables/firewalld) 是否拦截了转发
3. 容器内测试: `ping 8.8.8.8` (测试连通性), `nslookup google.com` (测试 DNS)
3. 容器内测试`ping 8.8.8.8` (测试连通性)`nslookup google.com` (测试 DNS)
##### 端口映射不通
1. 检查容器端口是否正确监听: `netstat -tunlp` (宿主机) `docker exec <container> netstat -tunlp`
1. 检查容器端口是否正确监听`netstat -tunlp` (宿主机) `docker exec <container> netstat -tunlp`
2. 确认应用监听地址是 `0.0.0.0` 而不是 `127.0.0.1`
* 如果应用监听在 `127.0.0.1`只有容器内部能访问映射到宿主机外部也无法被外部请求访问
#### 镜像拉取失败
* **connection refused**: 检查网络或代理设置
* **image not found**: 检查镜像名称和 Tag 拼写
* **EOF / timeout**: 网络不稳定尝试配置镜像加速器
* **connection refused**检查网络或代理设置
* **image not found**检查镜像名称和 Tag 拼写
* **EOF / timeout**网络不稳定尝试配置镜像加速器

View File

@@ -1,5 +1,7 @@
## 16.3 资源链接
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 官方网站
* Docker 官方主页https://www.docker.com
@@ -19,7 +21,7 @@
### 技术交流
* Docker 邮件列表 https://groups.google.com/forum/#!forum/docker-user
* Docker 邮件列表https://groups.google.com/forum/#!forum/docker-user
* Docker 社区 Slackhttps://dockercommunity.slack.com/
* Docker Community Discord: https://discord.gg/docker
* Docker X (Twitter) 主页https://twitter.com/docker

View File

@@ -1,4 +1,4 @@
## 16.4 术语词表出版统一版
## 16.4 术语词表 (出版统一版)
本词表用于统一全书术语缩写和命令表达适用于最终出版前清稿
@@ -27,7 +27,7 @@
### 清稿执行规则
1. 术语首次出现采用中文英文格式例如注册服务器Registry
1. 术语首次出现采用 中文 (英文) 格式例如 注册服务器 (Registry)
2. 命令文件名配置键统一使用反引号包裹
3. 同一章节中术语只保留一种主写法不混用同义词
4. 若引用历史名词 `docker-compose.yml`需显式标注历史文件名
4. 若引用历史名词 ( `docker-compose.yml`)需显式标注 历史文件名

View File

@@ -1,4 +1,4 @@
## 16.5 出版清稿规范图号与章节风格
## 16.5 出版清稿规范 (图号与章节风格)
本规范用于最终出版前清稿确保全书图号图题章节结构与行文风格一致
@@ -6,22 +6,22 @@
1. 图号格式统一为`图 <章号>-<序号> <图题>`例如 `图 10-2 Rails + PostgreSQL 的 Compose 架构`
2. 图号在同一章内按出现顺序连续编号不重复不跳号
3. 正文引用图片统一写法`如图 <章号>-<序号> 所示`不使用下图/上图/示意图如下
4. 所有图片必须提供有意义的 alt 文本不使用空 alt`![](...)`
3. 正文引用图片统一写法`如图 <章号>-<序号> 所示`不使用 下图/上图/示意图如下
4. 所有图片必须提供有意义的 alt 文本不使用空 alt (`![](...)`)
5. 图题单独成行放在图片下方
### 章节风格规范
1. 小节标题统一使用编号体例`## 10.6 ...``### 步骤 1...`
2. 步骤型内容统一使用步骤 N中文格式不使用 `Step N:`
2. 步骤型内容统一使用 步骤 N 中文格式不使用 `Step N:`
3. 命令行示例统一以 `bash` 代码块展示提示符统一为 `$`
4. 关键提醒统一使用引用块`> 注意/提示/警告`避免正文中混杂多种强调样式
5. 章节内术语使用需遵循[术语词表出版统一版](16.4_terminology.md)
4. 关键提醒统一使用引用块 (`> 注意/提示/警告`)避免正文中混杂多种强调样式
5. 章节内术语使用需遵循[术语词表 (出版统一版)](16.4_terminology.md)
### 出版前自检清单
1. 是否仍存在下图/上图/示意图如下等相对指代
1. 是否仍存在 下图/上图/示意图如下 等相对指代
2. 是否存在未编号或编号冲突的图题
3. 是否存在 `kubernetes``compose` 等正文大小写不统一写法
4. 是否存在 `Step N:` 步骤 N混用
4. 是否存在 `Step N:` 步骤 N 混用
5. 是否存在未加反引号的命令文件名和配置键名

View File

@@ -1,14 +1,18 @@
# 第十六章 附录
# 第十六章附录
本章包含了 Docker 相关的参考资料常见问题解答以及最佳实践指南旨在为读者提供便捷的查阅工具
## 概述
总体概述了以下内容
## 目录
* [**常见问题总结 (FAQ)**](faq/README.md)汇总了学习和使用 Docker 过程中的常见问题与错误解决方案
* [**热门镜像介绍**](repo/README.md)详细介绍了 Nginx, MySQL, Redis 等常用官方镜像的使用方法
* [**热门镜像介绍**](repo/README.md)详细介绍了 NginxMySQLRedis 等常用官方镜像的使用方法
* [**Docker 命令查询**](command/README.md)速查 Docker 客户端和服务端的常用命令
* [**Dockerfile 最佳实践**](16.1_best_practices.md)提供编写高效安全 Dockerfile 的指导原则
* [**如何调试 Docker**](16.2_debug.md)介绍 Docker 调试技巧和工具
* [**资源链接**](16.3_resources.md)推荐更多 Docker 相关的学习资源
* [**术语词表出版统一版**](16.4_terminology.md)统一全书中英文术语缩写与命令写法
* [**出版清稿规范图号与章节风格**](16.5_editorial_style.md)统一图号命名图题写法与章节风格
* [**术语词表 (出版统一版)**](16.4_terminology.md)统一全书中英文术语缩写与命令写法
* [**出版清稿规范 (图号与章节风格)**](16.5_editorial_style.md)统一图号命名图题写法与章节风格

View File

@@ -1,5 +1,11 @@
# Docker 命令查询
本节涵盖了相关内容与详细描述主要探讨以下几个方面
## 概述
总体概述了以下内容
## 基本语法
Docker 命令有两大类客户端命令和服务端命令前者是主要的操作接口后者用来启动 Docker Daemon

View File

@@ -1,5 +1,7 @@
## 客户端命令 - docker
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 客户端命令选项
* `--config=""`指定客户端配置文件默认为 `~/.docker`
@@ -27,7 +29,7 @@
* `export`导出容器内容为一个 `tar`
* `history`显示一个镜像的历史信息
* `images`列出存在的镜像
* `import`导入一个文件典型为 `tar` 路径或目录来创建一个本地镜像
* `import`导入一个文件 (典型为 `tar` ) 路径或目录来创建一个本地镜像
* `info`显示一些相关的系统信息
* `inspect`显示一个容器的具体配置信息
* `kill`关闭一个运行中的容器 (包括进程和所有相关资源)
@@ -40,7 +42,7 @@
* `pause`暂停一个容器中的所有进程
* `port`查找一个 nat 到一个私有网口的公共口
* `ps`列出主机上的容器
* `pull`从一个Docker的仓库服务器下拉一个镜像或仓库
* `pull`从一个 Docker 的仓库服务器下拉一个镜像或仓库
* `push`将一个镜像或者仓库推送到一个 Docker 的注册服务器
* `rename`重命名一个容器
* `restart`重启一个运行中的容器
@@ -51,7 +53,7 @@
* `search` Docker index 中搜索一个镜像
* `service`管理 Docker 所启动的应用服务包括创建更新删除等
* `start`启动一个容器
* `stats`输出一个或多个容器的资源使用统计信息
* `stats`输出 (一个或多个) 容器的资源使用统计信息
* `stop`终止一个运行中的容器
* `swarm`管理 Docker swarm 集群包括创建加入退出更新等
* `tag`为一个镜像打标签

View File

@@ -1,19 +1,21 @@
## 服务端命令dockerd
## 服务端命令
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 使用说明
`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`
* `-H, --host=[]`指定 daemon 监听地址Unix socket / TCP
* `--data-root=""`Docker 数据目录 (默认 `/var/lib/docker`)
* `-H, --host=[]`指定 daemon 监听地址 (Unix socket / TCP)
* `-D, --debug`开启调试日志
* `-l, --log-level="debug|info|warn|error|fatal"`日志级别
* `--group=""`Unix socket 所属用户组默认 `docker`
* `--group=""`Unix socket 所属用户组 (默认 `docker`)
* `--containerd=""`指定 containerd socket
* `--exec-opt=[]`运行时执行选项 cgroup 驱动
* `--exec-opt=[]`运行时执行选项 ( cgroup 驱动)
* `--default-ulimit=[]`设置容器默认 ulimit
* `--dns=[]` / `--dns-search=[]` / `--dns-opt=[]`DNS 配置
* `--registry-mirror=[]`镜像加速地址
@@ -23,7 +25,7 @@
* `--storage-driver=""` / `--storage-opt=[]`存储驱动及参数
* `--log-driver=""` / `--log-opt=[]`容器日志驱动与参数
* `--authorization-plugin=[]`鉴权插件
* `--selinux-enabled=true|false`启用 SELinux 集成依赖发行版策略
* `--selinux-enabled=true|false`启用 SELinux 集成 (依赖发行版策略)
* `--userns-remap=...`用户命名空间映射
* `--tls` / `--tlscacert` / `--tlscert` / `--tlskey` / `--tlsverify`TLS 安全配置

View File

@@ -1,7 +1,11 @@
# 附录一常见问题总结
本节涵盖了相关内容与详细描述主要探讨以下几个方面
## 镜像相关
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 如何批量清理临时镜像文件
可以使用 `docker image prune` 命令
@@ -23,7 +27,7 @@
* 安装各个软件时候要指定准确的版本号并避免引入不需要的依赖
* 从安全角度考虑应用要尽量使用系统的库和依赖
* 如果安装应用时候需要配置一些特殊的环境变量在安装后要还原不需要保持的变量值
* 使用 Dockerfile 创建镜像时候要添加 .dockerignore 文件或使用干净的工作目录
* 使用 Dockerfile 创建镜像时候要添加dockerignore 文件或使用干净的工作目录
更多内容请查看 [Dockerfile 最佳实践](../16.1_best_practices.md)
@@ -33,9 +37,11 @@
## 容器相关
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 容器退出后通过 docker container ls 命令查看不到数据会丢失么
容器退出后会处于终止exited状态此时可以通过 `docker container ls -a` 查看其中的数据也不会丢失还可以通过 `docker start` 命令来启动它只有删除掉容器才会清除所有数据
容器退出后会处于终止 (exited) 状态此时可以通过 `docker container ls -a` 查看其中的数据也不会丢失还可以通过 `docker start` 命令来启动它只有删除掉容器才会清除所有数据
### 如何停止所有正在运行的容器
@@ -75,7 +81,7 @@ $ docker run --network=my-net --ip=172.25.3.3 -itd --name=my-container busybox
`Ctrl-p Ctrl-q`如果按 `Ctrl-c` 往往会让容器内应用进程终止进而会终止容器
### 使用 `docker port` 命令映射容器的端口时系统报错Error: No public port '80' published for xxx
### 使用 `docker port` 命令映射容器的端口时系统报错 ErrorNo public port 80 published for xxx
@@ -86,13 +92,19 @@ $ 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] 参数来调整容器使用内存的大小
## 仓库相关
### 仓库Repository注册服务器Registry注册索引Index 有何关系
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 概述
总体概述了以下内容
### 仓库注册服务器注册索引有何关系
首先仓库是存放一组关联镜像的集合比如同一个应用的不同版本的镜像
@@ -100,9 +112,11 @@ $ docker run --network=my-net --ip=172.25.3.3 -itd --name=my-container busybox
## 配置相关
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### Docker 的配置文件放在哪里如何修改配置
使用 `systemd` 的系统 Ubuntu 22.04+Debian 12+Rocky/Alma/CentOS Stream 9+的配置文件在 `/etc/docker/daemon.json`
使用 `systemd` 的系统 ( Ubuntu 22.04+Debian 12+Rocky/Alma/CentOS Stream 9+) 的配置文件在 `/etc/docker/daemon.json`
### 如何更改 Docker 的默认存储位置
@@ -127,31 +141,33 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
[root@s26 lib]# service docker start
```
### 使用内存和 swap 限制启动容器时候报警告"WARNING: Your kernel does not support cgroup swap limit. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded."
### 使用内存和 swap 限制启动容器时候报警告WARNINGYour kernel does not support cgroup swap limitWARNINGYour kernel does not support swap limit capabilitiesLimitation discarded
这是因为系统默认没有开启对内存和 swap 使用的统计功能引入该功能会带来性能的下降要开启该功能可以采取如下操作
* 编辑 `/etc/default/grub` 文件Ubuntu 系统为例配置 `GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"`
* 编辑 `/etc/default/grub` 文件 (Ubuntu 系统为例)配置 `GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"`
* 更新 grub`$ sudo update-grub`
* 重启系统即可
## Docker 与虚拟化
### Docker LXCLinux Container有何不同
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### Docker LXC 有何不同
LXC 利用 Linux 上相关技术实现了容器Docker 则在如下的几个方面进行了改进
* 移植性通过抽象容器配置容器可以实现从一个平台移植到另一个平台
* 镜像系统基于 OverlayFS 的镜像系统为容器的分发带来了很多的便利同时共同的镜像层只需要存储一份实现高效率的存储
* 版本管理类似于Git的版本管理理念用户可以更方便的创建管理镜像文件
* 版本管理类似于 Git 的版本管理理念用户可以更方便的创建管理镜像文件
* 仓库系统仓库系统大大降低了镜像的分发和管理的成本
* 周边工具各种现有工具配置管理云平台 Docker 的支持以及基于 Docker的 PaaSCI 等系统 Docker 的应用更加方便和多样化
* 周边工具各种现有工具 (配置管理云平台) Docker 的支持以及基于 Docker PaaSCI 等系统 Docker 的应用更加方便和多样化
### Docker Vagrant 有何不同
两者的定位完全不同
* Vagrant 类似 Boot2Docker一款运行 Docker 的最小内核是一套虚拟机的管理环境Vagrant 可以在多种系统上和虚拟机软件中运行可以在 WindowsMac 等非 Linux 平台上为 Docker 提供支持自身具有较好的包装性和移植性
* Vagrant 类似 Boot2Docker (一款运行 Docker 的最小内核)是一套虚拟机的管理环境Vagrant 可以在多种系统上和虚拟机软件中运行可以在 WindowsMac 等非 Linux 平台上为 Docker 提供支持自身具有较好的包装性和移植性
* 原生的 Docker 自身只能运行在 Linux 平台上但启动和运行的性能都比虚拟机要快往往更适合快速开发和部署应用的场景
简单说Vagrant 适合用来管理虚拟机 Docker 适合用来管理应用环境
@@ -166,9 +182,11 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
## 其它
### Docker 能在非 Linux 平台比如 Windows macOS 上运行么
本节涵盖了相关内容与详细描述主要探讨以下几个方面
完全可以安装方法请查看 [安装 Docker](../../03_install/README.md) 一节
### Docker 能在非 Linux 平台 (比如 Windows macOS) 上运行么
完全可以安装方法请查看[安装 Docker](../../03_install/README.md) 一节
### 如何将一台宿主主机的 Docker 环境迁移到另外一台宿主主机

View File

@@ -1,27 +1,29 @@
## [CentOS]
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本信息
[CentOS](https://en.wikipedia.org/wiki/CentOS) 是流行的 Linux 发行版,其软件包大多跟 RedHat 系列保持一致。
> **重要提示**CentOS 8 已于 2021 12 31 日停止维护EOLCentOS 7 也已于 2024 6 30 **完全结束支持**Docker Hub 上的 CentOS 官方镜像**已停止更新**且存在未修复的安全漏洞
> **重要提示**CentOS 8 已于 2021 12 31 日停止维护 (EOL)CentOS 7 也已于 2024 6 30 **完全结束支持**Docker Hub 上的 CentOS 官方镜像**已停止更新**且存在未修复的安全漏洞
>
> 2026 年了对于任何新项目**强烈建议**使用以下生产级替代方案
> - [Rocky Linux](https://hub.docker.com/_/rockylinux)CentOS 原创始人发起的社区驱动项目,目前主流为 Rocky Linux 9。
> - [AlmaLinux](https://hub.docker.com/_/almalinux):由 CloudLinux 支持的企业级发行版,提供长期支持。
> - [CentOS Stream](https://hub.docker.com/r/centos/centos)RHEL 的上游开发分支适合开发测试,不建议用于生产环境
> - [CentOS Stream](https://hub.docker.com/r/centos/centos)RHEL 的上游开发分支 (适合开发测试,不建议用于生产环境)
该仓库位于 `https://hub.docker.com/_/centos`提供了 CentOS 5 ~ 8 各个版本的镜像仅作为历史归档不再更新
该仓库位于 `https://hub.docker.com/_/centos`提供了 CentOS 5 ~ 8 各个版本的镜像 (仅作为历史归档不再更新)
### 使用方法
使用 Rocky Linux 9 替代**推荐**
使用 Rocky Linux 9 替代 (**推荐**)
```bash
$ docker run --name rocky -it rockylinux:9 bash
```
使用旧版 CentOS 7**仅用于维护旧项目不推荐**
使用旧版 CentOS 7 (**仅用于维护旧项目不推荐**)
```bash
$ docker run --name centos -it centos:7 bash

View File

@@ -2,7 +2,7 @@
**MinIO** 是一个基于 Apache License v2.0 开源协议的对象存储服务它兼容亚马逊 S3 云存储服务接口非常适合于存储大容量非结构化的数据例如图片视频日志文件备份数据和容器/虚拟机镜像等而一个对象文件可以是任意大小从几 kb 到最大 5T 不等
MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合类似 NodeJS, Redis 或者 MySQL
MinIO 是一个非常轻量的服务可以很简单的和其他应用的结合类似 NodeJSRedis 或者 MySQL
[官方文档](https://docs.min.io/)
@@ -20,13 +20,13 @@ $ docker run -d -p 9000:9000 -p 9090:9090 minio/minio server /data --console-add
#### 导出镜像
在有公网资源的服务器上下载好`minio/minio`镜像
在有公网资源的服务器上下载好 `minio/minio` 镜像
```bash
$ docker save -o minio.tar minio/minio:latest
```
> 使用docker save 的时候也可以使用image id 来导出但是那样导出的时候就会丢失原来的镜像名称推荐还是使用镜像名字+tag来导出镜像
> 使用 docker save 的时候也可以使用 image id 来导出但是那样导出的时候就会丢失原来的镜像名称推荐还是使用镜像名字+tag 来导出镜像
#### 导入镜像
@@ -41,8 +41,8 @@ $ docker load -i minio.tar
- `/mnt/data` 改成要替换的数据目录
- 替换 `MINIO_ROOT_USER` 的值
- 替换 `MINIO_ROOT_PASSWORD` 的值
- 替换 name,minio1(可选)
- 如果 90009090 端口冲突,替换端口前面的如 `9009:9000`
- 替换 name,minio1 (可选)
- 如果 90009090 端口冲突替换端口前面的如 `9009:9000`
```bash
$ sudo docker run -d -p 9000:9000 -p 9090:9090 --name minio1 \

View File

@@ -1,5 +1,7 @@
## [MongoDB]
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本信息
[MongoDB](https://en.wikipedia.org/wiki/MongoDB) 是开源的 NoSQL 数据库实现。

View File

@@ -1,5 +1,7 @@
## [MySQL]
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本信息
[MySQL](https://en.wikipedia.org/wiki/MySQL) 是开源的关系数据库实现。

View File

@@ -1,5 +1,7 @@
## [Nginx]
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本信息
[Nginx](https://en.wikipedia.org/wiki/Nginx) 是开源的高效的 Web 服务器实现,支持 HTTP、HTTPS、SMTP、POP3、IMAP 等协议。
@@ -34,7 +36,7 @@ $ docker run --name some-nginx -d some-content-nginx
$ docker run --name some-nginx -d -p 8080:80 some-content-nginx
```
Nginx的默认配置文件路径为 `/etc/nginx/nginx.conf`可以通过映射它来使用本地的配置文件例如
Nginx 的默认配置文件路径为 `/etc/nginx/nginx.conf`可以通过映射它来使用本地的配置文件例如
```bash
$ docker run -d \

View File

@@ -1,5 +1,7 @@
## [Node.js]
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本信息
[Node.js](https://en.wikipedia.org/wiki/Node.js) 是基于 JavaScript 的可扩展服务端和网络软件开发平台。

View File

@@ -1,8 +1,10 @@
## [PHP]
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本信息
[PHP](https://en.wikipedia.org/wiki/Php)Hypertext Preprocessor 超文本预处理器的字母缩写是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。
[PHP](https://en.wikipedia.org/wiki/Php) (Hypertext Preprocessor 超文本预处理器的字母缩写) 是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。
该仓库位于 `https://hub.docker.com/_/php/`具体可用版本以 Docker Hub 上的 tags 列表为准

View File

@@ -1,5 +1,7 @@
## [Redis]
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本信息
[Redis](https://en.wikipedia.org/wiki/Redis) 是开源的内存 Key-Value 数据库实现。
@@ -14,7 +16,7 @@
$ docker run --name some-redis -d -p 6379:6379 redis
```
另外还可以启用 [持久存储](https://redis.io/topics/persistence)。
另外还可以启用[持久存储](https://redis.io/topics/persistence)。
```bash
$ docker run --name some-redis -d -p 6379:6379 redis redis-server --appendonly yes

View File

@@ -1,5 +1,7 @@
## [Ubuntu]
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本信息
[Ubuntu](https://en.wikipedia.org/wiki/Ubuntu) 是流行的 Linux 发行版,其自带软件版本往往较新一些。

View File

@@ -1,5 +1,7 @@
## [WordPress]
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本信息
[WordPress](https://en.wikipedia.org/wiki/WordPress) 是开源的 Blog 和内容管理系统框架,它基于 PHP 和 MySQL。
@@ -27,10 +29,10 @@ $ docker run --name some-wordpress -d --network my-wordpress-net -e WORDPRESS_DB
启动 WordPress 容器时可以指定的一些环境变量包括
* `WORDPRESS_DB_HOST`: MySQL 服务的主机名
* `WORDPRESS_DB_USER`: MySQL 数据库的用户名
* `WORDPRESS_DB_PASSWORD`: MySQL 数据库的密码
* `WORDPRESS_DB_NAME`: WordPress 要使用的数据库名
* `WORDPRESS_DB_HOST`MySQL 服务的主机名
* `WORDPRESS_DB_USER`MySQL 数据库的用户名
* `WORDPRESS_DB_PASSWORD`MySQL 数据库的密码
* `WORDPRESS_DB_NAME`WordPress 要使用的数据库名
### Dockerfile