使用 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
,这里可以获取到这两个文件。