Docker v1.13 新功能

Docker 1.13 发布已经26天了,趁着今天想起系统密码,更新了一下系统,顺便体验一下新版本的功能。

因为我之前没有装过插件,一直都是乖乖用稳定版,所以像 docker plugin、docker stack这些子命令我都没有试过。因此本次升级没有卸载插件的步骤,不过你要是以前装了插件得先卸载,毕竟API变了。
参考:https://github.com/docker/docker/releases/tag/v1.13.0

Docker 1.13.1

新增哪些功能

从国内几家科技媒体的文章都是从这里粘贴复制的:

该版本更新内容较多,涉及到网络、插件、移除掉的 API & 客户端、运行时、安全性以及依赖等。
Docker 1.13有一千四百多个issue/pull request,五千多个commits,是Docker历史上最高的发布版本。这并不是一个简单的小版本变化,里面有大量的更新。

Top 10 新增功能

  • 正式支持服务栈:docker stack
  • 正式支持插件:docker plugin
  • 添加在Swarm集群环境下对密码、密钥管理的 secret 管理服务:docker secret
  • 增加命令:docker system
  • 可以直接使用 docker-compose.yml 进行服务部署
  • 添加 docker service 滚动升级出故障后回滚的功能
  • 增加强制再发布选项 docker service update –force
  • 允许 docker service create 映射宿主端口,而不是边界负载均衡网络端口
  • 允许 docker run 连入指定的 swarm mode 的 overlay 网络
  • 解决中国 GFW 墙掉 docker-engine apt/yum 源的问题

好了,逐一看看这新功能咯。

构建缓存

第一件事就是构建缓存,终于来了。这个功能在持续构建过程中太有用了,以前Docker只能自己自动利用本地构建缓存,现在可以指定构建缓存了,不过使用缓存的前提条件是曾经在本地构建过这个镜像。

例如,在合并请求中看到的例子:

docker pull myimage:v1.0
docker build --cache-from myimage:v1.0 -t myimage:v1.1 .

PS:另外发现Docker这个版本对镜像标签命名也做了限制,必须是“用户/仓库”的格式。

压扁 (squash) 镜像

这个怎么翻译?算了,跟风保留“压扁”。这个对我个人来说效果不是很明显,因为我总是把全部RUN指令写到一起,以此减少镜像体积。

但也总有人喜欢一句命令一个RUN指令,这样这个功能就很有用了。(话说这个写法真是不作不死。)

正确的做法当然是遵循 Dockerfile 最佳实践,应该把多个命令合并为一个 RUN,每一个 RUN 要精心设计,确保安装构建最后进行清理。这样才可以降低镜像体积,以及最大化的利用构建缓存。

不过Docker这么人性化,当然得为这些“一行一个RUN”的用户添加点功能,以此减少他们构建镜像的体积。

同样是 docker build 的参数:--squash,你可以理解为Docker自动把多个RUN在同一文件层执行了,不过保留了每一个RUN的构建历史。

要是这个功能完善之后,我也要转投“一行一个RUN”,毕竟省事很多啊。这个功能还在试验阶段。

构建镜像时指定网络

这个我很少遇到过啊,一般都是直接改/etc/hosts文件,反正也不复杂,不过要是在分布网络里就麻烦了点。比如这个情况

docker build --network指定网络就好,还是蛮有用的。

--build-arg问题修复

这个我也不怎么遇到,毕竟我很少有项目需要持续构建啊。以前的设定是--build-arg后面的变量一定要在构建过程中用到,现在即使制定了不用也可以,不会构建失败。

这样改的好处就是,在一些公司中持续构建过程中,不同Dockerfile使用不同的--build-arg参数,而持续构建中使用同一条构建指令(或者脚本)构建,1.12版本时是会报错的,1.13降为警告级别。

对于我这种一般用户而言直接写进 Dockerfile 里好了。

安装过程可以使用--mirror参数

