作為 Linux 與容器技術的學習,本文會在 Windows 11 上使用 Docker Desktop 與 WSL2 建立環境,並執行 Ubuntu 24.04 容器。
這次不只是啟動容器而已,還會驗證以下項目:
驗證日期:2026 年 10 月 30 日。已在 Windows 11 實機上執行指令並完成確認。本文附圖中的圖 1~7,皆為保存下來的執行紀錄擷取後製成圖片,並非終端機螢幕截圖。Docker Desktop 的畫面則為實際截圖。
項目使用環境主機作業系統Windows 11 Home(64 位元)CPUAMD Ryzen 7 5700X記憶體64GB虛擬化基礎架構WSL2容器環境Docker Desktop(WSL2 後端)Linux 映像檔ubuntu:24.04(Ubuntu 24.04.5 LTS)終端機Windows PowerShell / Ubuntu 容器內的 BashWSL 版本3.0.3.0(核心 6.18.54.1)Docker 版本Desktop 4.97.0 / Client・Engine 29.9.2在 Windows 11 Home 中,可以使用以 WSL2 為後端的 Linux 容器。Docker Desktop 的安裝需求與使用條件會因版本而異,因此請確認最新的官方安裝指南。
以下本文內容是說明學習用的互動操作。這次的實機驗證為了保存紀錄,第一個容器是以 docker run -dit --name linux-study ubuntu:24.04 bash 啟動,並以 docker exec linux-study bash -c '...' 執行容器內指令。本文中的圖片並非直接拍攝互動式 Bash 連線畫面。
停止與重新啟動的實測,則以 docker stop linux-study、docker start linux-study、docker exec linux-study cat /work/test.txt 的順序確認。停止時因逾時後強制結束而變成 Exited (137),但重新啟動後仍可讀出檔案。本文中的 exit 終止方式與實測時的停止方法不同。
套件安裝的實測使用了 apt-get update 與 apt-get install -y curl。curl 版本為 8.5.0。由於是非互動執行,會出現 debconf 前端警告,但安裝已完成。圖 4 省略了 APT 的長篇輸出,並在圖片內明確註記省略。
Volume 驗證使用了 docker run --name linux-volume-test --mount type=volume,source=linux-data,target=/data ubuntu:24.04 bash -c 'echo "Persistent Data Test" > /data/test.txt; cat /data/test.txt'。在容器結束後將其刪除,並從與本文相同的一次性容器讀取資料。
所使用映像檔的 digest 如下。由於標籤會更新,日後取得同一標籤時,可能會是不同的映像檔。
ubuntu@sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852
虛擬機器(VM)一般會各自執行客體作業系統的核心。相對地,Linux 容器則是共享 Linux 核心,並在此基礎上將行程與檔案系統等資源隔離後執行。
在 Windows 上無法直接使用 Linux 核心,因此這次的架構會先在 WSL2 中執行 Linux 核心,再由 Docker 在其上管理 Linux 容器。建立「Ubuntu 容器」並不等同於新增一台 Ubuntu 虛擬機器。
Windows 11
└─ WSL2(執行 Linux 核心的基礎)
└─ Docker Engine(由 Docker Desktop 使用)
├─ Ubuntu 容器
└─ 其他 Linux 容器
首先,在 PowerShell 中確認 WSL 狀態。
wsl --status
wsl --version
wsl -l -v
wsl --status:確認 WSL 的設定狀態wsl --version:確認 WSL 本體與核心等版本wsl -l -v:確認已安裝的發行版,以及 WSL 1 / 2 的區別如果尚未安裝 WSL,請以 系統管理員身分啟動的 PowerShell 執行以下指令。
wsl --install --no-distribution
依環境而定,可能需要重新啟動電腦。此處指定 --no-distribution,表示在不額外加入使用者用 Ubuntu 發行版的情況下安裝 WSL。不過,如果你的目的只是讓 Docker Desktop 執行 Linux 容器,其實不需要另外準備使用者用的 Ubuntu 發行版。
必要時可更新 WSL。
wsl --update
確認重點

