您的位置:首页 > 运维架构 > Docker

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

2016-08-16 15:54 337 查看


前面一直是用的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”

 
<
a811
pre class="plain" style="margin-top:10px;margin-bottom:0px;padding:0px;color:rgb(51,51,51);font-size:14px;line-height:20px;background-color:rgb(255,255,255);">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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ajax html jsonp