Use a better structure

This commit is contained in:
Baohua Yang
2026-02-09 09:32:05 -08:00
parent fdb879dcf2
commit e669ee0fe8
167 changed files with 2462 additions and 2462 deletions

View File

@@ -1,20 +1,20 @@
# 附录一常见问题总结
## 附录一常见问题总结
## 镜像相关
### 镜像相关
### 如何批量清理临时镜像文件
#### 如何批量清理临时镜像文件
可以使用 `docker image prune` 命令
### 如何查看镜像支持的环境变量
#### 如何查看镜像支持的环境变量
可以使用 `docker run IMAGE env` 命令
### 本地的镜像文件都存放在哪里
#### 本地的镜像文件都存放在哪里
Docker 相关的本地资源默认存放在 `/var/lib/docker/` 目录下 `overlay2` 文件系统为例其中 `containers` 目录存放容器信息`image` 目录存放镜像信息`overlay2` 目录下存放具体的镜像层文件
### 构建 Docker 镜像应该遵循哪些原则
#### 构建 Docker 镜像应该遵循哪些原则
整体原则上尽量保持镜像功能的明确和内容的精简要点包括
@@ -25,27 +25,27 @@
* 如果安装应用时候需要配置一些特殊的环境变量在安装后要还原不需要保持的变量值
* 使用 Dockerfile 创建镜像时候要添加 .dockerignore 文件或使用干净的工作目录
更多内容请查看 [Dockerfile 最佳实践](../best_practices.md)
更多内容请查看 [Dockerfile 最佳实践](../15.1_best_practices.md)
### 碰到网络问题无法 pull 镜像命令行指定 http\_proxy 无效
#### 碰到网络问题无法 pull 镜像命令行指定 http\_proxy 无效
Docker 配置文件中添加 `export http_proxy="http://<PROXY_HOST>:<PROXY_PORT>"`之后重启 Docker 服务即可
## 容器相关
### 容器相关
### 容器退出后通过 docker container ls 命令查看不到数据会丢失么
#### 容器退出后通过 docker container ls 命令查看不到数据会丢失么
容器退出后会处于终止exited状态此时可以通过 `docker container ls -a` 查看其中的数据也不会丢失还可以通过 `docker start` 命令来启动它只有删除掉容器才会清除所有数据
### 如何停止所有正在运行的容器
#### 如何停止所有正在运行的容器
可以使用 `docker stop $(docker container ls -q)` 命令
### 如何批量清理已经停止的容器
#### 如何批量清理已经停止的容器
可以使用 `docker container prune` 命令
### 如何获取某个容器的 PID 信息
#### 如何获取某个容器的 PID 信息
可以使用
@@ -53,7 +53,7 @@
docker inspect --format '{{ .State.Pid }}' <CONTAINER ID or NAME>
```
### 如何获取某个容器的 IP 地址
#### 如何获取某个容器的 IP 地址
可以使用
@@ -61,7 +61,7 @@ docker inspect --format '{{ .State.Pid }}' <CONTAINER ID or NAME>
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID or NAME>
```
### 如何给容器指定一个固定 IP 地址而不是每次重启容器 IP 地址都会变
#### 如何给容器指定一个固定 IP 地址而不是每次重启容器 IP 地址都会变
使用以下命令启动容器可以使容器 IP 固定不变
@@ -71,40 +71,40 @@ $ docker network create -d bridge --subnet 172.25.0.0/16 my-net
$ 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` 命令映射容器的端口时系统报错Error: No public port '80' published for xxx
* 创建镜像时 `Dockerfile` 要通过 `EXPOSE` 指定正确的开放端口
* 容器启动时指定 `PublishAllPort = true`
### 可以在一个容器中同时运行多个应用进程么
#### 可以在一个容器中同时运行多个应用进程么
一般并不推荐在同一个容器内运行多个应用进程如果有类似需求可以通过一些额外的进程管理机制比如 `supervisord` 来管理所运行的进程可以参考 https://docs.docker.com/config/containers/multi-service\_container/ 。
### 如何控制容器占用系统资源CPU内存的份额
#### 如何控制容器占用系统资源CPU内存的份额
在使用 `docker create` 命令创建容器或使用 `docker run` 创建并启动容器的时候可以使用 -c|--cpu-shares\[=0] 参数来调整容器使用 CPU 的权重使用 -m|--memory\[=MEMORY] 参数来调整容器使用内存的大小
## 仓库相关
### 仓库相关
### 仓库Repository注册服务器Registry注册索引Index 有何关系
#### 仓库Repository注册服务器Registry注册索引Index 有何关系
首先仓库是存放一组关联镜像的集合比如同一个应用的不同版本的镜像
注册服务器是存放实际的镜像文件的地方注册索引则负责维护用户的账号权限搜索标签等的管理因此注册服务器利用注册索引来实现认证等管理
## 配置相关
### 配置相关
### Docker 的配置文件放在哪里如何修改配置
#### Docker 的配置文件放在哪里如何修改配置
使用 `systemd` 的系统 Ubuntu 16.04Centos 的配置文件在 `/etc/docker/daemon.json`
### 如何更改 Docker 的默认存储位置
#### 如何更改 Docker 的默认存储位置
Docker 的默认存储位置是 `/var/lib/docker`如果希望将 Docker 的本地文件存储到其他分区可以使用 Linux 软连接的方式来完成或者在启动 daemon 时通过 `-g` 参数指定或者修改配置文件 `/etc/docker/daemon.json` "data-root" 可以使用 `docker system info | grep "Root Dir"` 查看当前使用的存储位置
@@ -127,7 +127,7 @@ 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 限制启动容器时候报警告"WARNING: Your kernel does not support cgroup swap limit. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded."
这是因为系统默认没有开启对内存和 swap 使用的统计功能引入该功能会带来性能的下降要开启该功能可以采取如下操作
@@ -135,9 +135,9 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
* 更新 grub`$ sudo update-grub`
* 重启系统即可
## Docker 与虚拟化
### Docker 与虚拟化
### Docker LXCLinux Container有何不同
#### Docker LXCLinux Container有何不同
LXC 利用 Linux 上相关技术实现了容器Docker 则在如下的几个方面进行了改进
@@ -147,7 +147,7 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
* 仓库系统仓库系统大大降低了镜像的分发和管理的成本
* 周边工具各种现有工具配置管理云平台 Docker 的支持以及基于 Docker的 PaaSCI 等系统 Docker 的应用更加方便和多样化
### Docker Vagrant 有何不同
#### Docker Vagrant 有何不同
两者的定位完全不同
@@ -156,7 +156,7 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
简单说Vagrant 适合用来管理虚拟机 Docker 适合用来管理应用环境
### 开发环境中 Docker Vagrant 该如何选择
#### 开发环境中 Docker Vagrant 该如何选择
Docker 不是虚拟机而是进程隔离对于资源的消耗很少但是目前需要 Linux 环境支持Vagrant 是虚拟机上做的封装虚拟机本身会消耗资源
@@ -164,17 +164,17 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
如果本地使用的是 macOS 或者 Windows 环境那就需要开虚拟机单一开发环境下 Vagrant 更简单多环境开发下推荐在 Vagrant 里面再使用 Docker 进行环境隔离
## 其它
### 其它
### Docker 能在非 Linux 平台比如 Windows macOS 上运行么
#### Docker 能在非 Linux 平台比如 Windows macOS 上运行么
完全可以安装方法请查看 [安装 Docker](../../install/) 一节
### 如何将一台宿主主机的 Docker 环境迁移到另外一台宿主主机
#### 如何将一台宿主主机的 Docker 环境迁移到另外一台宿主主机
停止 Docker 服务将整个 Docker 存储文件夹复制到另外一台宿主主机然后调整另外一台宿主主机的配置即可
### 如何进入 Docker 容器的网络命名空间
#### 如何进入 Docker 容器的网络命名空间
Docker 在创建容器后删除了宿主主机上 `/var/run/netns` 目录中的相关的网络命名空间文件因此在宿主主机上是无法看到或访问容器的网络命名空间的
@@ -206,7 +206,7 @@ $ sudo ip netns show
$ sudo ip netns exec 1234 ifconfig eth0 172.17.0.100/16
```
### 如何获取容器绑定到本地那个 veth 接口上
#### 如何获取容器绑定到本地那个 veth 接口上
Docker 容器启动后会通过 veth 接口对连接到本地网桥veth 接口命名跟容器命名毫无关系十分难以找到对应关系