这个是“专门”为天朝添加的功能,笑。

curl -sSL https://get.docker.com/ | sh -s -- --mirror AzureChinaCloud

上面的例子中安装Docker时会使用微软中国的镜像,至于安装后会不会自动添加仓库镜像源,我不知道啊。

docker run 直接加入集群

以前Swarm集群网络是不允许容器这样加入网络中的,因为有可能会破坏集群网络结构。

然后大伙又有这种需求,于是一种折中的办法就是添加一个--attachable参数。

$ docker network create -d overlay --attachable test_attach

老实说这样不太好的感觉,新加入的容器很容易就玩坏整个集群呐,坏笑。在服务设计时多考虑一下就好了啊,安全为上。

service create --publish格式变化

--publish protocol=tcp,mode=ingress,published=8080,target=80

我没有试过喽,-p已经满足我了。

network inspect显示连接节点

这个大大的好,以前只能靠第三方工具或者拐弯抹角地查看,现在直接在管理节点就可以看到了。

插件来了

1.12的这个实验特性真是蛮让人期待的。然而我暂时不想看,笑。

Checkpoint

检查点,有点像赛车,跑到中途一个检查点,备份记录一下当时的状态,然后继续前进,需要时可以从某个检查点的状态恢复。这么一看挺像快照的功能,要是进入正式版,估计Eclipse Che那里的快照命名会有改进。

docker stats显示容器名

这个反人类的设计终于有了人性化的改进,以前查看容器状态还得看容器ID,现在可以显示容器名了。

注意是可以,默认还是不显示的,需要定制输出格式:

docker stats --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}'

is-task过滤器

docker ps 的一个参数,可以显示哪些容器是集群服务的容器,哪些是直接运行起来容器。还是有用的功能,不过我自己对容器命名都蛮严格的,不会乱到不认识,笑。

docker ps -f 'is-task=true'

inspect升级

这个命令已经可以查看任何Docker对象了,是任何哦。
邪恶的我试了一下,同时存在名为nginx镜像、容器、网络、服务的情况下,inspect会优先查看名为nginx容器的信息,查看其它同名对象的信息就需要使用ID了。

直接启用实验功能

dockerd --experimental就可以直接启用实验功能了,简直测试实验功能的利器,不需要重装Docker了。

增加 docker system 命令

很多人在以前搞不懂自己的镜像到底占了多少空间、容器占了多少空间,卷占了多少空间。怎么删除不用的东西以释放资源。从 1.13 开始,Docker 提供了一组 system 命令来帮助系统管理上的问题。

docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              21                  3                   10.3 GB             8.564 GB (83%)
Containers          3                   3                   2 B                 0 B (0%)
Local Volumes       1                   1                   0 B                 0 B

那个RECLAIMABLE居然那么大,吓我一跳,后来一想我电脑在家就运行两个容器,所以其他镜像都被识别为可回收的了。

还有那个数据卷,我数据卷少说也有几百MB,不知道这里的结果是怎么计算出来的。

上面显示的列表中列出了镜像、容器、本地卷所占用的磁盘空间,以及可能回收的磁盘空间。比如,我们看到镜像有 123MB 的空间可以回收,从 1.13 开始,docker 提供了一组 prune 命令,分别是:
docker image prune:删除无用的镜像
docker container prune:删除无用的容器
docker volume prune:删除无用的卷
docker network prune:删除无用的网络
docker system prune:删除无用的镜像、容器、卷、网络

一个值得提醒的是,这个版本的命令有了很多调整,虽然保留了1.12时候的风格,但是Docker已经开始更加合理地分配子命令。

之前默认的 docker info,docker ps,docker rm,docker run 都开始归类于对应的 docker image, docker container, docker system 下了。

之前的命令依旧可以使用,会继续保持一段时间。但是从 1.13 开始,推荐使用各个子命令的版本了。


Swarm新加的几个功能都没看,有空再说吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容