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服務以滿足他們的需求。

原創文章,作者:LHIEJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/371951.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LHIEJ的頭像LHIEJ
上一篇 2025-04-23 18:08
下一篇 2025-04-23 18:08

相關推薦

發表回復

登錄後才能評論