如果你是初次接觸容器和Docker,並且主要在Windows上工作,那麼你將會有所收穫。在這篇文章中,你將學習如何在Windows 10上安裝並配置Docker,使用Docker Desktop for Windows或簡稱為Docker Desktop。
Docker Desktop是將Docker引擎和管理客戶端打包在一起,以方便在Windows 10上使用的工具。在本文中,你將安裝Docker Desktop,部署第一個容器,並在主機和容器之間共享數據。
安裝Docker在Windows上的先決條件
本文是一個逐步操作的文章,演示了使用Docker Desktop for Docker on Windows的各種步驟。請確保你首先滿足以下幾個具體要求。
- 一個可以下載800MB+數據的互聯網連接
- 運行Pro、Enterprise或Education版本的Windows 10 64位,並且版本號為1703或更新。這是為了在Windows 10上運行Hyper-V所必需的。
- A CPU with SLAT (nested paging) compatibility. All AMD/Intel processors since approximately 2008 are SLAT compatible
- 至少4GB的RAM
- BIOS硬件虛擬化,有時被標記為虛擬化技術或VTx。這必須被啟用並在任務管理器的性能選項卡中顯示為已啟用,如下圖所示。

下載並安裝Docker Desktop
首先,您需要下载并安装Docker Desktop才能在Windows上使用Docker。Docker Desktop有两个版本可供选择:稳定版本和测试版本。
稳定版本每季度发布一次,确保应用程序经过全面测试。在本文中,您将使用稳定版本。
注意:在安装过程中,Docker Desktop会提示您安装Hyper-V hypervisor(如果尚未安装)。通过这样做,Hyper-V hypervisor可以阻止任何用户模式hypervisor(如VirtualBox、VMWare等)运行客户机虚拟机。对于VirtualBox和VMWare,Hyper-V的支持有限但正在改进。
您还可以选择通过从Docker.com直接手动下载Docker Desktop或通过Windows软件包管理器Chocolatey下载。让我们简要介绍每种方法。
从Docker.com下载
要直接從docker.com下載Docker桌面版,您可以前往產品頁面進行註冊並從那裡下載。如果您打算在生產環境中使用Docker,這是首選方法。
然而,如果您只是第一次測試Docker,您也可以直接下載它,這會更加簡單。
下載EXE檔後,運行可執行檔並按照提示點擊並接受所有默認設置。
當被問及是否計劃使用Windows容器而非Linux容器時,如下所示,請不要勾選該選項。本文將使用Linux容器。

安裝完成後,重新啟動您的計算機。
選擇使用Windows容器或Linux容器的選項將告訴Docker將映像連接到Windows內核或Linux內核。您可以在安裝後的任何時間通過在系統托盤中右鍵點擊Docker圖標,然後選擇切換到Windows容器來更改此設置,如下所示。

使用Chocolatey
另一種下載並安裝Docker Desktop的選項是使用Chocolatey。Chocolatey可以自動化許多下載/安裝任務。要這樣做,請以系統管理員身份打開命令行控制台(cmd或PowerShell),然後運行以下命令一次性下載並安裝該程序。
完成後,重新啟動Windows 10。
如果您想在某個時候嘗試測試版本,可以運行命令
choco install docker-desktop --pre
來下載並安裝它。
驗證Docker Desktop安裝
安裝完成後,Docker Desktop會自動運行作為在Windows上提供Docker的服務。在重新啟動後,登錄到Windows時,它會顯示在系統托盤中。但是,您如何確定它是否正常工作?
要驗證Docker Desktop是否正常工作,打開命令行控制台並運行docker
命令。如果安裝成功,您將看到Docker命令參考。
最後,讓Docker下載並運行一個名為hello-world的示例容器映像,運行命令docker run hello-world
。如果一切順利,您將看到以下輸出。

