学习
实践
活动
专区
工具
TVP
写文章
专栏首页颇忒脱的技术博客Docker Daemon生产环境关键的几个参数

Docker Daemon生产环境关键的几个参数

一些docker daemon生产环境中要注意的参数配置。

本文介绍一些生产环境中dockerd要特别注意的参数,这些参数可以通过在dockerd命令行参数形式给,也可以通过在/etc/docker/daemon.json里配置。本文介绍的就是daemon.json配置方式。

在开始之前,请先查看/etc/docker/daemon.json是否存在,如果不存在则新建一个,内容是{}。然后你要懂JSON文件格式。

如何应用配置

下面所讲的配置最好在Docker安装完之后马上做,如果已经有容器运行了,那么先stop掉所有容器,然后再做。

修改完之后重启Docker daemon,比如在Ubuntu 16.04下:sudo systemctl restart docker.service

然后执行docker info来验证配置是否生效。

registry-mirrors

{
  "registry-mirrors": []
}

此参数配置的是Docker registry的镜像网站,国内访问docker hub有时候会抽风,所以配置一个国内的镜像网站能够加速Docker image的下载。

可以使用Daocloud加速器(需注册,使用免费)或者其他云厂商提供的免费的加速服务。它们的原理就是修改registry-mirrors参数。

dns

{
  "dns": []
}

Docker内置了一个DNS Server,它用来做两件事情:

  1. 解析docker network里的容器或Service的IP地址
  2. 把解析不了的交给外部DNS Server解析(dns参数设定的地址)

默认情况下,dns参数值为Google DNS nameserver:8.8.8.88.8.4.4。我们得改成国内的DNS地址,比如:

  1. 1.2.4.8
  2. 阿里DNS:223.5.5.5223.6.6.6
  3. 114DNS:114.114.114.114114.114.115.115

比如:

{
  "dns": ["223.5.5.5", "223.6.6.6"]
}

log-driver

Log driver是Docker用来接收来自容器内部stdout/stderr的日志的模块,Docker默认的log driver是JSON File logging driver。这里只讲json-file的配置,其他的请查阅相关文档。

json-file会将容器日志存储在docker host machine的/var/lib/docker/containers/<container id>/<container id>-json.log(需要root权限才能够读),既然日志是存在磁盘上的,那么就要磁盘消耗的问题。下面介绍两个关键参数:

  1. max-size,单个日志文件最大尺寸,当日志文件超过此尺寸时会滚动,即不再往这个文件里写,而是写到一个新的文件里。默认值是-1,代表无限。
  2. max-files,最多保留多少个日志文件。默认值是1。

根据服务器的硬盘尺寸设定合理大小,比如:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-files":"5"
  }
}

storage-driver

Docker推荐使用overlay2作为Storage driver。你可以通过docker info | grep Storage来确认一下当前使用的是什么:

$ docker info | grep 'Storage'
Storage Driver: overlay2

如果结果不是overlay2,那你就需要配置一下了:

{
  "storage-driver": "overlay2"
}

mtu

如果docker host machine的网卡MTU为1500,则不需要此步骤

MTU是一个很容易被忽略的参数,Docker默认的MTU是1500,这也是大多数网卡的MTU值。但是!在虚拟化环境下,docker host machine网卡的MTU可能不是1500,比如在openstack创建的虚拟的网卡的MTU是1450:

$ ip link
1: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether fa:16:3e:71:09:f5 brd ff:ff:ff:ff:ff:ff

当Docker网络的MTU比docker host machine网卡MTU大的时候可能会发生:

  1. 容器外出通信失败
  2. 影响网络性能

所以将Docker网络MTU设置成和host machine网卡保持一致就行了,比如:

{
  "mtu": 1450
}

验证:

$ ip link
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
    link/ether 02:42:6b:de:95:71 brd ff:ff:ff:ff:ff:ff

注意到docker0的MTU还是1500,不用惊慌,创建一个容器再观察就变成1450了(下面的veth是容器的虚拟网卡设备):

$ docker run -itd --name busybox --rm busybox
$ ip link
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP mode DEFAULT group default
    link/ether 02:42:6b:de:95:71 brd ff:ff:ff:ff:ff:ff
268: vethdf32b1b@if267: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master docker0 state UP mode DEFAULT group default
    link/ether 1a:d3:8a:3e:d3:dd brd ff:ff:ff:ff:ff:ff link-netnsid 2

在到容器里看看它的网卡,MTU也是1450:

$ docker exec busybox ip link
267: eth0@if268: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff

