一、修改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实战-Docker Daemon相关推荐

  1. Docker实战 (docker swarm的应用,docker集群的构建,在docker集群中部署服务)

    Docker实战 ----docker swarm的应用,docker集群的构建,在docker集群中部署服务 转载来源:https://blog.csdn.net/No_red/article/de ...

  2. Docker(十):Docker实战 Docker 安装 Nginx

    Docker 安装 Nginx Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务 . 1.查看可用的 Nginx 版本 访问 Ngin ...

  3. Docker 实战教程之从入门到提高 (四)

    本系列的前三篇文章,我们学习了如何在 Ubuntu 操作系统安装 Docker,并且通过实战练习,了解了 Docker 和宿主机操作系统文件目录互相隔离的实现原理,以及 Docker Volume 的 ...

  4. (12)自定义数据流(实战Docker事件推送的REST API)——响应式Spring的道法术器...

    本系列文章索引<响应式Spring的道法术器> 前情提要 Reactor 3快速上手 | Spring WebFlux快速上手 | 响应式流规范 本文 测试源码 | 实战源码 2.2 自定 ...

  5. 【云原生之Docker实战】使用Docker部署ShowDoc文档工具

    [云原生之Docker实战]使用Docker部署ShowDoc文档工具 一.ShowDoc介绍 1.ShowDoc简介 2.ShowDoc功能 二.检查docker版本 三.检查docker状态 四. ...

  6. 【云原生之Docker实战】使用Docker部署File Manager文件管理系统

    [云原生之Docker实战]使用Docker部署File Manager文件管理系统 一.File Manager简介 1.File Manager简介 2.File Manager特点 二.检查宿主 ...

  7. Docker教程(Docker实战)

    Docker快速入门教程 **欢迎关注公众号[程猿薇茑]** [仅需一次订阅,作者所有专栏都能看] 推荐[Kafka]https://bigbird.blog.csdn.net/article/det ...

  8. Marathon+Mesos+Docker实战

    Marathon+Mesos+Docker实战 Apache Mesos概述 Apache Mesos是一款基于多资源调度的开源集群管理套件,使容错和分布式系统更加容易使用实现,采用Master/Sl ...

  9. 【实战Docker】SVN服务

    [实战Docker]SVN服务 2019.06.05 ------------------------------------------------------------------------- ...

最新文章

  1. IdentityServer4关于多客户端和API的最佳实践【含多类型客户端和API资源,以及客户端分组实践】【中】...
  2. OSPF 提升 一 ----基础
  3. 深度学习在单图像超分辨率上的应用:SRCNN、Perceptual loss、SRResNet
  4. AngularJS控制div隐藏或显示-ng-show
  5. JAVA中list.contains()方法,要重写equals(),hashcode()方法
  6. 转 Linux调优方案,sysctl.conf的设置
  7. 如何查看python标准库_python标准库
  8. 【札记】二 先天八卦与后天八卦
  9. virt-manager 键盘错位解决
  10. -bash: /usr/bin/rm: 参数列表过长
  11. 基于Spring Boot的农家乐点餐系统
  12. Linux升级glibc
  13. 软考高级-信息系统管理师之项目管理基础(最新版)
  14. 微信工具箱小程序源码-多功能集合一体工具箱
  15. [网络工程师]-路由协议-OSPF协议
  16. Linux系统:基础IO
  17. Python流程控制下:循环语句
  18. wampserver下载及用法
  19. 吴翰清讲web安全--XSS攻击
  20. 夜幕团队成员的工资究竟几 K ?

热门文章

  1. 关于微服务下的负载均衡
  2. android+分享微信朋友圈带编辑功能,新功能 微信6.6.6安卓版发布:朋友圈编辑可保留...
  3. 第二章Linux 基本命令操作
  4. 4用计算机显示内存不足,必成电脑:解决电脑提示“内存不足”四种方法-电脑内存不足怎么办...
  5. MacOS M1 使用 Homebrew 安装 Mysql
  6. alertdialog报错_alertdialog创建
  7. 滴滴顺风车整改“反思”背后,哈啰已强势崛起
  8. python精彩小视频_Python爬虫:全民小视频爬取,你想到了什么?
  9. progressdialog进度框_使用ProgressDialog创建进度对话框
  10. 自媒体怎么赚钱,2级企鹅号自媒体怎么过3级开通原创