Docker v1.13 新功能

Docker 1.13 發(fā)布已經(jīng)26天了,趁著今天想起系統(tǒng)密碼,更新了一下系統(tǒng),順便體驗(yàn)一下新版本的功能。

因?yàn)槲抑皼]有裝過(guò)插件,一直都是乖乖用穩(wěn)定版,所以像 docker plugin、docker stack這些子命令我都沒有試過(guò)。因此本次升級(jí)沒有卸載插件的步驟,不過(guò)你要是以前裝了插件得先卸載,畢竟API變了。
參考:https://github.com/docker/docker/releases/tag/v1.13.0

Docker 1.13.1

新增哪些功能

從國(guó)內(nèi)幾家科技媒體的文章都是從這里粘貼復(fù)制的:

該版本更新內(nèi)容較多,涉及到網(wǎng)絡(luò)、插件、移除掉的 API & 客戶端、運(yùn)行時(shí)、安全性以及依賴等。
Docker 1.13有一千四百多個(gè)issue/pull request,五千多個(gè)commits,是Docker歷史上最高的發(fā)布版本。這并不是一個(gè)簡(jiǎn)單的小版本變化,里面有大量的更新。

Top 10 新增功能

  • 正式支持服務(wù)棧:docker stack
  • 正式支持插件:docker plugin
  • 添加在Swarm集群環(huán)境下對(duì)密碼、密鑰管理的 secret 管理服務(wù):docker secret
  • 增加命令:docker system
  • 可以直接使用 docker-compose.yml 進(jìn)行服務(wù)部署
  • 添加 docker service 滾動(dòng)升級(jí)出故障后回滾的功能
  • 增加強(qiáng)制再發(fā)布選項(xiàng) docker service update –force
  • 允許 docker service create 映射宿主端口,而不是邊界負(fù)載均衡網(wǎng)絡(luò)端口
  • 允許 docker run 連入指定的 swarm mode 的 overlay 網(wǎng)絡(luò)
  • 解決中國(guó) GFW 墻掉 docker-engine apt/yum 源的問題

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

構(gòu)建緩存

第一件事就是構(gòu)建緩存,終于來(lái)了。這個(gè)功能在持續(xù)構(gòu)建過(guò)程中太有用了,以前Docker只能自己自動(dòng)利用本地構(gòu)建緩存,現(xiàn)在可以指定構(gòu)建緩存了,不過(guò)使用緩存的前提條件是曾經(jīng)在本地構(gòu)建過(guò)這個(gè)鏡像。

例如,在合并請(qǐng)求中看到的例子:

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

PS:另外發(fā)現(xiàn)Docker這個(gè)版本對(duì)鏡像標(biāo)簽命名也做了限制,必須是“用戶/倉(cāng)庫(kù)”的格式。

壓扁 (squash) 鏡像

這個(gè)怎么翻譯?算了,跟風(fēng)保留“壓扁”。這個(gè)對(duì)我個(gè)人來(lái)說(shuō)效果不是很明顯,因?yàn)槲铱偸前讶縍UN指令寫到一起,以此減少鏡像體積。

但也總有人喜歡一句命令一個(gè)RUN指令,這樣這個(gè)功能就很有用了。(話說(shuō)這個(gè)寫法真是不作不死。)

正確的做法當(dāng)然是遵循 Dockerfile 最佳實(shí)踐,應(yīng)該把多個(gè)命令合并為一個(gè) RUN,每一個(gè) RUN 要精心設(shè)計(jì),確保安裝構(gòu)建最后進(jìn)行清理。這樣才可以降低鏡像體積,以及最大化的利用構(gòu)建緩存。

不過(guò)Docker這么人性化,當(dāng)然得為這些“一行一個(gè)RUN”的用戶添加點(diǎn)功能,以此減少他們構(gòu)建鏡像的體積。

同樣是 docker build 的參數(shù):--squash,你可以理解為Docker自動(dòng)把多個(gè)RUN在同一文件層執(zhí)行了,不過(guò)保留了每一個(gè)RUN的構(gòu)建歷史。

