Docker 17.06社群版釋出,新版本功能特性介紹
今天我們釋出了Docker CE 17.06,它包含了諸多新特性、優化和bug修復。我們在四月份的DockeCon上公佈了Moby專案,Docker CE 17.06是第一個完全構建在它基礎上的Docker版本。變更日誌中能看到完整的更新列表,我們來看看它的一些新特性。我們也為這篇文章製作了一個視訊版本。
多階段構建
17.06 CE最大的特性是它的多階段構建(multi-stage builds),它最初在四月的DockerCon被公佈,現在已經達到了穩定版本。多階段構建能從一個Dockerfile中構建出更加簡潔、體積更小的Docker映象。
多階段構建通過構建過渡映象併產生輸出。這樣就能在一個過渡映象中編譯程式碼,在最終的映象中只使用它的輸出。例如,Java開發者通常使用Apache Maven來構建應用,但是執行應用卻不需要Maven。多階段構建能大幅度的減小映象的體積:
REPOSITORY TAG IMAGE ID CREATED SIZE
maven latest 66091267e43d 2 weeks ago 620MB
java 8-jdk-alpine 3fd9dd82815c 3 months ago
來看一個能建立店鋪首頁的AtSea示例應用(https://github.com/dockersamples/atsea-sample-shop-app):AtSea使用了多階段構建,幷包含兩個過渡階段:用一個node.js基礎映象構建ReactJS應用,用一個Maven基礎映象將Sprint Boot應用編譯成單個映象。
FROM node:latest AS storefront
WORKDIR /usr/src/atsea/app/react-app
COPY react-app/package.json .
RUN npm install
COPY . /usr/src/atsea/app
RUN npm run build
FROM maven:latest AS appserver
WORKDIR /usr/src/atsea
COPY pom.xml .
RUN mvn -B -f pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve
COPY . .
RUN mvn -B -s /usr/share/maven/ref/settings-docker.xml package -DskipTests
FROM java:8-jdk-alpine
WORKDIR /static
COPY –from=storefront /usr/src/atsea/app/react-app/build/ .
WORKDIR /app
COPY –from=appserver /usr/src/atsea/target/AtSea-0.0.1-SNAPSHOT.jar .
ENTRYPOINT [“java”, “-jar”, “/app/AtSea-0.0.1-SNAPSHOT.jar”]
CMD [“–spring.profiles.active=postgres”]
最終的映象大小隻有209M,其中不包含Maven或node.js。還有其他的一些構建器方面的優化,包括在FROM指令中使用構建時引數。
日誌和指標
指標
目前通過一個daemon的API端點提供日誌的支援。可以將docker的/metrics端點暴露給外掛:
$ docker plugin install –grant-all-permissions cpuguy83/docker-metrics-plugin-test:latest
$ curl http://127.0.0.1:19393/metrics
這個外掛僅用於示範。它在主機的網路上運行了一個反向代理,能將請求轉發給外掛中的本地的指標套接字。在真實場景中,可能會將收集的指標資料傳送給外部的服務,或者使它可以被一個服務如Prometheus訪問並收集。注意儘管指標外掛在非實驗性的daemon中可以使用,指標標籤(metrics label)仍應該被看作是實驗性的,可能在Docker未來的版本中發生改動。
日誌驅動外掛
添加了對日誌驅動器外掛的支援。
Service日誌
docker service logs從實驗版本改進到了穩定版,你可以輕鬆地獲取Swarm上執行的一個服務的完整日誌。同時也添加了服務中單個任務日誌的端點。
網路
Service中節點本地的網路支援
Docker支援很多的網路選擇。在Docker 17.06 CE中,可以將服務追加到節點本地的網路(node-local networks)。這包括如Host、Macvlan,IPVlan,Bridge和本地作用域的外掛。例如對於一個Macvlan網路,可以在worker節點上建立一個節點特定的網路配置,然後在manager節點上建立一個加入了這些配置的網路:
[Wrk-node1]$ docker network create —config-only —subnet=10.1.0.0/16 local-config
[Wrk-node2]$ docker network create —config-only —subnet=10.2.0.0/16 local-config
[Mgr-node2]$ docker network create —scope=swarm —config-from=local-config -d macvlan mynet
[Mgr-node2]$ docker service create —network=mynet my_new_service
Swarm Mode
Swarm mode添加了很多的新特性,這裡是一部分:配置物件
swarm mode的一個新的配置物件,允許安全地像傳遞密碼一樣傳遞配置資訊:
$ echo “This is a config” | docker config create test_config –
$ docker service create –name=my-srv —config=test_config …
$ docker exec -it 37d7cfdff6d5 cat test_config
This is a config
證書輪換的優化
Swarm mode中內建的公鑰基礎設施(PKI)系統使得可以安全地部署一個容器排程系統。Swarmz中的節點使用雙邊TLS來認證、授權和加密他們之間,以及和Swarm其他節點的通訊。因為這些都依賴於證書,所以經常輪換很重要。自從Swarm mode伴隨Docker 1.12釋出以來,已經能以一小時一次的頻次來安排證書輪換。有了Docker CE 17.06,添加了立即強制證書輪換的一次性操作:
docker swarm ca –rotate
Swarm Mode事件
docker events可以用來從Docker中獲取實時的資訊。在編寫自動化和監控應用時很有用。但是直到Dcoker CE 17.06,都不支援swarm mode的事件。現在docker events將會返回服務、節點、網路和和secret的資訊。
專用的資料路線
docker init中添加了新的–datapath-addr標籤,可以把swarm mode的管理任務和應用傳遞的資料隔離開來。這能把叢集從IO貪婪的應用中拯救出來。如你用這種方式初始化叢集:
docker swarm init —advertise-addr=eth0 —datapath-addr=eth1
叢集管理的流量(Raft、grpc和gossip)將會通過eth0,而服務將會彼此通過eth1來通訊。
桌面版本
Docker for Mac和Docker for Windows添加了三個新特性:
GUI中新增了重置Docker資料而不需要丟失所有的設定
現在重置資料不會丟失設定。
為主機新增一個實驗性的DNS
如果在Docker for Mac或者Docker for Windows上執行容器,並且想訪問其他的容器,你可以使用一個新的實驗性主機:docker.for.mac.localhost和docker.for.win.lcoalhost來訪問開放的埠。例如:
$ docker run -d -it -p 80:80 nginx
9a41b199e86cc4730f470aba1091530cfdc26d6f956964492b0d0b06a0ab9046
$ docker run -it curlubuntu
[email protected]:/# curl docker.for.mac.localhost:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href=”http://nginx.org/” rel=”external nofollow” target=”_blank”>nginx.org</a>.<br/>
Commercial support is available at
<a href=”http://nginx.com/” rel=”external nofollow” target=”_blank”>nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[email protected]:/#
用來認證登錄檔訪問的登入證書
可以在Docker for Mac和Docker for Windows中新增證書來訪問登錄檔,而不僅僅是使用使用者名稱和密碼。這能讓訪問Docker Trusted Registery和開源的登錄檔和其他任何的註冊應用快速而簡單。
雲版本
Cloudstor卷外掛可以在Docker for AWS和Docker for Azure中使用。在Docker for AWS中,對於持久化卷(對於全域性的EFS和可新增的EBS)的支援現在是穩定的了)。並且我們能跨可用區支援EBS卷。
對於Docker for Azure來說,我們嚇死你在支援不部署到Azure Gov. 通過Cloustor支援永續性卷現在是穩定的,可以通緝你廣化寺用在Azure Public和Azure Gov中。
廢棄
在dockerd的命令列中,–api-enable-core標識已經被廢棄很久了,而採用–api-cors-header。對於–api-enable-cors還沒有完全去掉。
Ubuntu 12.04 “precise pangolin”已經完結了生命週期,所以它現在不是Docker支援的作業系統。Ubuntu的後期版本仍舊是支援的。
譯文轉載公眾號:Docker;原文連結:https://blog.docker.com/2017/06/announcing-docker-17-06-community-edition-ce/