原文地址git
一些docker daemon生產環境中要注意的參數配置。github
本文介紹一些生產環境中dockerd要特別注意的參數,這些參數能夠經過在dockerd
命令行參數形式給,也能夠經過在/etc/docker/daemon.json
裏配置。本文介紹的就是daemon.json
配置方式。docker
在開始以前,請先查看/etc/docker/daemon.json
是否存在,若是不存在則新建一個,內容是{}
。而後你要懂JSON文件格式。json
下面所講的配置最好在Docker安裝完以後立刻作,若是已經有容器運行了,那麼先stop掉全部容器,而後再作。segmentfault
修改完以後重啓Docker daemon,好比在Ubuntu 16.04下:sudo systemctl restart docker.service
。bash
而後執行docker info
來驗證配置是否生效。服務器
registry-mirrors
{ "registry-mirrors": [] }
此參數配置的是Docker registry的鏡像網站,國內訪問docker hub有時候會抽風,因此配置一個國內的鏡像網站可以加速Docker image的下載。網絡
可使用Daocloud加速器(需註冊,使用免費)或者其餘雲廠商提供的免費的加速服務。它們的原理就是修改registry-mirrors
參數。post
dns
{ "dns": [] }
Docker內置了一個DNS Server,它用來作兩件事情:性能
dns
參數設定的地址)默認狀況下,dns
參數值爲Google DNS nameserver:8.8.8.8
和8.8.4.4
。咱們得改爲國內的DNS地址,好比:
1.2.4.8
223.5.5.5
和223.6.6.6
114.114.114.114
和114.114.115.115
好比:
{ "dns": ["223.5.5.5", "223.6.6.6"] }
log-driver
Log driver是Docker用來接收來自容器內部stdout/stderr
的日誌的模塊,Docker默認的log driver是JSON File logging driver。這裏只講json-file
的配置,其餘的請查閱相關文檔。
json-file
會將容器日誌存儲在docker host machine的/var/lib/docker/containers/<container id>/<container id>-json.log
(須要root權限纔可以讀),既然日誌是存在磁盤上的,那麼就要磁盤消耗的問題。下面介紹兩個關鍵參數:
max-size
,單個日誌文件最大尺寸,當日志文件超過此尺寸時會滾動,即再也不往這個文件裏寫,而是寫到一個新的文件裏。默認值是-1,表明無限。max-files
,最多保留多少個日誌文件。默認值是1。根據服務器的硬盤尺寸設定合理大小,好比:
{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-files":"5" } }
storage-driver
Docker推薦使用overlay2做爲Storage driver。你能夠經過docker info | grep Storage
來確認一下當前使用的是什麼:
$ docker info | grep 'Storage' Storage Driver: overlay2
若是結果不是overlay2,那你就須要配置一下了:
{ "storage-driver": "overlay2" }
mtu
若是docker host machine的網卡MTU爲1500,則不須要此步驟
MTU是一個很容易被忽略的參數,Docker默認的MTU是1500,這也是大多數網卡的MTU值。可是!在虛擬化環境下,docker host machine網卡的MTU可能不是1500,好比在openstack建立的虛擬的網卡的MTU是1450:
$ ip link 1: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether fa:16:3e:71:09:f5 brd ff:ff:ff:ff:ff:ff
當Docker網絡的MTU比docker host machine網卡MTU大的時候可能會發生:
因此將Docker網絡MTU設置成和host machine網卡保持一致就好了,好比:
{ "mtu": 1450 }
驗證:
$ ip link 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 02:42:6b:de:95:71 brd ff:ff:ff:ff:ff:ff
注意到docker0的MTU仍是1500,不用驚慌,建立一個容器再觀察就變成1450了(下面的veth是容器的虛擬網卡設備):
$ docker run -itd --name busybox --rm busybox $ ip link 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP mode DEFAULT group default link/ether 02:42:6b:de:95:71 brd ff:ff:ff:ff:ff:ff 268: vethdf32b1b@if267: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master docker0 state UP mode DEFAULT group default link/ether 1a:d3:8a:3e:d3:dd brd ff:ff:ff:ff:ff:ff link-netnsid 2
在到容器裏看看它的網卡,MTU也是1450:
$ docker exec busybox ip link 267: eth0@if268: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
關於Overlay network的MTU看這篇文章