每周一、三、五 與您不見不散!
Docker for Windows Desktop 18.02 新版本中最大的亮點之一就是擁有自動化的 Kubernetes 集群選項,它可以讓您在 windows 桌面系統上使用 Linux 容器來為您所喜歡的 Kubernetes 工具提供原生的支持。這是一件了不起的事!您可以嘗試點擊系統中的鲸魚圖标将 Docker for Windows Desktop 設置為 Linux 容器模式,然後通過“設置”菜單來啟用對 Kubernetes 的支持。如果您使用的是最新的 Windows 10 Insider 版本構建的話,那麼請注意 Windows 平台在 Docker for Windows Desktop 中會對 linux 容器産生一定的影響。
當然這并不是本文的全部内容。我還會為大家介紹微軟公司的 Linux containers on Windows(LCOW) 項目的進一步發展情況。Docker for Windows 18.02 現在可以通過 LCOW 使用單個 Docker 守護進程來支持 Linux 和 Windows 容器的并存運行。
如何獲取 Docker for Windows Desktop 18.02 是一個嘗鮮的發行版本(Edge channel release)。如果您已經将 Docker for Windows Desktop 的副本設置為嘗鮮(Edge)或夜間(Nightly)模式,那麼您将會自動進行更新。穩定版本(Stable channel)的用戶需要先切換到嘗鮮或夜間模式才能進行更新。
Windows容器 —— 通過原生的 Windows 支持運行;
Linux容器 ——通過托管的Hyper-V Linux VM運行;
Linux containers on Windows (LCOW)
從18.02版本開始,将不再有單獨的 LCOW 模式了,在Windows模式下,LCOW 現在用于 Windows 和 Linux 容器的并存運行。現有的 Linux 模式将被保留。你可以通過系統中的藍鲸圖标來切換模式。
LCOW引入了一個基本概念,即單個 Docker 引擎能夠為多個操作系統運行鏡像。執行第一次下載鏡像的操作時,需要一個指令來完成鏡像和主機操作系統之間的匹配。在這個版本中,該指令是“--platform”标簽。
默認的主機操作系統是 Windows ,所以在不指定“--platform”标簽的情況下運行Linux容器将提示有誤:
docker run --rm busybox echo hello
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
docker.exe: no matching manifest for windows/amd64 in the manifest list entries.
See 'docker.exe run --help'.
添加“--platform linux”标簽就可以成功的下載和運行容器了。
docker run --rm --platform linux busybox echo hello
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
57310166fe88: Pull complete
Digest: sha256:1669a6aa7350e1cdd28f972ddad5aceba2912f589f19a090ac75b7083da748db
Status: Downloaded newer image for busybox:latest
hello
一旦用指定的操作系統下載過鏡像,那麼就不再需要“--platform”标簽了。
docker run --rm busybox echo hello
hello
現在讓我們來嘗試使 Linux 和 Windows 容器并存運行:
docker run --rm microsoft/nanoserver:1709 cmd
Unable to find image 'microsoft/nanoserver:1709' locally
1709: Pulling from microsoft/nanoserver
407ada6e90de: Pull complete
711a33cda32c: Pull complete
Digest: sha256:c633d0187bcb73948ac51c8d84f19948b4151dc71274fced7ce204bbe403f33d
Status: Downloaded newer image for microsoft/nanoserver:1709
Microsoft Windows [Version 10.0.16299.192]
(c) 2017 Microsoft Corporation. All rights reserved.
C:\
鏡像列表同時包括了 Linux 和 Windows 鏡像:
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 5b0d59026729 13 days ago 3.41MB
microsoft/nanoserver 1709 c4f1aa3885f1 4 weeks ago 303MB
将默認的主機操作系統更改為Linux:
[Environment]::SetEnvironmentVariable("LCOW_API_PLATFORM_IF_OMITTED", "linux", "Machine")
Restart-Service Docker
“hello-world”和
清單列表鏡像
眼尖的讀者可能已經注意到了,上面的示例并沒有使用普遍的“hello-world”鏡像。這是為了展示LCOW和“--platform”标簽如何與您将遇到的大多數鏡像配合使用。但是一些鏡像(比如在鏡像倉庫中的鏡像)是使用清單列表進行構建的。清單列表是由 Docker 船長 Phil Estes 貢獻的,它允許鏡像作者指定用于不同架構、操作系統和操作系統版本的摘要。
清單列表詳情請參考文章:Docker打破單一架構、平台限制,便捷移植即刻擁有!
當指定的鏡像具有清單列表時,Docker引擎會根據運行的主機操作系統自動選擇要使用的清單條目。當清單列表與LCOW結合在一起時,您就可以通過“--platform windows”或“--platform linux”來引用單個鏡像了。請注意,隻有清單列表的單個鏡像可以在給定的 Docker 引擎上進行下載。
“hello-world”的清單包含了 Windows 和 Linux 的條目(還有一些其他條目,為了簡潔起見,省略了完整列表)。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2 json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2 json",
"size": 524,
"digest": "sha256:8072a54ebb3bc136150e2f2860f00a7bf45f13eeb917cca2430fcd0054c8e51b",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2 json",
"size": 525,
"digest": "sha256:f839819df2d0d86fad4f53641de64f6e90ae3b77d6ca28011c77ad34aa7afd92",
"platform": {
"architecture": "s390x",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2 json",
"size": 1358,
"digest": "sha256:65b067b5940d834f7534027d90e47c634c4ab0c9d51d9a4a363166bb40787c15",
"platform": {
"architecture": "amd64",
"os": "windows",
"os.version": "10.0.14393.2007"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2 json",
"size": 1356,
"digest": "sha256:0583adf9c3d3c52a05a131ad1a868c9e61f550e83444f868d66bd83e1125bdc3",
"platform": {
"architecture": "amd64",
"os": "windows",
"os.version": "10.0.16299.192"
}
}
]
}
Windows 鏡像的兼容性
Windows 對于在 Windows 版本上創建和運行容器有着特定的要求。更多相關細節,請參閱微軟公司關于容器版本兼容性的文檔。如果您正在運行 Windows 10 Insider 版本,那麼一定要确認哪些鏡像可以與您的 Windows 版本兼容。微軟公司在 Docker Hub 上提供了 Windows Insider 版本的基礎鏡像,如 microsoft / nanoserver-insider。
請注意,清單列表還允許作者創建可在不同 Windows 版本上運行的鏡像,而不需要用戶維護和指定明确的标簽。“hello-world”清單中的兩個Windows條目就是一個例子: Windows 10 1607(10.0.14393) 和 Windows 10 Fall Creators Update(10.0.16299) 。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!