圖 1:從實機取得的紀錄擷取。並非拍攝終端機畫面,而是為了易讀而製成圖片。
啟動 Docker Desktop 後,在 PowerShell 執行以下指令:
docker --version
docker info
docker --version 會顯示 Docker CLI 的版本,docker info 則會顯示包含連線到的 Docker Engine 在內的資訊。請確認 docker info 可以成功連線到 Engine。
最後,執行官方的驗證容器。
docker run --rm hello-world
預期輸出(部分)
Hello from Docker!
--rm 是在執行結束後自動刪除該容器的選項。

圖 2:從實機取得的紀錄擷取。並非拍攝終端機畫面,而是為了易讀而製成圖片。
以下開始,會區分指令的執行位置來說明。
首先在 PowerShell 取得 Ubuntu 映像檔。
docker pull ubuntu:24.04
docker image ls
如果清單中出現 ubuntu:24.04,就表示映像檔取得完成。
接著建立並啟動互動式 Ubuntu 容器。
docker run -it --name linux-study ubuntu:24.04 bash
選項意義run根據映像檔新建並啟動容器-it使用標準輸入與虛擬終端進行互動操作--name linux-study為容器命名ubuntu:24.04使用的映像檔bash在容器內啟動的程序成功後,會出現類似下列的 Bash 提示字元。xxxxxxxxxxxx 的部分會依實際容器 ID 等而不同。
root@xxxxxxxxxxxx:/#
接下來的指令都在 Ubuntu 容器內(Bash)執行。
cat /etc/os-release
uname -a
hostname
whoami
確認重點
/etc/os-release 中包含相當於 Ubuntu 24.04 的資訊uname -a 會顯示 Linux 核心資訊hostname 會顯示容器的主機名稱whoami 會顯示預設執行使用者 root
圖 3:從實機取得的紀錄擷取。並非拍攝終端機畫面,而是為了易讀而製成圖片。
在 Ubuntu 容器內(Bash)建立目錄與檔案。
pwd
ls -la
mkdir -p /work
cd /work
echo "Docker Linux Test" > test.txt
cat test.txt
ls -l test.txt
預期輸出
Docker Linux Test
接著嘗試使用 APT 管理套件。
apt update
apt install -y curl
curl --version
確認重點
/work/test.txtcat 讀出儲存內容apt update 與 apt install 成功curl --version 確認 curl 版本Ubuntu 的官方容器映像檔是最小化組態。它不像一般的 Ubuntu Server,預設就完整具備 SSH 伺服器或透過 systemd 進行服務管理的環境。

圖 4:從實機取得的紀錄擷取。並非拍攝終端機畫面,而是為了易讀而製成圖片。
在 Ubuntu 容器內結束 Bash。
exit
由於啟動時的主程序 Bash 結束了,這個容器也會停止。
回到 PowerShell 後,確認容器已停止。
docker ps -a
確認 linux-study 的狀態為 Exited。
再次啟動並連線到 Bash。
docker start linux-study
docker exec -it linux-study bash
在 Ubuntu 容器內讀取先前建立的檔案。
cat /work/test.txt
預期輸出
Docker Linux Test
從這個實驗可以得知,只要是同一個容器單純停止與重新啟動,該容器內建立的檔案就會保留。

圖 5:從實機取得的紀錄擷取。並非拍攝終端機畫面,而是為了易讀而製成圖片。
接著確認建立新容器時的差異。
在 Ubuntu 容器內(Bash)執行以下指令後離開。
exit
在 PowerShell 中刪除剛才的容器。
docker stop linux-study
docker rm linux-study
即使透過 docker exec 開啟的 Bash 已結束,主程序仍會持續執行。因此需要先用 docker stop 停止,再進行刪除。
接著從相同的 Ubuntu 映像檔建立新容器。
docker run -it --name linux-study2 ubuntu:24.04 bash
在 Ubuntu 容器內(Bash)確認先前的檔案。
ls /work/test.txt
預期輸出(例)
ls: cannot access '/work/test.txt': No such file or directory
容器內建立的檔案,通常會儲存在該容器專屬的可寫入層中。刪除容器時,那一層也會一併消失,因此即使使用同一個映像檔建立另一個容器,檔案也不會被帶過去。

