您的位置:

Docker.service文件详解

一、docker.service文件介绍

Docker是一种流行的开源容器化技术,可以在多个操作系统上运行,包括Linux、Windows和MacOS。Docker提供一个平台来构建、部署和运行应用程序。Docker.service文件是Docker守护进程的服务单元文件,它负责管理Docker容器和镜像。下面将详细介绍docker.service文件的各个部分。

二、docker.service文件内容

1. [Unit]部分


[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service
Wants=network-online.target

这部分定义了单元(Unit)相关的元数据,包括单元描述,文档和单元依赖。各个字段的含义如下:

• Description:Docker守护进程服务的描述

• Documentation:引导到Docker官方文档的链接

• After:定义服务在哪些单元后启动。此处定义network-online.target(网络在线目标),docker.socket(Docker套接字)和firewalld.service(防火墙服务)。

• Wants:定义服务在哪些单元已经准备好时启动。此处定义network-online.target(网络在线目标)。

2. [Service]部分


[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

这部分定义了Docker守护进程的服务开始、重新加载和停止的方式以及相关参数。各个字段的含义如下:

• Type:定义守护进程通信通道类型。这里使用了1个新的"notify"类型,它允许Docker守护进程发出通知,以便服务管理器适当地回收服务进程。

• ExecStart:定义服务启动命令。"dockerd -H fd://"表示将Docker守护进程绑定到Unix域套接字fd上,并使用默认的容器运行时(containerd)进行Docker容器的管理。容器运行时是一个轻量级的管理器,用于控制Docker容器的低级别控制功能。

• ExecReload:定义服务重新加载命令。这里使用kill -s HUP命令,即发送一个HUP信号给Docker守护进程的主进程id,以便重加载配置文件。

• LimitNOFILE、LimitNPROC和LimitCORE:定义服务进程的资源限制。这里是无限制的,表示服务可以使用系统上的所有资源。

• Delegate:定义是否允许服务管理器(如systemd)重置Docker容器的Cgroups。这里设置为"yes",不允许重置。

• KillMode:定义服务终止时如何处理其控制的进程。此处是仅杀死Docker进程,而不是杀死Cgroup中的所有进程。

• Restart、StartLimitBurst和StartLimitInterval:定义服务重启策略。这里只在Docker进程意外停止时重启服务(on-failure)。设置启动限制以避免重复故障。

3. [Install]部分


[Install]
WantedBy=multi-user.target

这部分定义了系统中安装和启动的服务。WantedBy选项定义了需要启动的目标(target),这里是多用户目标(multi-user.target)。

三、如何配置docker.service文件

要配置docker.service文件,必须了解Docker守护进程及其参数。在docker.service文件中,您可以更改以下内容:

• ExecStart字段:更改Docker守护进程的启动命令以使用不同的选项和参数。

• LimitNOFILE、LimitNPROC、LimitCORE字段:更改Docker守护进程的资源限制。

• TimeoutStartSec字段:更改服务启动超时时间。

• Restart、StartLimitBurst、StartLimitInterval字段:更改服务的重启策略。

如果要更改Docker守护进程的启动选项,您可以更改ExecStart字段。例如,要启用Docker API的远程访问,请添加“-H tcp://0.0.0.0:2375”选项,如下所示:


ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock

如果您想限制Docker守护进程的内存使用率和CPU占用率,可以使用systemd资源控制器(Systemd Resource Controller)设置资源限制。系统资源控制器是一种机制,用于在启动时添加Cgroup配置。例如,要将Docker容器的CPU使用率限制为20%,可以在docker.service文件中定义Cgroup,并将其分配给Docker守护进程,如下所示:


[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// \
  --containerd=/run/containerd/containerd.sock \
  --exec-opt="native.cgroupdriver=systemd" \
  --cgroup-parent systemd:/system.slice/docker.service --cpus=0.20

该配置中,--exec-opt选项使用systemd高级配置,以便Linux内核可以使用systemd资源控制器中定义的Cgroup限制Docker容器,--cgroup-parent选项将Docker守护进程分配给所需的Cgroup。此外,--cpus选项将限制Docker容器的CPU使用率为20%。

四、总结

本文详细介绍了docker.service文件的不同部分及其作用。Docker服务在启动时会加载该文件,并使用定义的参数启动Docker守护进程。通过修改docker.service文件,可以配置服务的各个方面,例如资源限制、启动策略和重启策略。熟悉docker.service文件对于系统管理员和开发人员来说是很重要的,因为它允许他们自定义Docker服务以满足他们的需求。