「Docker 1.10.0 版本」猴年震撼发布!

jopen 8年前

Docker 粉们,是否还记得上一个 Docker 大版本的发布是什么时候?你的记忆是否已经模糊?

答案是: 10 月 14 号

在中国春节即将到来之际,Docker 官方发布了跨时代的 Docker 1.10.0 版本,着实为猴年的到来献上了一份大礼。

如果说 Docker 1.9.0 的 overlay 网络意味着 Docker 在集群能力方面的质的飞跃,那么这次发布的 Docker 1.10.0 更是在多个方面实现重大突破。

总体而言,我认为这次新发布的 Docker 1.10.0 主要有以下这几方面意义非凡的变化和看点:

  1. Docker Engine 支持配置热更新,容器与 Docker Daemon 的耦合性大大降低
  2. Docker API 的完善程度稳步上升,容器隔离维度更细致、更全面
  3. Docker 安全划时代地支持了 User Namespace 与 seccomp,安全程度直逼虚拟机
  4. 镜像格式首推「内容寻址方式」,可以做到 Docker 镜像的全球唯一性,镜像的安全与存储都有大的改观
  5. 网络能力,无论单机,还是跨主机,功能逐渐完善,成熟度稳步提升,发展之迅速不得不令人佩服
  6. 稍显惋惜的是,传统的容器管理工具 LXC 即将退出 Docker 的舞台,伴随 Docker 接近三年的时间,终于被更完善的容器管理方案取代,同时 Docker 的飞速发展以及追求卓越也一览无余

看完 Docker 1.10.0 的主要变化,我们来看一下这一版本更为细节的变化,相信 Docker Engine、安全、Distribution、网络、日志、存储卷 Volume 等多方面,总有一款适合您。详情请见下文:

1. Docker Engine(Runtime)

  • 开发了新命令  docker update ,允许用户更新运行中容器的资源限制(对于资源的重分配意义很大,后期可以考虑集成)
  • 为  docker run 命令添加 flag 参数 --tmpfs ,用于为容器挂载一个内存文件系统,便于文件的快速读写
  • docker images 命令添加 flag 参数 --format
  • 允许用户在文件中配置 Docker Daemon 的运行参数,并通过 SIGHUP 信号对其进行热加载,换言之,Docker 开始支持动态加载配置参数
  • 更新  docker events  命令的内容输出,使其包含更多的元数据以及事件类型;但是,需要注意的是,此改动完全兼容 Docker 的 API,但是在 Docker CLI 中仍未支持
  • 为  docker run  命令添加 flag 参数 --blkio-weight-device
  • 为  docker run  命令添加 flag 参数 --device-read-bps--device-write-bps ,用于磁盘 I/O 的读写 BPS
  • 为  docker run  命令添加 flag 参数 --device-read-iops--device-write-iops ,用于磁盘 I/O 的 iops
  • 为  docker run  命令添加 flag 参数 --oom-score-adj ,用于容器进程发生 oom 现象时,如何选择 kill 进程的评分依据
  • 为命令  runattachstart  以及  exec  添加 flag 参数 --detach-keys ,以此来覆盖从容器退出的的默认键盘键,比如使用 Docker 客户端自定义的 ctrl+a 来作为这些命令的 ESC 键
  • 为  docker rundocker create  以及  docker build  命令添加 --shm-size ,用于动态内存文件系统的大小(/dev/shm 等同于 tmpfs)
  • 丰富  docker info  命令的输出内容,为其添加运行容器的数目,停止容器的数目以及挂起容器的数目
  • 丰富  docker info  命令的输出内容,为其添加操作系统类型以及机器结构
  • 为  docker daemon  命令添加 flag 参数 --cgroup-parent ,从而为所有容器设置父 cgroup,即挂载于制定的 cgroup 路径下
  • 为  docker cp  命令添加 flag 参数 -L ,使得  cp  命令不是仅仅拷贝符号链接,而是拷贝符号链接真实指向的内容
  • 新增过滤规则  status=dead ,使命令  docker ps  的输出更符合用户需求
  • 更改  docker run  命令的返回码(exit code),从而区分在命令返回的原因究竟是 Docker Engine 的错误,还是容器内部应用自身的错误
  • 扩展  docker events  命令中添加  --since  和  --util  参数后的内容输出,使其支持时区以及纳秒
  • 为  docker stats  命令添加 flag 参数  -a/--all ,用于显示运行中容器以及停止容器的资源使用
  • 将默认的 cgroup-driver 设置为  cgroupfs
  • 当使用  docker build -t  命令为某一镜像设置标签时,Docker Daemon 触发一个 tag 事件;换言之,Docker Daemon 新支持一种 tag 事件
  • 重新启动 Docker Daemon 时,尽最大的努力来合理安排 link 容器的启动顺序
  • 允许  docker build  命令为镜像设置多个标签(tag)
  • 对任意 url 请求添加 OPTIONS 请求,而不是修改跨域存在的问题
  • 修复  docker build  命令的 flag 参数 --quiet ,使其真正意义上实现 quiet,即不输出构建过程的内容
  • 修复命令  docker images --filter dangling=false ,现在真正意义上显示的是所有的 non-dangling 镜像
  • 修复命令  docker volumes ls --filter dangling=false ,现在真正意义上显示的是所有的 non-dangling 的存储卷
  • 修复重启容器时因为容器内部进程长时间处理 SIGTERM 信号未果儿存在的资源竞争 BUG
  • Docker Daemon 中加入了 IBM 公司的的共享文件系统 GPFS
  • 修复 Bug,使得 volume driver 不允许被容器化
  • 删除容器过程中,不删除有命名的挂载点
  • 修复阻止容器启动的某些不知名 Bug
  • 禁止在重启过程中对容器执行  docker exec  操作
  • devicemapper 方面,当 Docker Daemon 重启过程中 --storage-opt dm.basesize 参数的增长会导致基础设备存储空间的增长