在Docker容器中運行命令
已經安裝了Docker Desktop並且驗證一切正常?現在該怎麼做?在Windows上使用Docker的入門任務之一是在Docker容器中運行命令。通過docker run
命令,您可以將命令直接通過主機(您的Windows 10電腦)傳送到運行中的容器中。
要在容器中運行命令,首先需要指定映像名稱,然後是命令。為了開始,告訴Docker在名為alpine的容器中運行命令hostname
,如下所示。
由於您現在的計算機上沒有alpine Docker映像,Docker在Windows上將從Docker Hub下載這個小映像,啟動一個容器並將命令直接發送到容器中,然後一次關閉。
如果您希望保持容器運行,還可以使用-it
參數。此參數告訴Docker保持容器處於“交互模式”,在執行命令後將其保持在前台運行。然後,您將看到顯示終端提示符,準備就緒。
在終端中完成後,輸入exit
返回到Windows 10。
從Docker主機訪問容器中的文件
另一个常见的任务是从容器访问主机文件。为了在容器中访问主机文件,Windows 上的 Docker 允许您将桌面上的文件夹路径链接到容器,以共享该文件夹。这个过程称为绑定。
要创建一个绑定,首先在本地驱动器上创建一个文件夹。在这个例子中,我将使用E:\并将其命名为input。然后在该文件夹中创建一个名为file.txt的新文本文档。可以自由选择任何路径和文件。
一旦您确定了要在主机和容器之间共享的文件夹,Docker 需要使用--mount
参数来挂载该文件夹。--mount
参数需要三个参数:挂载类型、源主机目录路径和目标目录路径。目标路径将是容器内的符号链接。
下面是一个示例,将整个E:\挂载到 Windows 10 主机上,显示为 Linux 容器内的/home/TEST目录。
当您尝试挂载主机文件夹时,Docker Desktop 将要求您允许与 Docker 容器共享此驱动器,如下所示。

如果您按照前面的描述在 Windows 10 文件夹中创建了file.txt文件,请运行cat /home/TEST/input/file.txt
。您将看到文件内容被显示出来。
現在,刪除剛創建的input文件夾,然後再次運行cat ...
命令。觀察到shell現在報告該文件不存在。

映射網絡端口
另一個重要的概念是了解Windows上的Docker如何處理網絡。為了簡要介紹,讓我們看看如何從本地主機訪問運行在容器中的Web服務。
首先,啟動一個運行示例網頁的演示映像。下載並運行名為dockersamples/static-site的Docker映像。您將使用docker container run
來執行此操作。
以下命令同時執行四個操作:
- 從Docker Hub下載名為static-site的Docker映像,保存在docker-samples目錄下
- 從static-site映像啟動一個容器實例
- 立即將容器與終端前景分離(
--detach
) - 使運行的容器的網絡端口對Windows 10主機可訪問(
--publish-all
)
運行後,Docker將返回創建的容器ID,如下所示。

發布網絡端口
自從使用--publish-all
參數之後,本地主機端口現在被映射到容器的網絡堆棧。您可以使用docker ps
子命令列出所有運行中的容器,包括所有運行中容器所分配的端口。在下面的示例中,有一個容器正在運行,將主機端口32777映射到容器端口80,將主機端口32776映射到容器端口443。

在使用--publish-all
參數時,Docker在Windows上為容器分配隨機端口,除非明確定義它們。
現在打開網頁瀏覽器,導航到http://localhost:32777或Docker分配的映射到端口80的端口,該端口由docker ps
輸出。如果一切順利,您應該能看到下面的網頁。

更改已發布的端口
現在您在Docker上運行了一個在Windows上提供簡單網頁的Docker容器。恭喜!但現在您需要指定一個特定的端口綁定,而不是依賴於隨機端口選擇,使用--publish-all
。沒問題。使用-p
參數。
首先,通過指定它的容器ID的唯一字符串停止運行中的容器。您可以通過運行docker ps
找到這個容器ID。一旦您知道容器ID,停止容器並啟動一個新的容器,同時指定Docker分配一個特定的端口進行發布。
指定端口的语法是<外部端口>:<容器端口>
。对于每个您想要发布的端口,使用--publish
或-p
开关,并指定外部端口和容器端口号,如下所示。
当您指定容器ID时,只需键入足够的ID以使其唯一即可。如果您只运行一个容器,其ID为
f766f4ac8d66bf7
,您可以使用任意数量的字符来标识容器,包括只有f
。要求是您输入的内容可以唯一标识一个容器。
现在打开您的Web浏览器,导航到localhost:1337
。请记住,您不会更改镜像,镜像始终监听端口80;您要更改的是Docker配置中的端口转发规则,以便连接到容器。

停止所有容器
使用docker stop
命令,您可以停止一个容器,但如何同时停止多个容器呢?一种方法是提供多个以空格分隔的容器ID。您可以在下面看到如何停止三个容器,它们的ID分别为fd50b0a446e7
、36ee57c3b7da
和7c45664906ff
。
如果您正在使用PowerShell管理Docker容器,您还可以使用一种快捷方式停止所有容器。通过PowerShell的命令扩展,将容器ID列表通过
docker ps -q
传递给停止参数docker stop (docker ps -q)
。
确认所有容器都已停止,当您键入docker ps
时,不会显示任何容器。
清理
您已下载了一些容器镜像并运行了一些已停止的容器。即使它们已停止,它们分配的存储空间仍未从本地主机磁盘上删除。您必须删除这些容器以释放空间,避免在工作空间中产生混乱。
要删除单个容器,请使用容器删除rm
参数,如下所示。
或者,要删除所有已停止的容器,请使用prune
参数,如下所示。