要是這個(gè)功能完善之后,我也要轉(zhuǎn)投“一行一個(gè)RUN”,畢竟省事很多啊。這個(gè)功能還在試驗(yàn)階段。

構(gòu)建鏡像時(shí)指定網(wǎng)絡(luò)

這個(gè)我很少遇到過(guò)啊,一般都是直接改/etc/hosts文件,反正也不復(fù)雜,不過(guò)要是在分布網(wǎng)絡(luò)里就麻煩了點(diǎn)。比如這個(gè)情況。

docker build --network指定網(wǎng)絡(luò)就好,還是蠻有用的。

--build-arg問題修復(fù)

這個(gè)我也不怎么遇到,畢竟我很少有項(xiàng)目需要持續(xù)構(gòu)建啊。以前的設(shè)定是--build-arg后面的變量一定要在構(gòu)建過(guò)程中用到,現(xiàn)在即使制定了不用也可以,不會(huì)構(gòu)建失敗。

這樣改的好處就是,在一些公司中持續(xù)構(gòu)建過(guò)程中,不同Dockerfile使用不同的--build-arg參數(shù),而持續(xù)構(gòu)建中使用同一條構(gòu)建指令(或者腳本)構(gòu)建,1.12版本時(shí)是會(huì)報(bào)錯(cuò)的,1.13降為警告級(jí)別。

對(duì)于我這種一般用戶而言直接寫進(jìn) Dockerfile 里好了。

安裝過(guò)程可以使用--mirror參數(shù)

這個(gè)是“專門”為天朝添加的功能,笑。

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

上面的例子中安裝Docker時(shí)會(huì)使用微軟中國(guó)的鏡像,至于安裝后會(huì)不會(huì)自動(dòng)添加倉(cāng)庫(kù)鏡像源,我不知道啊。

docker run 直接加入集群

以前Swarm集群網(wǎng)絡(luò)是不允許容器這樣加入網(wǎng)絡(luò)中的,因?yàn)橛锌赡軙?huì)破壞集群網(wǎng)絡(luò)結(jié)構(gòu)。

然后大伙又有這種需求,于是一種折中的辦法就是添加一個(gè)--attachable參數(shù)。

$ docker network create -d overlay --attachable test_attach

老實(shí)說(shuō)這樣不太好的感覺,新加入的容器很容易就玩壞整個(gè)集群吶,壞笑。在服務(wù)設(shè)計(jì)時(shí)多考慮一下就好了啊,安全為上。

service create --publish格式變化

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

我沒有試過(guò)嘍,-p已經(jīng)滿足我了。

network inspect顯示連接節(jié)點(diǎn)

這個(gè)大大的好,以前只能靠第三方工具或者拐彎抹角地查看,現(xiàn)在直接在管理節(jié)點(diǎn)就可以看到了。

插件來(lái)了

1.12的這個(gè)實(shí)驗(yàn)特性真是蠻讓人期待的。然而我暫時(shí)不想看,笑。

Checkpoint

檢查點(diǎn),有點(diǎn)像賽車,跑到中途一個(gè)檢查點(diǎn),備份記錄一下當(dāng)時(shí)的狀態(tài),然后繼續(xù)前進(jìn),需要時(shí)可以從某個(gè)檢查點(diǎn)的狀態(tài)恢復(fù)。這么一看挺像快照的功能,要是進(jìn)入正式版,估計(jì)Eclipse Che那里的快照命名會(huì)有改進(jìn)。

docker stats顯示容器名

這個(gè)反人類的設(shè)計(jì)終于有了人性化的改進(jìn),以前查看容器狀態(tài)還得看容器ID,現(xiàn)在可以顯示容器名了。

注意是可以,默認(rèn)還是不顯示的,需要定制輸出格式:

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

is-task過(guò)濾器

