Docker配置文件daemon.json使用及說(shuō)明
1 daemon.json文件概述
daemon.json是Docker守護(hù)進(jìn)程的配置文件,它允許系統(tǒng)管理員自定義Docker守護(hù)程序的行為。此文件通常位于/etc/docker/目錄下。
通過(guò)修改daemon.json,可以調(diào)整Docker守護(hù)進(jìn)程的多種設(shè)置,包括網(wǎng)絡(luò)配置、日志記錄、存儲(chǔ)驅(qū)動(dòng)等。

2 daemon.json文件結(jié)構(gòu)
daemon.json文件是一個(gè)JSON格式的文件,包含鍵值對(duì)來(lái)設(shè)置Docker守護(hù)進(jìn)程的參數(shù)。
以下是一些常見的配置項(xiàng):
data-root: Docker數(shù)據(jù)目錄,默認(rèn)為/var/lib/docker。exec-root: Docker執(zhí)行狀態(tài)文件的存儲(chǔ)路徑,默認(rèn)為/var/run/docker。log-driver: Docker日志驅(qū)動(dòng)類型,默認(rèn)為json-file。log-level: Docker日志記錄級(jí)別,如debug、info、warn、error、fatal。insecure-registries: 可以通過(guò)HTTP連接的鏡像倉(cāng)庫(kù)地址。registry-mirrors: 鏡像倉(cāng)庫(kù)加速地址。storage-driver: Docker存儲(chǔ)驅(qū)動(dòng)類型,推薦overlay2。live-restore: 是否啟用“實(shí)時(shí)恢復(fù)”功能,允許Docker在更新或重啟時(shí)不終止運(yùn)行中的容器。
3 daemon.json配置優(yōu)化建議
3.1 鏡像加速
在國(guó)內(nèi)使用Docker時(shí),由于訪問(wèn)Docker Hub可能存在速度慢或不穩(wěn)定的問(wèn)題,建議配置鏡像加速器。
通過(guò)在daemon.json中添加如下配置,可以顯著提高拉取鏡像的速度:
{
"registry-mirrors": [
"https://mirrors.aliyun.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]}3.2 日志管理
根據(jù)需要選擇合適的日志驅(qū)動(dòng),例如json-file、syslog等。同時(shí),可以通過(guò)設(shè)置log-level來(lái)控制日志的詳細(xì)程度,例如設(shè)置為warn可以減少日志文件的大小。
Docker支持多種日志驅(qū)動(dòng)程序,每種驅(qū)動(dòng)程序都設(shè)計(jì)用于不同的使用場(chǎng)景和需求。以下是一些常用的日志驅(qū)動(dòng):
json-file:這是默認(rèn)的日志驅(qū)動(dòng),它將日志信息以JSON格式寫入文件。可以通過(guò)log-opts來(lái)控制日志文件的大小和數(shù)量。syslog:將日志發(fā)送到syslog守護(hù)進(jìn)程,適用于傳統(tǒng)的日志系統(tǒng)集成。journald:將日志發(fā)送到systemd的journal,適用于systemd管理的系統(tǒng)。gelf:將日志發(fā)送到Graylog Extended Log Format (GELF)服務(wù)器。fluentd:將日志發(fā)送到Fluentd聚合和處理日志的服務(wù)器。awslogs:將日志發(fā)送到Amazon CloudWatch Logs,適用于AWS環(huán)境。
在daemon.json中設(shè)置日志驅(qū)動(dòng)的示例:
{
"log-driver": "json-file"
}log-opts用于為選定的日志驅(qū)動(dòng)配置額外的選項(xiàng)。對(duì)于json-file驅(qū)動(dòng),最常見的選項(xiàng)包括:
max-size:每個(gè)日志文件的最大大小。當(dāng)文件超過(guò)這個(gè)大小時(shí),Docker將創(chuàng)建新的日志文件。max-file:保留的日志文件數(shù)量。當(dāng)達(dá)到這個(gè)數(shù)量時(shí),Docker將開始刪除最舊的日志文件。
設(shè)置log-opts的示例:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}在這個(gè)示例中,每個(gè)日志文件的最大大小被設(shè)置為10MB,并且最多保留3個(gè)日志文件。
日志級(jí)別的控制(log-level)
log-level選項(xiàng)允許你設(shè)置Docker守護(hù)進(jìn)程的日志記錄級(jí)別??捎玫募?jí)別包括:
debug:記錄最詳細(xì)的信息,包括調(diào)試信息。info:記錄常規(guī)信息,如容器的啟動(dòng)和停止。warn:記錄可能的問(wèn)題,但不一定影響操作。error:記錄錯(cuò)誤信息,表明有操作失敗。fatal:記錄嚴(yán)重錯(cuò)誤,通常是不可恢復(fù)的。
設(shè)置log-level的示例:
{
"log-level": "warn"
}優(yōu)化建議
- 合理配置日志文件大小和數(shù)量:避免日志文件無(wú)限制增長(zhǎng)占用過(guò)多磁盤空間。
- 設(shè)置合適的日志級(jí)別:在生產(chǎn)環(huán)境中,通常設(shè)置為
info或warn級(jí)別,以避免記錄過(guò)多的信息
3.3 存儲(chǔ)驅(qū)動(dòng)
推薦使用overlay2作為存儲(chǔ)驅(qū)動(dòng),因?yàn)樗谛阅芎凸δ苌陷^為優(yōu)秀??梢酝ㄟ^(guò)storage-opts來(lái)設(shè)置存儲(chǔ)驅(qū)動(dòng)的額外選項(xiàng),例如:
配置示例:
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true",
"overlay2.size=100G"
]
}在這個(gè)示例中,overlay2.size設(shè)置為100G,限制了overlay2存儲(chǔ)驅(qū)動(dòng)可以使用的最大空間。
另外的存儲(chǔ)驅(qū)動(dòng)如下所示:
- Device Mapper
- AUFS
- Btrfs
- ZFS
3.4 網(wǎng)絡(luò)配置
如果需要自定義網(wǎng)絡(luò)配置,可以在daemon.json中設(shè)置bip和fixed-cidr等參數(shù)來(lái)指定網(wǎng)橋的IP地址和子網(wǎng)。
Docker的網(wǎng)絡(luò)配置允許你定義和管理容器的網(wǎng)絡(luò)接口,網(wǎng)絡(luò)驅(qū)動(dòng),以及容器如何連接到外部網(wǎng)絡(luò)。以下是一些關(guān)鍵的網(wǎng)絡(luò)配置選項(xiàng)和概念。
a. 網(wǎng)絡(luò)驅(qū)動(dòng)
Docker支持多種網(wǎng)絡(luò)驅(qū)動(dòng),用于創(chuàng)建和管理容器網(wǎng)絡(luò)。以下是一些常用的網(wǎng)絡(luò)驅(qū)動(dòng):
- bridge:默認(rèn)網(wǎng)絡(luò)驅(qū)動(dòng),創(chuàng)建一個(gè)虛擬網(wǎng)橋,容器連接到這個(gè)網(wǎng)橋上,并通過(guò)NAT訪問(wèn)外部網(wǎng)絡(luò)。
- host:容器共享宿主機(jī)的網(wǎng)絡(luò)命名空間,容器的網(wǎng)絡(luò)設(shè)置與宿主機(jī)相同。
- none:不配置網(wǎng)絡(luò),容器擁有自己的網(wǎng)絡(luò)棧,但不進(jìn)行任何網(wǎng)絡(luò)配置。
- overlay:用于跨主機(jī)通信的網(wǎng)絡(luò)驅(qū)動(dòng),常用于Docker Swarm或Kubernetes等集群環(huán)境中。
b. 自定義網(wǎng)橋配置
在daemon.json中,你可以自定義默認(rèn)網(wǎng)橋的一些屬性:
bridge:設(shè)置默認(rèn)網(wǎng)橋名稱。bip:設(shè)置網(wǎng)橋的IP地址和子網(wǎng)掩碼。fixed-cidr:設(shè)置容器IP地址的范圍。
配置示例:
{
"bridge": "docker0",
"bip": "192.168.1.1/24",
"fixed-cidr": "192.168.1.0/24"
}docker服務(wù)的默認(rèn)子網(wǎng)為:172.17.0.0/16 , 如果虛擬機(jī)或者物理機(jī)的IP地址在該范圍內(nèi),需要用bip做規(guī)避,以避免IP地址沖突問(wèn)題。
c. Insecure registries
如果需要從HTTP注冊(cè)表拉取鏡像,可以配置Docker以允許不安全的注冊(cè)表:
{
"insecure-registries": ["http://my-insecure-registry.local:5000"]
}d. DNS配置
可以為Docker守護(hù)進(jìn)程設(shè)置自定義的DNS服務(wù)器和搜索域:
dns:指定一個(gè)或多個(gè)DNS服務(wù)器地址。dns-search:指定DNS搜索域。
配置示例:
{
"dns": ["8.8.8.8", "8.8.4.4"],
"dns-search": ["example.com"]
}e. IP地址管理
ip:設(shè)置容器端口映射時(shí)使用的默認(rèn)IP地址。ip-forward:?jiǎn)⒂没蚪肐P轉(zhuǎn)發(fā)。ip-masq:?jiǎn)⒂没蚪肐P偽裝。
配置示例:
{
"ip": "10.0.0.1",
"ip-forward": true,
"ip-masq": true
}f. IPv6配置
ipv6:?jiǎn)⒂肐Pv6網(wǎng)絡(luò)支持。
配置示例:???????
{
"ipv6": true
}g. 使用daemon.json配置網(wǎng)絡(luò)
在daemon.json中配置網(wǎng)絡(luò)時(shí),可能需要重啟Docker服務(wù)以使配置生效:???????
systemctl daemon-reload systemctl restart docker
實(shí)踐建議
- 選擇適合的網(wǎng)絡(luò)驅(qū)動(dòng):根據(jù)應(yīng)用需求和部署環(huán)境選擇合適的網(wǎng)絡(luò)驅(qū)動(dòng)。
- 配置網(wǎng)橋:如果使用默認(rèn)的網(wǎng)橋網(wǎng)絡(luò),考慮自定義網(wǎng)橋配置以滿足特定的網(wǎng)絡(luò)需求。
- 安全性:避免在生產(chǎn)環(huán)境中使用不安全的注冊(cè)表,確保所有通信都通過(guò)HTTPS進(jìn)行。
- DNS管理:確保容器能夠解析外部域名,考慮配置自定義DNS服務(wù)器和搜索域。
- 監(jiān)控網(wǎng)絡(luò)性能:監(jiān)控網(wǎng)絡(luò)流量和性能,確保網(wǎng)絡(luò)配置不會(huì)導(dǎo)致性能瓶頸。
通過(guò)合理配置網(wǎng)絡(luò),可以確保容器能夠正確地與其他容器和外部網(wǎng)絡(luò)通信,同時(shí)保持網(wǎng)絡(luò)的安全性和性能。
3.5 安全配置
如果需要加強(qiáng)安全性,可以設(shè)置tls、tlscacert、tlscert、tlskey和tlsverify等參數(shù)來(lái)啟用TLS加密和認(rèn)證。
3.6 實(shí)時(shí)恢復(fù)
概念介紹
實(shí)時(shí)恢復(fù)(Live Restore)是Docker的一個(gè)特性,它允許在Docker守護(hù)進(jìn)程重啟或崩潰后,自動(dòng)重啟運(yùn)行中的容器。這提高了容器化應(yīng)用的可用性和彈性,因?yàn)樗鼈儾恍枰斯じ深A(yù)即可恢復(fù)運(yùn)行。
配置實(shí)時(shí)恢復(fù)
實(shí)時(shí)恢復(fù)功能可以通過(guò)daemon.json配置文件中的live-restore選項(xiàng)來(lái)啟用:???????
{
"live-restore": true
}當(dāng)設(shè)置為true時(shí),Docker會(huì)在守護(hù)進(jìn)程啟動(dòng)時(shí)嘗試重啟所有之前運(yùn)行中的容器。
優(yōu)化建議
- 始終啟用實(shí)時(shí)恢復(fù):在生產(chǎn)環(huán)境中,建議總是啟用實(shí)時(shí)恢復(fù)功能,以確保容器在Docker守護(hù)進(jìn)程重啟后能夠自動(dòng)恢復(fù)。
- 合理配置容器重啟策略:除了使用實(shí)時(shí)恢復(fù)外,還可以在運(yùn)行容器時(shí)使用
--restart標(biāo)志設(shè)置重啟策略,如always、on-failure、unless-stopped等,以適應(yīng)不同的需求。 - 監(jiān)控容器狀態(tài):使用Docker提供的資源或第三方工具監(jiān)控容器狀態(tài),確保它們按預(yù)期運(yùn)行,并在出現(xiàn)問(wèn)題時(shí)及時(shí)響應(yīng)。
- 日志記錄:配置適當(dāng)?shù)娜罩居涗浖?jí)別和驅(qū)動(dòng),以便在容器重啟時(shí)能夠查看相關(guān)日志,分析原因。
- 資源限制:對(duì)容器設(shè)置資源限制(如內(nèi)存、CPU),防止容器消耗過(guò)多資源導(dǎo)致系統(tǒng)不穩(wěn)定。
- 定期維護(hù):定期維護(hù)和更新容器,確保它們使用最新的安全補(bǔ)丁和功能。
- 測(cè)試:在生產(chǎn)環(huán)境部署實(shí)時(shí)恢復(fù)之前,應(yīng)在測(cè)試環(huán)境中進(jìn)行充分測(cè)試,確保它按預(yù)期工作,并且不會(huì)引入新的問(wèn)題。
- 配置文件管理:將
daemon.json文件納入版本控制系統(tǒng),以便跟蹤更改和回滾。 - 使用Docker Swarm或Kubernetes:對(duì)于大規(guī)模容器部署,考慮使用Docker Swarm或Kubernetes等容器編排工具,它們提供了更高級(jí)的容器管理和恢復(fù)功能。
- 文檔和培訓(xùn):確保團(tuán)隊(duì)成員了解實(shí)時(shí)恢復(fù)的工作原理和配置方法,以便在需要時(shí)能夠快速有效地使用此功能。
通過(guò)這些優(yōu)化建議,可以確保Docker容器在面對(duì)守護(hù)進(jìn)程重啟或崩潰時(shí)具有更好的彈性和穩(wěn)定性。生產(chǎn)環(huán)境中推薦配置。
4 配置文件修改注意事項(xiàng)
在修改daemon.json文件后,需要執(zhí)行來(lái)使配置生效。
systemctl daemon-reload systemctl restart docker
- 確保JSON格式正確,錯(cuò)誤的格式會(huì)導(dǎo)致Docker守護(hù)進(jìn)程無(wú)法啟動(dòng)。
- 根據(jù)實(shí)際需求和環(huán)境來(lái)調(diào)整配置,避免不必要的資源浪費(fèi)。
5 總結(jié)
通過(guò)合理配置daemon.json文件,可以優(yōu)化Docker的使用體驗(yàn),提高效率和安全性。
在生產(chǎn)環(huán)境中根據(jù)具體需求進(jìn)行細(xì)致的配置和測(cè)試,確保系統(tǒng)的穩(wěn)定性和性能。
如:data-root這個(gè)默認(rèn)路徑改成磁盤空間較大的目錄,而非默認(rèn)的/var/lib/docker
最后,由于Docker的版本更新可能會(huì)引入新特性或改變某些配置項(xiàng)的行為,因此還需要參考最新的官方文檔來(lái)獲取最新的信息。
比如:Docker的實(shí)時(shí)恢復(fù)(Live Restore)功能是在1.10版本中引入的。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker update命令動(dòng)態(tài)更新容器配置
Docker的docker update命令提供了一種在不停止容器的情況下動(dòng)態(tài)調(diào)整其資源配置的能力,從而優(yōu)化性能或滿足特定需求,本文詳細(xì)介紹了docker update命令的使用方法、常用選項(xiàng)如CPU和內(nèi)存限制,感興趣的可以了解一下2024-10-10
iptables如何限制宿主機(jī)跟Docker IP和端口訪問(wèn)(安全整改)
本文詳細(xì)介紹了如何通過(guò)iptables對(duì)網(wǎng)絡(luò)訪問(wèn)進(jìn)行限制,包括限制特定IP或網(wǎng)段訪問(wèn)特定服務(wù),以及在Docker環(huán)境下,如何設(shè)置DOCKER-USER鏈限制IP和端口訪問(wèn),確保網(wǎng)絡(luò)安全2024-10-10
使用docker?部署mysql突然連接不上的問(wèn)題及解決方法
這篇文章主要介紹了使用docker?部署mysql,突然連接不上,要解決這個(gè)問(wèn)題需要找到根本原因,對(duì)癥治療就好,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
Linux Docker阿里云鏡像倉(cāng)庫(kù)失效的解決
作者分享了在VmWare安裝的Linux7中,通過(guò)yum安裝的docker無(wú)法pull鏡像的問(wèn)題解決經(jīng)驗(yàn),首先,他檢查了網(wǎng)絡(luò)是否通暢,然后設(shè)置了阿里云鏡像加速地址,但仍然無(wú)法pull鏡像,接下來(lái),他查看了docker是否成功設(shè)置鏡像地址,并查看了docker日志2024-10-10
Docker安裝配置MySQL的實(shí)現(xiàn)步驟
MySQL 是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在 WEB 應(yīng)用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))應(yīng)用軟件之一。在本教程中,會(huì)帶大家正確安裝配置MySQL在Docker2021-11-11
在Docker容器中使用iptables時(shí)的最小權(quán)限的開啟方法
這篇文章主要介紹了在Docker容器中使用iptables時(shí)的最小權(quán)限的開啟方法的相關(guān)資料,需要的朋友可以參考下2017-01-01
Docker發(fā)布鏡像到DockerHub與阿里云容器
本文主要介紹了Docker發(fā)布鏡像到DockerHub與阿里云容器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

