docker deamon

一、修改Docker Daemon

    Docker Daemon是Docker的守护进程,Docker Client通过命令行与Docker Damon通信,完成Docker相关操作

    Docker Daemon有不同的修改方式:命令行修改,修改启动项,修改配置文件。其中仅仅只是研究或一次使用Docker Daemon的不同选项时,可以通过命令行的方式,此时Docker Daemon运行在前端,日志直接打印在终端上;当Docker Daemon的配置很稳定,不常修改时,可以将Docker Daemon的选项放在启动项中;当Docker Daemon的配置需要定时修改时,就可以把变化的选项放在配置文件中

1. 直接启动Docker Daemon

    在启动Docker Daemon时可以在命令行后面追加配置项,此时配置项会立即生效,终端打印日志,方便调试

    通常在命令行中添加的选项有:-D/–debug(开启或关闭调试模式,默认关闭)、-H/–host(设置Docker Daemon监听方式)、–tls(开启或关闭TLS)

    下图是设置的存储方式,但实际上存储方式应该在后面的方式中设置,这里只是举个栗子

2. 修改Docker Daemon启动项

如果是CentOS7 就是用如下:

修改docker.service文件,使用--graph参数指定存储位置

sudo   vim   /usr/lib/systemd/system/docker.service 

文本内容:ExecStart=/usr/bin/dockerd下面添加如下内容:

           --graph /data/tools/docker

2.修改完成后reload配置文件
sudo systemctl daemon-reload

3.重启docker服务
sudo systemctl  restart docker.service

   

3. 自定义Docker Daemon配置文件

    Docker Daemon启动时,从启动文件读取了启动项后会追加配置文件中的配置项,通过–config-file可以设置Docker Daemon的配置文件路径,默认为:/etc/docker/daemon.json(如果没有自行创建)

    注意,配置文件中的配置项不能和Docker Daemon启动项重复,一旦重复,Docker Daemon启动时就会报错无法启动,配置文件对应的格式为JSON格式,对于支持多个值得配置项,需要使用配置名称的复数形式

    某些配置项支持动态加载(通过信号量实现),不用重启Docker Daemon就可以更新配置项,如debug(调试模式)、cluster-store(集群中分布式存储后端的地址)、cluster-store-opts(集群选项)、labels(Daemon中的标签)等

二、相关配置选项

1. 仓库相关配置

–disable-legacy-registry 

    Docker从1.6版本开始,就支持从V2版本镜像仓库下载镜像,为了兼容会先尝试连接镜像仓库的V2接口,如果失败则再次尝试V1接口,而一旦设置了–disable-legacy-registry后就不会连接镜像中的V1接口,如果连接V2接口失败则立即退出

–registry-mirror 

    镜像仓库会自动同步Docker Hub上的镜像到本地,在国内建立一个缓存,提交下载、上传速率

–insecure-registry 

    Docker将镜像仓库分为安全和不安全的,从不安全的镜像仓库下载、上传及搜索镜像都会失败,不安全的镜像可能是没有使用TLS或者主机上没有保存BA证书,当用户建立的私有镜像仓库可以保证仓库是安全的,一般不会设置TLS,从中下载就需要把该镜像仓库添加的–insecure-registry列表中,在设置的时候可以通过域名+端口(xxx.xxx:xxx)或者使用网段的方式(xxx.xxx.xxx.xxx/xx)批量添加

2. 安全相关配置

–host/H 

    Docker Daemon作为守护进程运行在后台,和Docker Client通过Socket方式通信,Docker Daemon监听Socker有三种方式:unix、tcp、fd 

    默认情况下,Docker Daemon和Docker Client在同一台主机上时使用本地Socket通信,Docker Daemon的配置为unix:///var/run/docker.sock 

    当Docker Daemon和Docker Client运行在不同主机上是,需要在Docker Daemon中开启TCP Socket,如果没有启动–tls选项,则Docker Daemon和Docker Client间的通信没有任何认证加密,这个时候就可以通过-H设置Docker Daemon在某个IP上监听 

    当主机有多个网卡时,通过docker daemon -H tcp://0.0.0.0:2375使得Docker Daemon在主机的所有IP上监听,端口为2375;使用docker daemon -H tcp://10.35.21.8:2375则使得Docker Daemon只在某个IP上监听,这时Docker Client使用docker -H 10.35.21.8:2375 info向Docker Daemon发送命令成功,而向另一个IP发送命令则会失败

–tls 

    当Docker Client和Docker Daemon通过远程通信时需要使用TLS进行安全加密,Docker Daemon和Docker Client中加入TLS相关配置后分别添加服务器CS证书和客户端CA证书,这样,Docker Daemon只接受CA认证的客户端发送的命令而Docker Client也只能像通过CA认证的服务端发送命令

3.日志相关配置

–log-level 

    Docker Daemon一般以守护进程的方式运行在后台,如果要查看Docker Daemon的运行状态只能通过日志方式,通过–log-level可以设置Docker Daemon的日志等级,默认为info,额可以设置为debug、info、warn、error、fatal

–log-driver 

    通过该配置可以设置容器日志记录方式,默认为json-file,也有其他如syslog、journald、fluentd、gelf、awslogs、none,如果要使用docker logs命令查看容器日志,就必须设置为json-file 

    

