侧边栏壁纸
博主头像
博客巢 博主等级

行动起来,活在当下

  • 累计撰写 12 篇文章
  • 累计创建 15 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Docker的daemon.json配置项解释

博客巢
2024-11-13 / 0 评论 / 0 点赞 / 51 阅读 / 0 字
温馨提示:
本文最后更新于2024-11-13,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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 使用的存储驱动。不同的存储驱动影响容器文件系统的管理方式,常见的有 overlay2aufsbtrfsdevicemapper 等。

示例

"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 驱动程序。例如,设置容器使用 systemdcgroupfs 作为 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(默认)、syslogjournaldfluentdgelf 等。

示例

"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" ]
  • 说明:为容器设置 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:(默认值)禁用该选项,容器内的进程可以通过系统调用(如通过 setuidsetgid 系统调用来切换用户)提升权限。

15. shutdown-timeout

  • 说明:设置 Docker 守护进程在关机时等待容器优雅停止的最大时间(秒)。默认值是 10 秒。

示例

"shutdown-timeout": 30

16. default-runtime

  • 说明:指定容器的默认运行时环境。例如,runckata-runtime

示例

"default-runtime": "runc"

容器运行时(Container Runtime)是什么?

容器运行时是管理容器生命周期的工具,负责执行和管理容器的创建、启动、运行、暂停、停止等操作。它会与操作系统和内核进行交互,利用操作系统的资源(如文件系统、CPU、内存等)来运行容器。

  • runc:是 Docker 默认的容器运行时。它是一个轻量级的、符合 Open Container Initiative(OCI)标准的容器运行时,提供了容器的基本功能。

  • kata-runtime:是一个专门为安全性优化的容器运行时。它通过虚拟化技术(例如使用轻量级虚拟机)来提供更强的隔离性和安全性。kata-runtime 使容器在运行时使用虚拟机技术,因此它提供的容器比传统的容器更为隔离和安全。

  • 其他支持的运行时还包括 containerdgvisor 等,它们提供不同的功能和特性。

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 网络模式,其中宿主机和容器之间的流量通过用户空间代理进行转发。

0

评论区