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

 
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