–log-opt 

    设置日志记录方式的参数,如max-size、max-file等,其中max-size设置日志的大小,超过该阈值的日志就会回滚;max-file设置回滚日志的最大文件数,超过该数量的日志文件就会被丢弃,没有设置max-size则该参数不生效

4. 存储相关配置

–graph 

    设置Docker运行的根目录,Docker的镜像和容器都会保存在该目录下,如/var/lib/docker,其中使用AUFS存储驱动时,镜像保存在/var/lib/docker/aufs中;使用Devicemapper时镜像数据保存在/var/lib/docker/devicemapper中,容器数据都保存在/var/lib/docker/container中

–storage-driver 

    Docker启动容器的时候会创建文件系统,为rootfs提供挂载点,而Docker Daemon支持多种文件系统,如AUFS、Devicemapper、ZFS、OverlayFS等

AUFS 

    AUFS是Docker Daemon最早支持的文件系统,但未能加入Linux内核,可能会引起内核崩溃,但它是唯一支持在容器间共享程序和库的文件系统,当运行多个容器时就可以使用AUFS

Devicemapper 

    Devicemapper是哟拿过来ethin-provisioning和写时复制快照技术,Devicemapper创建了一个thin pool存储镜像和容器,这个thin pool创建在两个块设备上,一块用于保存数据,一块用于保存元数据,默认情况下,这两个块设备使用sparse文件模拟的,在实际环境可以通过lvm使用磁盘创建thin pool

详细信息在上一篇文章Docker实战-镜像和容器的存储结构中有讲过
–storage-opt 

    不同的镜像存储方式有不同的参数,可以通过–storage-opt进行设置,在设置Devicemapper相关参数时需要在参数名前添加dm前缀,ZFS相关参数则需要添加zfs前缀

dm.thinpooldev 

    设置thin pool使用的块设备,Docker Deamon会使用dm.thinpooldev中执行的块设备存储镜像和容器,如果不提供块设备在创建thin pool时就会创建loopback文件代替块设备存储镜像和容器,这种方式不需要创建卷,但是存储速度慢,不支持扩容

dm.basesize 

    设置每个镜像和容器占用的存储空间,默认值为10GB,分配空间时thin pool采用的是按需分配的方式,一旦镜像和容器超过了设置的basesize,Docker Daemon就会报错,修改该值后需要重启Docker Daemon

dm.loopdatasize 

    在loopback文件方式下,设置data设备使用的loopback文件大小,默认为100GB,但初始时并不会占用这么多

dm.loopmetadatasize 

    在loopback文件方式下,设置metadata设备使用的loopback文件大小,默认为2GB,同样初始时不会占用这么多

dm.blkdiscard 

    设置是否开启释放模式,thin pool使用按需分配的方式分配存储空间,在Linux内核3.8之前的版本中当执行删除容器、删除镜像、删除容器内文件时不会释放这些空间,开启blkdiscard后Docker会释放从存储空间 

    如果没有设置开启,则在删除容器内文件是不会释放存储空间,但是当容器空间增加到容器空间上限时,系统会重新利用之前已经删除的文件占用空间 

    内核3.8之后的版本可以关闭释放模式,使用内核中的dm-thin提供的释放存储空间的功能

dm.use_deferred_removal 

    是否开启异步删除。在支持异步删除设备机制的系统中,删除设备时如果设备被其他程序使用,可以在那时不删除而是将删除操作添加到设备的操作列表中,当设备空间时再进行删除 

    通常容器退出时,Docker Daemon会删除他们所使用的临时存储空间,如果空间无法立即删除则容器退出会处于死循环,开启该选项后容器可以立刻退出,系统会在空间空闲时删除它们

dm.use_deferred_deletion 

    是否开启异步删除thin pool设备,在删除容器前,Docker Daemono会删除容器使用的thin pool设备,如果删除设备失败,删除容器也会失效,开启该选项后,Devicemapper会把thin pool设备标记为已删除,然后删除容器 

    在实际操作中,可以开启dm.use_deferred_removal和dm.use_deferred_deletion
5.网桥相关配置

    Docker安装完成后会建立docker0虚拟网桥,用于容器和外界通信,默认情况下Docker会自动配置docker0的IP、子网掩码和容器范围,也可以自己自定义

–bip 

    设置docker0的IP和子网掩码,如docker daemon –bip=172.0.0.1/24

–fixed-cidr 

    设置容器IP的范围,创建容器时,Docker Daemon会从–fixed-cidr配置的IP范围中选择可用的IP分配给容器的eth0网卡,再将docker0的子网掩码配置给eth0,如docker daemon --bip=172.0.0.1/16 --fixed-cidr=172.0.0.1/24

–default-gateway 

    默认情况下,容器使用docker0的IP作为网关,也可以通过–default-gateway设置新的容器网关

–dns 

    通过–dns可以配置DNS的地址

6. 容器与外部通信配置

    容器要在宿主机配置两个参数才能和外部进行通信:ip_forward设置为1,允许宿主机向外转发;设置iptables规则运行向外连接

    设置选项–ip_forward为true时,当Docker Daemon启动会自动修改宿主机的ip_forward为1;设置–iptables=ture时,当Docker Daemon启动时会在iptables中追加转发规则,默认都为true
 

猜你喜欢

转载自blog.csdn.net/doctorone/article/details/88535753