用systemd控制Docker

预计阅读时间:5分钟

许多Linux发行版使用systemd启动Docker守护程序。本文档显示了一些有关如何自定义Docker设置的示例。

启动Docker守护程序

手动开始

安装Docker之后,您需要启动Docker守护程序。大多数Linux发行版都systemctl用于启动服务。

$ sudo systemctl start docker

系统启动时自动启动

如果您希望Docker在启动时启动,请参阅“ 配置Docker在启动时启动”

自定义Docker守护程序选项

有多种方法可以为Docker守护程序配置守护程序标志和环境变量。推荐的方法是使用与平台无关的 daemon.json文件,/etc/docker/默认情况下该文件位于Linux上。请参阅 守护程序配置文件

您可以使用来配置几乎所有守护程序配置选项daemon.json。以下示例配置了两个选项。无法使用daemon.json机制配置的一件事是HTTP代理

运行时目录和存储驱动程序

您可能需要通过将其移动到单独的分区来控制用于Docker映像,容器和卷的磁盘空间。

为此,请在daemon.json文件中设置以下标志:

{
    "data-root": "/mnt/docker-data",
    "storage-driver": "overlay2"
}

HTTP / HTTPS代理

泊坞窗守护程序使用HTTP_PROXYHTTPS_PROXY以及NO_PROXY在其启动环境环境变量来配置HTTP或HTTPS代理的行为。您不能使用该daemon.json文件配置这些环境变量。

本示例覆盖默认docker.service文件。

如果在公司设置中位于HTTP或HTTPS代理服务器后面,则需要在Docker systemd服务文件中添加此配置。

无根模式的注意事项

无根模式下运行Docker时,systemd配置文件的位置不同。在无根模式下运行时,Docker作为用户模式的系统服务启动,并使用存储在每个用户主目录中的文件~/.config/systemd/user/docker.service.d/。另外,systemctl必须在没有sudo和带有--user 标志的情况下执行。如果您以无根模式运行Docker,请选择下面的“无根模式”选项卡。

  1. 为docker服务创建一个systemd插入目录:

    $ sudo mkdir -p /etc/systemd/system/docker.service.d
    
  2. 创建一个名为/etc/systemd/system/docker.service.d/http-proxy.conf 添加HTTP_PROXY环境变量的文件:

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80"
    

    如果您位于HTTPS代理服务器后面,请设置HTTPS_PROXY环境变量:

    [Service]
    Environment="HTTPS_PROXY=https://proxy.example.com:443"
    

    可以设置多个环境变量;设置非HTTPS和HTTPs代理;

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80"
    Environment="HTTPS_PROXY=https://proxy.example.com:443"
    
  3. 如果您有需要联系而不需要代理的内部Docker注册表,则可以通过NO_PROXY环境变量指定它们。

    NO_PROXY变量指定一个字符串,该字符串包含用逗号分隔的主机应排除在代理之外的值。您可以指定以下选项来排除主机:

    • IP地址前缀(1.2.3.4
    • 域名或特殊的DNS标签(*
    • 域名与该名称和所有子域匹配。以“。”开头的域名。仅匹配子域。例如,给定域 foo.example.comexample.com
      • example.com匹配example.comfoo.example.com,以及
      • .example.com 仅匹配 foo.example.com
    • 单个星号(*)表示不应该进行代理
    • IP地址前缀(1.2.3.4:80)和域名(foo.example.com:80)接受文字端口号

    配置示例:

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80"
    Environment="HTTPS_PROXY=https://proxy.example.com:443"
    Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
    
  4. 刷新更改并重新启动Docker

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker
    
  5. 验证配置已加载并匹配您所做的更改,例如:

    $ sudo systemctl show --property=Environment docker
        
    Environment=HTTP_PROXY=http://proxy.example.com:80 HTTPS_PROXY=https://proxy.example.com:443 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp
    
  1. 为docker服务创建一个systemd插入目录:

    $ mkdir -p ~/.config/systemd/user/docker.service.d
    
  2. 创建一个名为~/.config/systemd/user/docker.service.d/http-proxy.conf 添加HTTP_PROXY环境变量的文件:

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80"
    

    如果您位于HTTPS代理服务器后面,请设置HTTPS_PROXY环境变量:

    [Service]
    Environment="HTTPS_PROXY=https://proxy.example.com:443"
    

    可以设置多个环境变量;设置非HTTPS和HTTPs代理;

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80"
    Environment="HTTPS_PROXY=https://proxy.example.com:443"
    
  3. 如果您需要联系内部Docker注册表而不进行代理,则可以通过NO_PROXY环境变量指定它们。

    NO_PROXY变量指定一个字符串,该字符串包含用逗号分隔的主机应排除在代理之外的值。您可以指定以下选项来排除主机:

    • IP地址前缀(1.2.3.4
    • 域名或特殊的DNS标签(*
    • 域名与该名称和所有子域匹配。以“。”开头的域名。仅匹配子域。例如,给定域 foo.example.comexample.com
      • example.com匹配example.comfoo.example.com,以及
      • .example.com 仅匹配 foo.example.com
    • 单个星号(*)表示不应该进行代理
    • IP地址前缀(1.2.3.4:80)和域名(foo.example.com:80)接受文字端口号

    配置示例:

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80"
    Environment="HTTPS_PROXY=https://proxy.example.com:443"
    Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
    
  4. 刷新更改并重新启动Docker

    $ systemctl --user daemon-reload
    $ systemctl --user restart docker
    
  5. 验证配置已加载并匹配您所做的更改,例如:

    $ systemctl --user show --property=Environment docker
    
    Environment=HTTP_PROXY=http://proxy.example.com:80 HTTPS_PROXY=https://proxy.example.com:443 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp
    

配置Docker守护程序侦听连接的位置

请参阅 配置Docker守护程序在何处侦听连接

手动创建systemd单位文件

当安装不带软件包的二进制文件时,您可能希望将Docker与systemd集成。为此,将两个单元文件(servicesocket)从github存储库安装/etc/systemd/system

码头工人守护进程systemd配置