通过systemd配置Docker--systemd Service相关目录

前面一直是用的1.8.2版本的Docker,最近集群中增加了几个节点装了1.9.1版本,结果在配置使用“--insecure-registry"方式不通过key直接登录local registry时,发现1.9.1版本中没有了"/etc/sysconfig/docker"文件,也没有”/etc/default/docker"这个文件。

 后来参考官方文档通过配置systemd service文件的方式解决了这个问题。关于官方文档中介绍的更多通过systemd配置内容,请参考官方文档“Control and Configure Docker with systemd”。本文重点通过介绍配置--insecure-registry来介绍如何通过systemd配置Docker。

 

1. systemd Service相关目录

 通常情况下,我们有3种方式可以配置etcd中的service。以docker为例,1)在目录/etc/systemd/system/docker.service.d目录下放systemd drop-in文件;2)通过修改/etc/systemd/system/docker.service文件;3)通过修改/lib/systemd/system/docker.service文件。如果2)和3)的文件同时存在,2)将覆盖3)。

 默认情况下1)和2)都不存在,我们此处也用不着太复杂的去使用选项1)和2),直接修改3)就可以解决问题。

2. Version 1.8.2 到 Version 1.9.1 docker.service文件的变化

 版本1.8.2的docker.service文件内容如下。可以看到“/etc/sysconfig/docker" 文件是如何被引用的,以及该文件中定义的”INSECURE_REGISTRY"变量是如何生效的。首先,在“/etc/sycconfig/docker" 中定义变量;然后通过“EnvironmentFile” 引用“/etc/sysconfig/docker"文件;最后在”ExecStart“启动daemon时,将”INSECURE_REGISTRY"变量作为daemon选项执行。

 

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
ExecStart=/usr/bin/docker daemon $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
MountFlags=slave
TimeoutStartSec=1min
Restart=on-failure

[Install]
WantedBy=multi-user.target


 版本1.9.1的docker.service文件内容如下所示。可以看到一个很主要的区别就是1.9.1中缺少了对EnvironmentFile的引用,以及在‘ExecStart’启动docker daemon时对环境变量的使用。

 

 

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/docker daemon -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

 

 

3. 解决方案

 1)参考1.8.2的方式,也为了保持与1.8.2的向上兼容。首先在创建"/etc/sysconfig/docker"文件,并在文件加入如下行:

 

<span style="font-size:14px;">INSECURE_REGISTRY='--insecure-registry=https://xingwangc.docker.rg --insecure-registry=xingwangc.docker.rg'</span>

  注:上面变量定义中,第一个“--insecure-registry=https://xingwangc.docker.rg”用于通过用户名/密码登陆registry,第二个“--insecure-registry=xingwangc.docker.rg"用于向registry push image和从registry pull image。第二个定义中没有指明“https”协议,如果加了“https”将造成无法从registry pull/push。理解了这个过程之后,就可以定义任何变量名了。

 

 

 2)修改/lib/systemd/system/docker,增加EnvironmentFile引用/etc/sysconfig/docker文件,并在ExecStart中增加对环境变量的引用。

 

[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 daemon -H fd:// $INSECURE_REGISTRY
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

 

 

 3)在刷新改动前,先查看下是否使用了EnvironmentFile,默认的是没有引用EnvironmentFile的。使用命令“systemctl show”

 

sudo systemctl show docker | grep EnvironmentFile EnvironmentFile=-

 

 

 4)刷新改动,并重启docker,并检查EnvironmentFile

 

sudo systemctl daemon-reload
sudo systemctl restart docker



 5)验证登陆registry,pull image

 

 

参考链接:

Control and Configure Docker with Systemd


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值