圖 6:從實機取得的紀錄擷取。並非拍攝終端機畫面,而是為了易讀而製成圖片。
在這裡退出容器。
exit
如果希望刪除容器後資料仍然保留,可以使用 Docker Volume。
首先在 PowerShell 建立命名 Volume。
docker volume create linux-data
docker volume ls
將 Volume 掛載到 /data 後啟動容器。
docker run -it --name linux-volume-test --mount type=volume,source=linux-data,target=/data ubuntu:24.04 bash
在 Ubuntu 容器內(Bash)建立檔案。
echo "Persistent Data Test" > /data/test.txt
cat /data/test.txt
exit
在 PowerShell 中刪除容器。
docker rm linux-volume-test
將同一個 Volume 掛載到另一個一次性容器,並讀取檔案。
docker run --rm --mount type=volume,source=linux-data,target=/data ubuntu:24.04 cat /data/test.txt
預期輸出
Persistent Data Test
即使刪除了容器,只要未另外刪除命名 Volume linux-data,資料就會保留下來。因此,從其他容器也能讀到該檔案。
操作一般容器內檔案命名 Volume 內檔案停止與重新啟動會保留會保留刪除原容器會消失會保留從新容器讀取不會自動沿用只要掛載同一個 Volume 就能讀取※若連 Volume 本身也刪除,則不在這個持久化範圍內。

圖 7:從實機取得的紀錄擷取。並非拍攝終端機畫面,而是為了易讀而製成圖片。

這是 Docker Desktop 的實際管理畫面。可確認左下角的 Engine running,以及驗證中建立的 linux-study2。
以下為可選的後續整理步驟。這次為了保留給後續確認使用,因此保留了已停止的 linux-study2 與命名 Volume linux-data。以下僅限於本次驗證使用名稱的刪除指令。請在保存必要資料後再執行。
PowerShell
docker rm linux-study2
docker volume rm linux-data
docker ps -a
docker volume ls
Ubuntu 映像檔 ubuntu:24.04 可供下一次學習重複使用,因此這次保留不刪除。
docker 指令無法連線到 Engine請確認 Docker Desktop 是否已啟動,也請確認 Linux 容器用的後端是否已啟用。
docker info
在安裝 WSL 時,最初因為沒有系統管理員權限而失敗(0x80073d28)。之後以系統管理員身分開啟 PowerShell 進行安裝,並在之後重新啟動 Windows 後,WSL2 才可使用。即使安裝完成後,也需要再次確認系統已重新啟動並可正常使用。
wsl 相關錯誤出現時請確認 WSL 與虛擬化狀態。
wsl --status
wsl --version
wsl --update
必要時重新啟動 Windows。也要確認 BIOS/UEFI 中的虛擬化設定是否已啟用。
Conflict. The container name ... is already in use 的訊息表示已有同名容器存在。
docker ps -a
可以重複使用既有容器,或改名後重新建立。若要刪除,請先確認容器內資料是否已不需要。
請確認網際網路連線、Proxy 或 DNS 設定,以及是否能存取 Docker Hub。將錯誤內容與發生的指令記錄下來,也有助於撰寫文章中的疑難排解。
整理本次實機驗證結果如下。
驗證內容實機確認結果WSL2 可正常運作已確認可從 Docker 啟動 Hello World 已確認可啟動 Ubuntu 24.04 容器已確認可在容器內執行 Linux 指令已確認同一容器停止與重新啟動後檔案仍保留已確認原始寫入資料不會沿用到新容器已確認可透過 Docker Volume 將資料持久化已確認作為 Docker 的基本概念,映像檔是容器的基礎,容器是由映像檔建立的執行環境,而 Volume 則是以獨立於容器生命週期的方式保存資料的機制,可以從這次實驗中學到。
下一次打算驗證使用 Nginx 容器啟動 Web 伺服器、埠對應,以及從 Windows 瀏覽器進行 HTTP 存取。
原文出處:https://qiita.com/NoguchiHikaru/items/dccd98d85a31c0cec279