当前位置:   article > 正文

Docker实战-Docker Daemon

docker daemon

一、修改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启动项

    Docker启动时,会从启动文件中读取启动项。CentOS中使用systemd管理服务,通过systemctl启动关闭停止Docker Daemon或者通过systemctl enable docker将Docker Daemon加入自启动

    Docker Daemon的启动文件放在/etc/systemd/system/docker.service.d目录中,如果没有则手工创建该目录并且在该目录下创建docker.conf文件来保存Docker的启动项

这里写图片描述

    修改docker.conf文件,添加启动项,里面的内容是我从百度上copy下来的,想要添加哪些启动项配置就可以在[Service]的OPTIONS中添加

这里写图片描述

    配置完成后,加载配置文件,重启Docker Daemon

这里写图片描述

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/593797
推荐阅读
相关标签
  

闽ICP备14008679号