docker ps 的一個(gè)參數(shù),可以顯示哪些容器是集群服務(wù)的容器,哪些是直接運(yùn)行起來(lái)容器。還是有用的功能,不過(guò)我自己對(duì)容器命名都蠻嚴(yán)格的,不會(huì)亂到不認(rèn)識(shí),笑。

docker ps -f 'is-task=true'

inspect升級(jí)

這個(gè)命令已經(jīng)可以查看任何Docker對(duì)象了,是任何哦。
邪惡的我試了一下,同時(shí)存在名為nginx鏡像、容器、網(wǎng)絡(luò)、服務(wù)的情況下,inspect會(huì)優(yōu)先查看名為nginx容器的信息,查看其它同名對(duì)象的信息就需要使用ID了。

直接啟用實(shí)驗(yàn)功能

dockerd --experimental就可以直接啟用實(shí)驗(yàn)功能了,簡(jiǎn)直測(cè)試實(shí)驗(yàn)功能的利器,不需要重裝Docker了。

增加 docker system 命令

很多人在以前搞不懂自己的鏡像到底占了多少空間、容器占了多少空間,卷占了多少空間。怎么刪除不用的東西以釋放資源。從 1.13 開始,Docker 提供了一組 system 命令來(lái)幫助系統(tǒng)管理上的問題。

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

那個(gè)RECLAIMABLE居然那么大,嚇我一跳,后來(lái)一想我電腦在家就運(yùn)行兩個(gè)容器,所以其他鏡像都被識(shí)別為可回收的了。

還有那個(gè)數(shù)據(jù)卷,我數(shù)據(jù)卷少說(shuō)也有幾百M(fèi)B,不知道這里的結(jié)果是怎么計(jì)算出來(lái)的。

上面顯示的列表中列出了鏡像、容器、本地卷所占用的磁盤空間,以及可能回收的磁盤空間。比如,我們看到鏡像有 123MB 的空間可以回收,從 1.13 開始,docker 提供了一組 prune 命令,分別是:
docker image prune:刪除無(wú)用的鏡像
docker container prune:刪除無(wú)用的容器
docker volume prune:刪除無(wú)用的卷
docker network prune:刪除無(wú)用的網(wǎng)絡(luò)
docker system prune:刪除無(wú)用的鏡像、容器、卷、網(wǎng)絡(luò)

一個(gè)值得提醒的是,這個(gè)版本的命令有了很多調(diào)整,雖然保留了1.12時(shí)候的風(fēng)格,但是Docker已經(jīng)開始更加合理地分配子命令。

之前默認(rèn)的 docker info,docker ps,docker rm,docker run 都開始?xì)w類于對(duì)應(yīng)的 docker image, docker container, docker system 下了。

之前的命令依舊可以使用,會(huì)繼續(xù)保持一段時(shí)間。但是從 1.13 開始,推薦使用各個(gè)子命令的版本了。


Swarm新加的幾個(gè)功能都沒看,有空再說(shuō)吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,873評(píng)論 15 147
  • 我終于沒有意外地長(zhǎng)成了自己最初想要的好人的模樣,也成了一個(gè)溫柔卻并不總能溫暖的女子。
    我行四方閱讀 160評(píng)論 0 0
  • 2017/9/30 星期六 從前有座山,山里沒有廟,只有一位邋遢的女巫。 女巫裹著毛絨絨的紅斗篷,雙手托腮看著正在...
    賣耳朵的木兔子閱讀 428評(píng)論 3 8
  • 0421晨讀:現(xiàn)代女性的成功秘密 女性可以走出家庭,可以活出自我,而不是活在社會(huì)的觀念里。 《向前一步》中女性成功...
    真墨流歌閱讀 199評(píng)論 0 1
  • 在走上坡路的時(shí)期,我們必須更加努力,才能看起來(lái)毫不費(fèi)力。 ——二璐 1 有人說(shuō),當(dāng)你感覺到人生困難,說(shuō)明你正在走上...
    二璐閱讀 652評(píng)論 0 52

友情鏈接更多精彩內(nèi)容