2. 安全

  • 为 Docker Daemon 命令添加 flag 参数–userns-remap,用以支持 Linux Namespace 中的用户命名空间(User Namespace),之前 Docker 对于用户命名空间的支持仅仅存在于 Docker 试验版
  • docker run 命令的 flag 参数 --security-opt 中,添加对自定义 seccomp 文档的支持,主要用户对容器应用在系统调用方面实现沙箱化
  • 为 Docker 添加默认的 seccomp 文档,在容器的系统调用方案实现更为细粒度的隔离
  • 为  docker daemon  命令添加 flag 参数 --authorization-plugin ,用以支持自定义的访问控制列表(ACL)
  • 当用户使用 BTRFS 时,允许用户在容器中运行 SELinux

3. Distribution

  • 为 AuthConfig 数据结构添加一个名为 registryToken 的属性。该 Token 属性允许 API 客户端从一个镜像仓库中获取用户的认证 token,然后将 token 直接发给远程 API
  • 对镜像和镜像层实现内容寻址的存储方式。内容寻址指的是,通过镜像层的内容来唯一的决定一个镜像的 ID,从而保证镜像的全局唯一性。需要注意的是:当 Docker 第一次运行的时候,会有一个对原有镜像进行格式转换的过程。此过程很可能会占用很长时间,主要取决于当前 Docker Daemon 所管理镜像以及容器的数目大小。从此,镜像中不再有  parent image  的概念,而是指向一系列的镜像层引用。同时  docker load/docker save  的压缩包现在会包含内容寻址镜像的配置文件
  • 支持新的 menifest 格式(schema2)
  • 对镜像下载和镜像上传做了众多改善,比如:性能的提高,下载失败时的重试机制,客户端失联的取消操作等
  • 对镜像仓库 v1 协议的回调限制
  • 新版的 Notary 支持,其中包含了客户端的 pkcs11。P.S. notary 是 Docker 一款官方推出的在客户端和服务端通过受信集合来交互的工具
  • 修复 Bug,此 Bug 在先前的版本中出现时会导致 Docker Daemon 因为等待一个并不存在的进程去下拉镜像而僵死

