使用 systemd 管理配置 Docker
現在,很多Linux的發行版本使用systemd去啓動Docker後臺。這份文檔演示幾個如何定製自己的Docker設置的例子。
啓動Docker 後臺
當Docker 安裝完成後,你將需要啓動Docker後臺。
$ sudo systemctl start docker
# 在一些老的發行版本下,你可能需要使用如下命令
$ sudo service docker start
如果你需要Docker自動啓動,你也可以:
$ sudo systemctl enable docker
# 在一些老的發行版本下,你可能需要使用如下命令
$ sudo chkconfig docker on
自定義Docker 後臺設置
這裏通過多種方法去配置你的Docker後臺的標誌和環境變量。
如果 docker.service
文件設置使用一個EnvironmentFile
(通常路勁是/etc/sysconfig/docker
)
,你可以修改引用的配置文件。
檢查 docker.service
是否使用一個EnvironmentFile
:
$ sudo systemctl show docker | grep EnvironmentFile
EnvironmentFile=-/etc/sysconfig/docker (ignore_errors=yes)
或者,先查找出被加載的服務文件的路徑,然後查找屬性:
$ sudo systemctl status docker | grep Loaded
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
$ sudo grep EnvironmentFile /usr/lib/systemd/system/docker.service
EnvironmentFile=-/etc/sysconfig/docker
你可以使用覆蓋文件,自定義Docker後臺設置,如後面的HTTP Proxy 例子。文件的路徑在/usr/lib/systemd/system
或 /lib/systemd/system
,並且包含包含一些不能修改的默認配置。
運行時目錄和存儲驅動
你可能想通過隔離的分區去管理用於Docker鏡像、容器和數據卷的磁盤空間。
在這個例子中,我們假設你的 docker.service
文件的一些設置已經類似如下:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
ExecStart=/usr/bin/docker -d -H fd:// $OPTIONS
LimitNOFILE=1048576
LimitNPROC=1048576
[Install]
Also=docker.socket
這將允許我們通過設置 /etc/sysconfig/docker
文件中的 OPTIONS
參數來添加額外的配置標誌:
OPTIONS="--graph /mnt/docker-data --storage-driver btrfs"
你還可以在這個文件裏設置其他的環境變量,例如,下面將要介紹的HTTP_PROXY
環境變量。
HTTP proxy(HTTP 代理)
這個例子將會覆蓋默認的 docker.service
文件。.
假設你的服務架設在一個HTTP代理服務之後,例如,在企業配置環境中,你可能需要在Docker systemd服務文件中增加一個這樣的配置。
首先,爲docker 服務創建一個systemd 插入目錄:
mkdir /etc/systemd/system/docker.service.d
現在創建一個名字爲 /etc/systemd/system/docker.service.d/http-proxy.conf
的文件,然後添加HTTP_PROXY
環境變量:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"
如果你不想內部Docker registries 經過代理,你可以通過NO_PROXY
變量配置它們:
Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"
刷新更改:
$ sudo systemctl daemon-reload
驗證配置是否生效:
$ sudo systemctl show docker --property Environment
Environment=HTTP_PROXY=http://proxy.example.com:80/
重啓 Docker:
$ sudo systemctl restart docker
手動創建systemd unit 文件
當你通過二進制方式安裝時,你可能需要通過systemd來整合Docker。爲此,簡單的安裝兩個unit文件(service 和 socket)到 /etc/systemd/system
,這裏可以獲取到這兩個文件。