一、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-hk/n/371951.html