1. 简介
Docker 提供了多种配置选项,允许用户定制 Docker 引擎的行为、资源管理、日志记录等方面的设置。Docker 的配置项主要分为 daemon.json 配置文件中的选项和运行时配置。
2. 常见 Docker 配置项解释
1. data-root
说明:指定 Docker 存储数据的位置。默认位置是
/var/lib/docker
。
示例:
"data-root": "/mnt/docker"
这将 Docker 的所有数据存储路径更改为 /mnt/docker
。
2. storage-driver
说明:指定 Docker 使用的存储驱动。不同的存储驱动影响容器文件系统的管理方式,常见的有
overlay2
、aufs
、btrfs
、devicemapper
等。
示例:
"storage-driver": "overlay2"
默认的存储驱动在现代 Linux 系统上是 overlay2
,它是一种基于层叠文件系统的高效驱动。
3. bip
说明:指定 Docker 容器使用的默认网络桥接 IP 地址(CIDR 格式)。
bip
用于设置 Docker 在启动时创建的默认bridge
网络的 IP 范围。
示例:
"bip": "172.18.0.1/16"
默认情况下,Docker 会使用 172.17.0.1/16
。
4. insecure-registries
说明:指定不需要 HTTPS 安全连接的私有镜像仓库列表。默认情况下,Docker 仅允许通过 HTTPS 连接公共和私有仓库。如果你有自己的 HTTP 镜像仓库,可以在此配置。
示例:
"insecure-registries": [ "myregistry.local:5000" ]
允许 myregistry.local:5000
不使用 HTTPS 进行连接。
5. registry-mirrors
说明:指定 Docker 镜像仓库的镜像站点。通过使用镜像,用户可以加速 Docker 镜像的下载。
示例:
"registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com" ]
6. exec-opts
说明:配置 Docker 引擎的执行选项,通常用于设置容器的 cgroup 驱动程序。例如,设置容器使用
systemd
或cgroupfs
作为 cgroup 驱动。Docker 1.13 及以后版本:默认情况下,如果宿主机使用
systemd 及内核版本4.5及以后
作为初始化系统,则 Docker 会自动选择systemd(cgroup v2)
驱动程序。如果宿主机没有使用systemd或内核版本不支持
,则 Docker 会使用cgroupfs(cgroup v1)
驱动程序。
示例:
"exec-opts": [ "native.cgroupdriver=systemd" ]
默认情况下,Docker 会选择合适的 cgroup 驱动,systemd
是与 systemd
系统兼容的默认驱动。(有点抽象看下面解释)
简化的解释
cgroup 驱动程序:cgroup 驱动程序是 Docker 用来与 Linux 内核的 cgroup(控制组) 子系统交互的机制。cgroup 用于限制、监控和隔离进程组的资源(如 CPU 使用、内存限制、网络 I/O 等)。
systemd 驱动程序:如果宿主操作系统使用
systemd
作为初始化系统,那么 Docker 可以利用systemd
来管理这些资源,因为systemd
本身就集成了对 cgroup 的管理功能。这样,Docker 容器的资源限制可以通过systemd
来进行配置和管理,这种集成方式能够更好地与系统本身的资源管理工具兼容。
以下是检测系统及内核是否支持 systemd
# 检查系统是否使用 systemd
ps -p 1
# 系统是使用systemd输出示例:
PID TTY TIME CMD
1 ? 00:00:03 systemd
# 检查内核是否支持 cgroup v2
cat /proc/filesystems | grep cgroup2
# 支持cgroup v2输出示例:
Cgroup Driver: systemd
Cgroup Version: 2
7. log-driver
说明:指定容器的日志驱动程序。Docker 支持不同的日志驱动,如
json-file
(默认)、syslog
、journald
、fluentd
、gelf
等。
示例:
"log-driver": "json-file"
8. log-opts
说明:用于配置日志驱动的选项。例如,对于
json-file
驱动,可以设置最大日志大小或日志文件的轮换策略。
示例:
"log-opts": { "max-size": "10m", "max-file": "3" }
这意味着每个日志文件的大小为 10MB,最多保留 3 个日志文件。
9. live-restore
说明:控制 Docker 引擎在容器停止时是否继续保持运行。启用该选项时,即使 Docker 服务重启或崩溃,容器仍然保持运行。
示例:
"live-restore": true
10. mtu
说明:设置 Docker 网络接口的最大传输单元(MTU),影响容器间通信的网络包大小。
示例:
"mtu": 1400
11. dns
说明:指定 Docker 容器使用的 DNS 服务器。这对于容器内需要访问外部网络的服务非常有用,尤其是在 DNS 配置不正确时。
示例:
"dns": [ "8.8.8.8", "8.8.4.4" ]
12. dns-search
说明:为容器设置 DNS 搜索域。容器使用这些域名搜索主机名。
示例:
"dns-search": [ "example.com" ]
13. host-discovery
说明:配置 Docker 是否启用主机发现功能,控制容器如何发现并与宿主机进行通信,默认是启用。
示例:
"host-discovery": "false"
14. no-new-privileges
说明:控制 Docker 容器是否具有新权限的能力。如果启用此选项,容器中的进程将不能获得新权限。
示例:
"no-new-privileges": true
no-new-privileges: true
:启用该选项,防止容器内的进程获取新权限。容器内的进程只能在启动时所分配的权限范围内运行,无法提升权限。no-new-privileges: false
:(默认值)禁用该选项,容器内的进程可以通过系统调用(如通过setuid
或setgid
系统调用来切换用户)提升权限。
15. shutdown-timeout
说明:设置 Docker 守护进程在关机时等待容器优雅停止的最大时间(秒)。默认值是 10 秒。
示例:
"shutdown-timeout": 30
16. default-runtime
说明:指定容器的默认运行时环境。例如,
runc
或kata-runtime
。
示例:
"default-runtime": "runc"
容器运行时(Container Runtime)是什么?
容器运行时是管理容器生命周期的工具,负责执行和管理容器的创建、启动、运行、暂停、停止等操作。它会与操作系统和内核进行交互,利用操作系统的资源(如文件系统、CPU、内存等)来运行容器。
runc
:是 Docker 默认的容器运行时。它是一个轻量级的、符合 Open Container Initiative(OCI)标准的容器运行时,提供了容器的基本功能。kata-runtime
:是一个专门为安全性优化的容器运行时。它通过虚拟化技术(例如使用轻量级虚拟机)来提供更强的隔离性和安全性。kata-runtime
使容器在运行时使用虚拟机技术,因此它提供的容器比传统的容器更为隔离和安全。其他支持的运行时还包括
containerd
、gvisor
等,它们提供不同的功能和特性。
17. icc
(Inter-container communication)
说明:控制容器间是否可以互相通信。
示例:
"icc": true
icc
是 Docker 的一个配置选项,用来控制 容器间通信(Inter-Container Communication)。
icc: false
的设置意味着 禁止容器之间的通信,即使它们在同一个 Docker 网络(如bridge
网络)上,也不能互相通信。icc: true
(默认值)则表示容器之间可以自由通信。
18. userland-proxy
说明:控制是否启用用户空间代理,默认是启用的。
示例:
"userland-proxy": true
用户空间代理的作用
当 Docker 容器暴露端口并将容器的端口映射到宿主机端口时,默认情况下,Docker 使用一个名为 用户空间代理(Userland Proxy)的机制来转发流量。
用户空间代理 会拦截来自宿主机的请求并将它们转发到容器内的相应端口。它本质上是一个中间层,负责处理容器与宿主机之间的网络请求。
这个代理通常用于
bridge
网络模式,其中宿主机和容器之间的流量通过用户空间代理进行转发。
评论区