转自:Docker实战-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

Docker Daemon相关推荐

  1. Docker使用遇到问题Got permission denied while trying to connect to the Docker daemon socket解决方案

    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker. ...

  2. Cannot connect to the Docker daemon. Is the docker daemon running on this host?

    在centOS系统安装好了docker,想部署一个项目,但是发现运行docker info 时报错 问题 错误信息如下 Cannot connect to the Docker daemon. Is ...

  3. Docker源码分析(六):Docker Daemon网络

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part6 1. 前言 Docker作为一个开源的轻量级虚拟化容器引擎技术,已 ...

  4. Docker源码分析(四):Docker Daemon之NewDaemon实现

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part4 1. 前言 Docker的生态系统日趋完善,开发者群体也在日趋庞大 ...

  5. Docker源码分析(三):Docker Daemon启动

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part3 1 前言 Docker诞生以来,便引领了轻量级虚拟化容器领域的技术 ...

  6. docker 无法正常启动或版本信息会报错 Cannot connect to the Docker daemon at

    安装正常,但是docker version的时候会出现以下信息,这是为什么呢? 解决办法: 这是因为docker的engine 基于Device Mapper提供的一种存储驱动,而它又依赖与于devi ...

  7. Docker报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. ...

    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. ... 方法 sudo service docker resta ...

  8. Docker实践:Cannot connect to the Docker daemon.

    Docker实践:Cannot connect to the Docker daemon. 查看docker daemon是否在运行 [root@localhost openec]#  ps aux ...

  9. docker 配置文件:/etc/docker/daemon.json

    /etc/docker/daemon.json 是 docker 的配置文件,默认是没有的,需要我们手动创建,可配置项如下: [root@localhost ~]$ vim /etc/docker/d ...

  10. 【记录】Docker安装后出现 Cannot connect to the Docker daemon

    [记录]Docker安装后出现 Cannot connect to the Docker daemon 错误描述 分析及解决方案 解决 启动Docker 将登陆账户加入 Docker 组 配置开机启动 ...

最新文章

  1. Elasticsearch官档翻译——2 2 在Linux上启动服务
  2. usessl mysql_mysql数据库连接useSSL=true
  3. 小问题: windows组件调用失败,无法加载安装安装程序:Wbemupgd.dll
  4. linux怎么创建5个线程,简明Linux系统编程_5_创建线程(总第238期)
  5. 问题 1072: 汽水瓶
  6. Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow
  7. [swift] LeetCode 169. Majority Element
  8. C++之vs2017导出动态库失败
  9. 李洪强iOS开发之OC[011] - 有参方法的声明实现以及调用练习
  10. vue之仿网易严选详解
  11. 国际电话号码标准格式
  12. Cox比例风险回归(Cox ProportionalHazards Model) 到底选用哪种回归分析 r到底选择哪种回归分析 r选择生存分析还是cox分析
  13. python技巧积累
  14. 计算机自动关机启机唤醒设置,电脑在哪设置定时关机(如何设置电脑的自动关机和自动开机)...
  15. 计算机桌面工作提醒,电脑桌面怎么增加文字提醒?
  16. 计算机进去bios方式,电脑进入BIOS的两种实用方法
  17. java计算机毕业设计Internet快递柜管理系统(附源码、数据库)
  18. MacOS上BeyondCompare无限试用的方法
  19. U启动U盘启动盘制作
  20. 艺赛旗(PRA)根据制式模板批量生成 word 文件

热门文章

  1. 聚焦科技新能源关注环保天更蓝
  2. 爬虫学习2.2 使用xpath提取丁香园论坛的回复内容
  3. adb push与adb pull
  4. Datawhale--组队学习第12期--python爬虫基础学习---Task03:Task03:session和cookie、ip代理、selenium自动化 拔高:丁香园留言板爬取(2天)
  5. 计算机的输出原理,计算机原理及系统结构 输入输出设备.ppt
  6. AVB简介--第三篇:AVTP简介
  7. 项目管理中如何合理分配资源
  8. 自学网络安全?一般人我还是劝你算了吧
  9. 最新cydia安装包和依赖包
  10. html注释的爱情故事,才女李清照的爱情故事:才下眉头,却上心头