4. 网络

  • 对于容器而言,使用基于 DNS 的发现机制,取代原先的 /etc/hosts 方式
  • 对  docker network connect  命令中添加网络方面的别名,如 --net-alias ,以及  docker run  命令时的 --alias
  • 为  docker run  以及  docker network connect  命令添加参数 --ip--ip6 ,用以在一个网络中为容器自定义 IP
  • 为  docker network create  命令添加参数 --ipam-opt ,用于传入自动的 IP 地址管理(IPAM)的选项
  • 在  --cluster-store-opt  参数中添加  kv.path
  • 在  --cluster-store-opt  参数中添加  discovery.heartbeat  和  discovery.ttl  参数,用于配置服务发现的 TTL 以及心跳周期
  • 为  docker network inspect  命令添加  --format  参数
  • 为  docker network connect  命令添加  --link  参数,用以提供容器级别的别名
  • 通过远程 IP 地址管理器(IPAM)插件的形式
  • 为  docker network disconnect  命令添加  --force  参数,用以强制容器从某个 network 中断开连接
  • 在 Linux 内核版本 3.10+ 上,使用内嵌的 overlay 驱动来完成跨主机的网络互联
  • 在用户定义的 network 中,支持在  docker run  命令中使用  --link  参数
  • 扩展  docker network rm  命令,使其有能力一次删除多个 network
  • 在  docker inspect  命令的输出内容中添加所有容器的名称
  • 在  docker network inspect  命令中,加入为用户自定义网络自动生成的子网地址
  • 为  docker network ls  命令添加 flag 参数  --filter ,用以隐藏预先定义的 networks
  • 支持已停止容器的 network 连接/断开功能
  • 在  docker inspect  命令的返回结果中添加 network id
  • 修复 MTU 的 bug,之前版本 Docker 在有两条或者两条以上路由记录时启动就会失效
  • 为容器修复重复 IP 地址的 bug
  • 修复了有时 Docker Daemon 在创建默认网络时存在的 bug
  • 在使用 --net=host 参数时,不为容器替换 127.0.0.1 的域名服务器地址

5. 日志

  • 新增日志驱动 Splunk
  • 在 TCP+TLS 的基础上,完善对 Syslog 的支持
  • 扩展 docker logs --since--until 命令,用以支持纳秒
  • 扩展日志驱动 awslogs ,使其当 Docker Daemon 在 AWS EC2 上运行时,可以自动监测正确的 Amazon CloudWatch 的日志时区

6. 存储卷Volumes

  • 为 Docker 的存储卷添加设置 mount propagation mode 的支持
  • 为存储卷插件的 API 添加 lsinspect 接口
  • 修复了不能从命名存储卷中拷贝数据的 bug
  • 允许外部存储卷驱动管理异步存储卷

7.镜像构建器(builder)

  • .dockerignore 文件中添加对 ** 的支持,实现通配多级目录
  • 修复 Dockerfile 中对 UTF-8 编码字符的处理
  • 修复从标准输入读取内容时的权限问题

8.客户端

  • 通过使用 DOCKER_API_VERSION 环境变量来支持API版本覆盖的支持

9.MISC

  • systemd:在systemd服务的配置文件中,为 LimitNPROC 添加 TaskMax 参数

10.遗弃

  • 从 Docker Daemon 移除对 LXC 的支持,在 docker 1.8 版本时,Docker 用来管理容器的驱动之一——LXC 驱动就已经被标记为 deprecated,现在此驱动已经被移除
  • 在  docker daemon  命令中移除 flag 参数 --exec-driver ,因为此驱动已经不再会被使用
  • 移除部分 Docker CLI 方面的参数,比如(-rm,选择用–rm来替代)
  • 在容器启动的 API 中遗弃数据结构 HostConfig
  • 由于某些特定 Linux 版本发行版项目的终止,从而遗弃这些项目下 docker 软件包的支持;比如 Fedora 21 和 Ubuntu 15.04(vivid)
  • 遗弃  docker tag  命令的  -f  参数
</div> </div>

来自: http://blog.daocloud.io/docker-1-10-0-release/