参考资料

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://segmentfault.com/blog/chanjar复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • EUREKA生产环境的参数如何优化?

    之前微服务项目的时候一直没有时间去总结,最近闲下来了,可以好好的把以前学习的微服务的知识和微服务的项目好好总结归纳一下了。

    技术从心
  • 从物理环境迁移到云环境的几个关键步骤

    随着公司企业加快向云计算迁移的步伐,许多公司发现自己面临这种境地:不得不弥补物理基础设施和云基础设施之间的差距,这就带来了新的挑战。IT部门拥有它认为很重要的应...

    静一
  • PCB厂家在生产PCBA时需注意的几个关键点!!!

    pcb板厂家必须严格控制电子元器件的采购渠道,一定是从大型贸易商,通过这些可以避免使用到二手材料及假冒材料的风险,除了前面讲的点pcb板厂家还需要专门设立PCB...

    高拓电子
  • 生产环境下的Docker:成功、挫败和教训

    Docker在2014年迎来了迅猛的发展,不过在年底传出了围绕Docker的一些声音,声称容器服务基础设施已达到了准备用于生产环境的程度。今年,Gartner等...

    静一
  • 生产环境下JVM调优参数的设置实例

    ◆ NewSize较大,old gen 剩余空间64m,一方面可能会带来old区容易增长到报警范围(监控数据显示oldgenused长期在50m左右,接近78%...

    小勇DW3
  • 开发经验:如何正确设置开发环境与生产环境的配置参数

    我们写代码时,一般会先在自己电脑上进行开发,然后把代码部署到服务器上。如果一段代码涉及到读写数据库,或者访问某些其他的线上服务接口,那么在开发时,为了不影响线上...

    青南
  • 服务器docker环境的几个小问题处理

    Docker 默认安装的情况下,会使用 /var/lib/docker/ 目录作为存储目录,用以存放拉取的镜像和创建的容器等。不过由于此目录一般都位于系统盘,我...

    用户7741497
  • 一种生产环境Docker Overlay Network的配置方案

    到manager节点上创建attachable的overlay network,名字叫做prod-overlay:

    颇忒脱
  • Docker 基础知识 - 在生产环境中运行您的应用 - 编排概述

    容器化流程的可移植性和可再现性意味着我们有机会跨云和数据中心移动和缩放我们的容器化应用程序。容器有效地保证了这些应用程序在任何地方都以相同的方式运行,从而使我们...

    用户8803964
  • 如何在 Kubernetes 环境中搭建 MySQL (二):在 cloud native 环境下配置 MySQL 的几个关键点

      MySQL 在 Kubernetes 环境中运行这件事情本身并不困难,最简单的方式就是找到 MySQL 的 Docker image,跑起来就行了,但是要做...

    用户2443625
  • Docker安全配置分析

    容器技术基于容器主机操作系统的内核,通过对CPU、内存和文件系统等资源的隔离、划分和控制,实现进程之间透明的资源使用。因此,容器主机的安全性对整个容器环境的安全...

    绿盟科技研究通讯
  • Docker容器实战:原理、架构与应用

    1.Docker,通过将运行环境和应用程序打包到一起,来解决部署的环境依赖问题,真正做到跨平台的分发和使用

    硬核项目经理
  • [docker](三)docker-client模式和daemon模式

    Docker命令对应的源文件是docker/docker.go,它的使用方式如下:

    baron
  • 如何使用 Kafka、MongoDB 和 Maxwell’s Daemon 构建 SQL 数据库的审计系统

    审计日志系统有很多应用场景,而不仅仅是存储用于审计目的的数据。除了合规性和安全性的目的之外,它还能够被市场营销团队使用,以便于锁定目标用户,也可以用...

    Spark学习技巧
  • Docker 小记 — Docker Engine

    捷义
  • 写给Java开发看的 Docker 干货(零基础部署Nginx MySQL SpringBoot)

    点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 |...

    芋道源码
  • Docker 架构中的几个核心概念

    2015 年 6 月 ,docker 公司将 libcontainer 捐出并改名为 runC 项目,交由一个完全中立的基金会管理,然后以 runC 为依据,大...

    田飞雨
  • 容器日志知多少 (1) Docker logs & logging driver

    本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。监控和日志历来都是系统稳定运行和问题排查的关键,在微...

    Edison Zhou
  • Docker Swarm部署应用的总结

    本文只是一种实际部署方案的例子,涉及到的技术有(除Docker/Docker Swarm外):

    颇忒脱

作者介绍

颇忒脱

上海树维信息科技有限公司架构师

上海树维信息科技有限公司 · 架构师 (已认证)

专栏

精选专题

活动推荐

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券