V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
daocloud
V2EX  ›  程序员

Docker 1.12 重磅推出,容器领域划时代

  •  
  •   daocloud ·
    DaoCloud · 2016-08-01 11:47:24 +08:00 · 5549 次点击
    这是一个创建于 3071 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Docker 1.12 在今年 6 月下旬的 DockerCon 2016 上就崭露头角,然而,却在 7 月底的今天才发布,真可谓"千呼万唤始出来"。如果了解 Docker 的 Roadmap ,就会发现此次大版本的变革,用“里程碑”和“划时代”来形容绝对不为过。总结而言,重大版本的亮点绝不容错过,归纳如下:

    • 原生支持编排功能, Swarm 集群蜕变为 SwarmKit ,融入 Docker Engine
    • 开发定义监控,支持 HEALTHCHECK ,拉近开发与运维距离,践行 DevOps 理念
    • VxLan 之外集成 MacVlan ,为满足容器网络落地,网络能力多样化
    • 容器负载均衡能力内核化, IPVS 的集成借力打力
    • 存储开始迈向分布式,存储生态迎来春天

    深入了解一个软件新版本的动向,往往可以借助版本的 ChangeLog ,下文将带领大家领略 Docker 1.12 版本相较之前的变化。从变化中嗅方向,从方向中探未来。

    镜像构建器

    • 在 Dockerfile 的定义规范中添加了新的指令“ HEALTHCHECK ”,用以支持用户定义的健康检查

    该功能直接允许开发者来定义自身程序的监控方式,完成应用的健康检查,弥合运维人员眼中监控与开发预期监控不匹配的鸿沟,此举将在监控领域给 DevOps 开启一盏明灯。

    • 在 Dockerfile 的定义规范中添加了新的指令“ SHELL ”,用以实现在 Dockerfile 中执行某个命令时,采用的具体 SHELL 类型
    • 在 Dockerfile 的定义规范中添加了新的指令 #escape= ,支持与平台架构相关的文件路径解析
    • 在".dockerignore"中添加对注释的支持
    • 在 Dockerfile 中添加对 UTF-8 格式的支持
    • 在 Dockerfile 和 .dockerignore 中选择忽略 UTF-8 BOM 字节的内容,如果存在的话。

    值得一提的是:该 BUG 的修复,源于 DaoCloud 公有云用户在使用镜像构建服务时,其 Github 代码仓库中的 Dockerfile ,是使用 Windows 平台上的 notepad 软件编辑而来,从而产生 UTF-8 BOM 。该用户通过运营工具 DaoVoice 第一时间反馈给 DaoCloud 工程师后, DaoCloud 迅速将该隐藏 BUG 汇报 Docker 社区并提交 PR 解决。

    Contrib

    • 为 CentOS 7 和 Oracle Linux 7 支持 seccomp
    • 在 systemd 单元中删除 MoutFlags 参数,以允许共享挂载传播

    镜像仓库 Distribution

    • 添加了两个 Docker Daemon 的运行参数 --max-concurrent-downloads--max-concurrent-uploads,使得下载镜像时,满足网络不支持多任务下载 /上传的场景。
    • 目前针对 Docker Registry 的所有操作都支持 ALL_PROXY 这个环境变量
    • 在用户执行 docker load 时, Docker Daemon 提供更多信息
    • 无论是下载还是上传的镜像,永远保存 registry 的镜像元数据

    日志

    • Syslog 日志驱动开始支持 DGRAM 套接字
    • docker logs 命令中添加 --details 选项,帮助用户获取日志标签
    • 使得 syslog 的日志收集器,可以获取环境变量与标签
    • 当创建容器时,继承 Docker Daemon 默认的日志参数
    • 在 syslog 的时间戳中添加一个额外的 syslog 格式选项 rfc5424micro,以便实现微秒解析
    • 从日志消息的标签中删除前缀 /docker,而是采用 {{.DaemonName}},这样的话可以保证让用户有权限来修改该前缀

    网络

    • 实现内嵌的虚拟 IP ,具体使用 IPVS 技术来完成,基于内部的负载均衡原则
    • 使用 ingress 的 overlay 网络实现路由网
    • 使用加密的 控制平面数据平面 ,来加强多节点 overlay 网络的安全性
    • 目前 libnetwork 的 MacVlan 驱动已经处于试验版本
    • docker network ls 命令中添加针对 driver 的过滤
    • docker ps --filter 命令中添加针对 network 的过滤
    • 为容器的 create,runnetwork connect 命令添加一个参数 --link-local-ip,以允许用户指定容器的内部连接地址
    • 添加网络标签过滤的支持
    • 在 Swarm-Mode 的 Overlay 网络模式中,删除了对外部 K/V 存储的依赖
    • 添加了容器的短 ID ,作为网络的默认别名
    • 修复了当使用生成的名字来重命名容器时存在的 DNS 问题
    • 同时允许 docker network inspect -f {{.Id}}docker network inspect -f {{.ID}} 来说明输出内容的不一致性

    试验性质的功能( experimental )

    • 实现新的plugin命令来管理各种插件,同时实现了该命令下的子命令 install,enbale,disable,rm,inspect,set

    Docker Engine API(v1.24) 以及 DockerCLI

    • 将原有的 docker 二进制文件,拆分为两个不同的二进制文件,分别为 docker(client) 以及 dockerd(daemon)
    • docker images --filter 命令添加两种类型的过滤筛选 beforeafter
    • docker search 命令添加了新的参数 --limit
    • docker search 命令添加了新的参数 --filter
    • docker info 的输出中添加了安全选项
    • docker info 的输出中添加了 insecure registry
    • 使用 TLS 用户信息,来扩展 Docker 的认证机制
    • devicemapper 方面,通过 docker info 展现 Thin Pool 的最小剩余空间
    • 目前 API 调用时,若 Docker Daemon 内部发生一个错误,则实现 API 返回一个 JSON 对象,使得 API 的实现更加一致
    • 避免了 docker run -i --restart 命令在 exit 时候经常会夯住的问题
    • 修复 API / CLI 之间关于主机名验证方面的差异
    • 修复 docker stats 命令关于内存展示的不一致性
    • 当请求被拒绝时,返回禁止返回码( 403 )
    • Windows 方面,修复了与 tty 相关的显示问题

    Docker Engine 运行时

    • 为 Docker Daemon 添加了一个 --live-restore 的参数,使得当 Docker Daemon 停止运行时,容器仍然可以保持运行,另外在 Docker Daemon 重新之后,又获取这部分容器的控制权
    • 添加了 OCI 兼容的容器运行时实现方案(通过 Docker Daemon 的 --add-runtime 参数来实现),同时可以在 createrun 命令中通过 --runtime 参数选择其中之一
    • 实现了新的镜像存储驱动 overlay2,该特性专门为 Linux 4.0+ 的环境服务,可以提供多种更为底层的目录实现
    • 实现新的 load 和 save 的镜像事件
    • 开始支持通过 systemd 来热加载 Docker Daemon 的配置参数
    • 为 btrfs 类型的存储驱动添加磁盘限额
    • 为 ZFS 类型的存储驱动添加磁盘限额
    • 支持在 docker run 命令中指定容器复用其他容器的 PID namespace :docker run --pid=container:<id>
    • 对齐默认 seccomp 文件中的被选择的能力( Capabilities )
    • 当 Docker Daemon 发生配置热更新时,实现事件 daemon reload
    • 在 Docker Daemon 运行过程中,在 pprof 中实现 trace 能力,用以显示进程的执行现状

    此 PR 的提交由 DaoCloud 的工程师提交, pprof 是 Golang 语言下非常方面的性能监控工具,此举可以有效提高 Docker Daemon 的运行时监控

    • 添加支持了 detach 事件
    • 为系统控制 sysctl 添加了 --sysctl 参数支持
    • docker rundocker create 命令中添加了参数 --storage-opt,以允许用户设置 devicemapper 的大小
    • 为 docker daemon 添加一个新的参数 --oom-score-adjust 并赋予默认值 -500,以保证在宿主机发生 OOM 状况时, docker daemon 和容器相比,容器更有可能被杀死
    • run,build,create,update 命令时,重新启动 -c 参数作为 --cpu-shares 的缩称
    • 在一次 eCryptfs 的挂载时,阻止使用 aufs 和 overlay 的存储驱动
    • 修复了 tmpfs 的挂载次序问题
    • 状态为 Created 的容器不再出现在 docker ps -a -f exited=0 命令的显示结果中
    • 修复了容器会始终处于 Removal In Progress 状态的问题
    • 当在 run / create 命令中没有指定命令时, HTTP 返回码改为 500 ,而不是 400
    • 修复了使用 --detach-keys 参数时的 BUG ,在这里当输入时 detach key 的一个前缀时,这种情况不会被保留
    • SELinux 标记功能会被自动禁用,假如容器开启了 Privileged 模式
    • 如果有 Volume 挂载进入一个容器,那么 /etc/hosts,/etc/resolv.conf,/etc/hostname 不再是 SELinux 标记的
    • 修复了 --tmpfs 和挂载参数之间的不一致
    • 修复了 Docker Daemon 在启动时有可能存在的夯住的问题
    • 在某些场景下,忽略 SIGPIPE 时间,从而防止 journald 重启时有可能造成的 daemon 崩溃
    • 修复了 docker stats 命令陈列容器发生错误时,容器不能被删除的 BUG
    • 修复了当 docker daemon 重启时,on-failure 重启策略失效的 BUG
    • 修复了当一个容器使用另一个容器网络时,docker stats 命令失效的 BUG

    编排功能 Swarm 模式

    • 实现了一个新的 swarm 命令来管理 swarm ,其中管理的子命令有 init,join,leaveupdate
    • 实现了新的 service 命令来管理与 swarm 相关的服务,其中实现的子命令有 create,inspect,update,removetasks
    • 实现了新的 node 命令来支持管理集群中的 Docker Engine ,其中实现的字命令有 accept,promote,demote,inspect,update,tasks,lsrm
    • 实现了试验性的两个命令 stackdeploy,用以管理部署多服务融合的分布式应用

    虽然 docker stack 命令目前仍然处于试验版本,但是 DaoCloud 的工程师已经在该功能中发现 Issue 并提交了不少 PR 。帮助 Docker 用户尽体验完善的容器编排 stack 功能。

    Volume 存储卷

    • 为存储卷 Volume 添加了范围属性 localglobal,和网络的范围属性类似
    • 允许存储驱动提供了一个 Status
    • 为存储卷添加 name/driver 的过滤支持
    • Mount / Unmount 操作会收到一个不透明的 ID ,来允许存储卷驱动曲风两个不同的调用者
    • 修复了在某种稀有场景下阻止删除存储卷 volume 的问题
    • Windows ,支持 host-path 的自动创建来匹配 Linux 的操作方式

    功能弃用

    Docker Daemon 的发展历程中,对于新功能的加入,和旧功能的删除都有着严谨的态度。对于即将弃用的功能, Docker 首先会将其设置为 deprecated,随后在过去的若干时间之内再将其移除,给予用户充足缓冲区的同时,也保证了代码的整洁程度。

    • 环境变量 DOCKER_CONTENT_TRUST_OFFLINE_PASSPHRASEDOCKER_CONTENT_TRUST_TAGGING_PASSPHRASE 已经被重命名为 DOCKER_CONTENT_TRUST_ROOT_PASSPHRASEDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
    • 删除了日志选项 syslog-tag,gelf-tagfluentd-tag,从而支持更通用的 tag 日志选项
    • 删除了被弃用的功能, 也就是在 API 端,容器启动时传递 HostConfig 参数
    • 删除了 docker tag 命令中的 -f/--force 参数
    • 删除了被遗弃的 /containers/<id|name>/copy 的 URL
    • 弃用了 docker import 命令中老的三个参数的形式。
    15 条回复    2016-08-02 08:01:28 +08:00
    USCONAN
        1
    USCONAN  
       2016-08-01 12:31:07 +08:00
    OMG 。。 TLDR
    leopardwei
        2
    leopardwei  
       2016-08-01 12:45:16 +08:00
    学习中...
    adoyle
        3
    adoyle  
       2016-08-01 13:05:50 +08:00
    鼓掌
    shinko
        4
    shinko  
       2016-08-01 13:31:14 +08:00
    听说 Docker 是从 lxc 出来的,最近发现 lxc 好好用啊。 Docker 还没接触
    kideny
        5
    kideny  
       2016-08-01 14:42:24 +08:00
    听王垠大师说, shell 这样的语言也能开发出 docker 这样的工具。从此以后,觉得 docker 也不过如此。。。
    chenwl
        6
    chenwl  
       2016-08-01 15:07:21 +08:00
    @kideny 这么“迷信”人。。。搞出东西是真了不起,只是口头的我们只会回敬奉承。
    aisk
        7
    aisk  
       2016-08-01 15:11:31 +08:00
    @kideny 王垠大师原意是想黑一把 go ,结果被你解读成了黑 docker 。
    aisk
        8
    aisk  
       2016-08-01 15:13:08 +08:00   ❤️ 1
    @kideny 你知道吗,只用四个碱基对就可以实现地球上任何生命,是不是觉得地球生命也不过如此了?
    xjtlujoe
        9
    xjtlujoe  
       2016-08-01 15:20:48 +08:00
    尝试学习 docker 好久,还是没入门。。
    knightdf
        10
    knightdf  
       2016-08-01 15:39:55 +08:00
    昨天装了个准备玩玩
    zacard
        11
    zacard  
       2016-08-01 17:03:48 +08:00
    nice
    mahone3297
        12
    mahone3297  
       2016-08-01 17:22:23 +08:00
    @aisk 》你知道吗,只用四个碱基对就可以实现地球上任何生命,是不是觉得地球生命也不过如此了?
    哈哈,这个反驳说的好!有点意思。
    Owenjia
        13
    Owenjia  
       2016-08-01 17:47:48 +08:00
    升到 1.12.0 之后启动报错:`Your kernel does not support cgroup blkio ... ... `,
    明明 BLK_CGROUP 是开启了的……搜索了下,没找到解决方案,只好先退回 rc4 了。
    9hills
        14
    9hills  
       2016-08-01 17:53:29 +08:00
    另外, Mac 版 Docker 大改版,使用体验提升
    windyboy
        15
    windyboy  
       2016-08-02 08:01:28 +08:00
    相对于 docker ,我现在更感兴趣的是 mesos
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2153 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 01:26 · PVG 09:26 · LAX 17:26 · JFK 20:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.