注意事項
請注意
建議搭配前面的 Part 3 服用
更新時間 2025.10.09
容器相關開發環境
Podman
Flatpak
使用 flathub 安裝
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
$ flatpak install flathub io.podman_desktop.PodmanDesktop
$ flatpak run io.podman_desktop.PodmanDesktop
之後啟動後,基本上就是按照 GUI 的設定一直下一步即可
進到主頁後基本安裝完成
其他使用說明請參照
使用者說明
Docker Engine
Fedora
若要在 Fedora 上開始使用 Docker Engine,請確認已符合前提條件,然後依照安裝步驟進行操作。
作業系統需求
若要安裝 Docker Engine,需要以下任一仍在維護中的 Fedora 版本:
- Fedora 43
- Fedora 42
- Fedora 41
解除安裝舊版本
在安裝 Docker Engine 之前,需要解除安裝任何有衝突的套件。
目前用的 Linux 發行版可能提供了非官方的 Docker 套件,這些套件可能會與 Docker 提供的官方套件發生衝突。
在安裝官方版本的 Docker Engine 之前,必須先解除安裝這些套件。
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
dnf 可能會回報系統上並未安裝任何這些套件。
當解除安裝 Docker 時,儲存在 /var/lib/docker/ 目錄下的映像檔、容器、磁碟區和網路設定並不會被自動移除。
安裝方法
根據需求,有三種安裝 Docker Engine 的方式:
- 使用官方軟體庫(推薦):可輕鬆安裝與更新。
- 手動下載 RPM 套件安裝:適合無網路環境下的機器。
- 使用自動化安裝腳本:適合測試或開發環境。
基本上這裡只會介紹使用官方軟體庫安裝
使用官方軟體庫安裝
-
設定 Docker 軟體庫
先安裝 dnf-plugins-core(用來管理 DNF 軟體庫),並設定官方 Docker repository。sudo dnf -y install dnf-plugins-core sudo dnf-3 config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo -
安裝 Docker Engine
若要安裝最新版 Docker Engine,使用以下指令sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin若要安裝指定版本,輸入完整名稱
完整名稱由「套件名稱(例如 docker-ce)」加上「版本字串<VERSION_STRING>」組成,兩者以連字號(-)分隔。
例如:docker-ce-3:28.5.2-1.fc41# listing the available versions dnf list docker-ce --showduplicates | sort -r # example ouput docker-ce.x86_64 3:28.5.2-1.fc41 docker-ce-stable docker-ce.x86_64 3:28.5.1-1.fc41 docker-ce-stable <...> # install specific version sudo dnf install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin最後
安裝過程中若提示要匯入 GPG 金鑰,確認指紋為(這是安裝最新版本會出現的,特定版本我不確定,若有疑問可以去看官方的部分):
060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
此指令會安裝 Docker,但不會自動啟動服務。系統會建立 docker 群組,但不會自動將任何使用者加入該群組。 -
啟動 Docker
使用以下指令啟動sudo systemctl enable --now docker注意,這會讓 Docker 隨系統開機自動啟動。若不想開機自動啟動,可改用:
sudo systemctl start docker -
驗證安裝是否成功
sudo docker run hello-world這會下載一個測試映像並執行容器,若成功,會印出確認訊息後退出。
至此,已成功安裝並啟動 Docker Engine。
Linux 上 Docker Engine 的安裝後步驟
以下可選的安裝後設定步驟,可以讓 Linux 與 Docker 更好地整合運作。
讓非 root 使用者使用 Docker
Docker daemon 綁定於 Unix socket,而不是 TCP 連接埠。預設情況下,該 socket 屬於 root 使用者,其它使用者只能透過 sudo 來存取。
Docker daemon 永遠以 root 身分執行。
如果不想每次執行 docker 指令都加上 sudo,可以建立一個名為 docker 的群組,並將使用者加入其中。
當 Docker daemon 啟動時,它會建立一個僅供 docker 群組成員存取的 Unix socket。
警告:
將使用者加入docker群組等同於給予該使用者 root 等級的權限。
詳情請參閱官方文件:
https://docs.docker.com/engine/security/#docker-daemon-attack-surface
備註:
如果想在完全無 root 權限下執行 Docker,請參考:
https://docs.docker.com/engine/security/rootless/
建立 docker 群組並新增使用者:
-
建立 docker 群組:
sudo groupadd docker -
將目前使用者加入群組:
sudo usermod -aG docker $USER -
登出再登入,使群組設定生效。或可立即執行以下指令以套用變更:
newgrp docker -
測試是否可在無
sudo狀態下執行 Docker 指令:docker run hello-world
此指令會下載測試映像並啟動容器,若執行成功,會顯示確認訊息並結束。
若在加入群組前曾用 sudo 執行過 Docker 指令,可能會遇到以下錯誤:
WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied
這代表 ~/.docker/ 資料夾的權限設定錯誤,原因是之前用 sudo 執行過 Docker。
可用以下方式修正:
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R
設定 Docker 開機自動啟動(systemd)
多數現代 Linux 發行版使用 systemd 來管理開機時啟動的服務。
在 Debian 與 Ubuntu 上,Docker 預設會於開機時自動啟動。若你使用其他基於 systemd 的發行版,可手動設定:
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
若不希望自動啟動,可改用:
sudo systemctl disable docker.service
sudo systemctl disable containerd.service
設定預設日誌(Logging Driver)
Docker 提供多種日誌驅動(logging drivers),可用於收集與檢視容器的日誌資料。
預設的 json-file 驅動會將日誌以 JSON 格式寫入主機檔案系統。隨著時間推移,這些檔案可能變得非常大,導致磁碟空間不足。
為避免磁碟被日誌填滿,可考慮以下做法:
- 為
json-file驅動啟用日誌輪替(log rotation) - 改用具自動輪替功能的 local 驅動
- 改用可將日誌發送到遠端收集系統的驅動(例如 syslog、fluentd)。
備註
本來還要寫 Docker Desktop 的安裝方式
但是後來發現 Desktop 的實作有點太邪教
架構圖

來源:https://www.geeksforgeeks.org/devops/understanding-the-docker-desktop-architecture-and-linux-building-block-for-containers/
官方某篇 blog 中提到的架構圖

來源:https://www.docker.com/blog/how-docker-desktop-networking-works-under-the-hood/
官方自己也在裡面寫到
When containers want to connect to the outside world, they will use TCP/IP. Since Linux containers require a Linux kernel, Docker Desktop includes a helper Linux VM. Traffic from containers therefore originates from the Linux VM rather than the host, which causes a serious problem.
如果翻成中文就是
當容器想要連線到外部網路時,會使用 TCP/IP。
由於 Linux 容器需要 Linux 核心,Docker Desktop 內含一個輔助用的 Linux 虛擬機(helper Linux VM)。
因此,容器的網路流量其實是從這個 Linux 虛擬機發出的,而不是直接從主機發出,這就造成了一個嚴重的問題。
也就是說,他在 linux 裡面開了一台 VM 去使用 Docker 的感覺
你說在 windows 上用 WSL 去開虛擬機就算了
你在 linux 上這樣用,不就是在浪費資源嗎??
總之後來發現這件事
本來在 windows 用 GUI 用的很爽,並且 Windows 上本身就要開 WSL,也就算了
但在這邊還是乖乖用指令吧
不然的話還有 Podman Desktop 可以用