3.3 Fedora
Fedora 作為技術前沿的 Linux 發行版,對 Docker 有著良好的支援。本節介紹在 Fedora 上的安裝步驟。
YUM/DNF 源安裝的策略建議
Fedora 的快速發布週期(每 6 個月發布新版本)決定了它的使用者群體多為開發者和技術愛好者。雖然透過 DNF 可以直接安裝 Docker,但筆者建議仍然透過 Docker 官方 YUM 源進行安裝,原因是:Fedora 官方倉庫的 Docker 版本往往滯後,而官方源能確保你獲得最新的 Docker 功能和安全補丁。特別是在開發環境需要用到最新 Docker 屬性時,這一點顯得尤為重要。
警告:切勿在沒有設定 Docker dnf 源的情況下直接使用 dnf 指令安裝 Docker。
3.3.1 準備工作
確保你的 Fedora 版本在支援清單中,並清理舊版本。
系統要求
根據 Docker 官方安裝文件,當前受支援的 Fedora 版本包括(具體以官方 安裝文件 為準):
- Fedora 44
- Fedora 43
解除安裝舊版本
舊版本的 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
3.3.2 使用 dnf 安裝
使用 dnf 套件管理器安裝是推薦的方式,便於後續的更新和管理。
執行以下指令安裝依賴套件:
$ sudo dnf -y install dnf-plugins-core
預設建議優先使用 Docker 官方倉庫;如果企業內網維護了受信任映象站,可自行替換倉庫 URL。
執行下面的指令新增 dnf 軟體源:
$ sudo dnf config-manager addrepo --from-repofile https://download.docker.com/linux/fedora/docker-ce.repo
如果需要測試版本的 Docker 請使用以下指令:
$ sudo dnf config-manager --set-enabled docker-ce-test
你也可以停用測試版本的 Docker
$ sudo dnf config-manager --set-disabled docker-ce-test
安裝 Docker
更新 dnf 軟體源快取,並安裝 Docker Engine 及常用 CLI 外掛。
$ sudo dnf update
$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
你也可以使用以下指令安裝指定版本的 Docker
$ dnf list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:29.4.0-1.fc42 docker-ce-stable
$ sudo dnf -y install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING>
3.3.3 使用指令碼自動安裝
在測試或開發環境中,Docker 官方提供了便捷安裝指令碼,但官方明確不建議把它作為生產環境的標準安裝方式。
在真正執行前,建議先用 --dry-run 預覽指令碼動作:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh --dry-run
# 若需要測試頻道:
# curl -fsSL https://test.docker.com -o test-docker.sh
# sudo sh ./test-docker.sh
確認無誤後,再執行 sudo sh ./get-docker.sh 安裝穩定版。
3.3.4 啟動 Docker
$ sudo systemctl enable --now docker
3.3.5 建立 docker 使用者組
預設情況下,docker 指令會使用 Unix socket 與 Docker 引擎通訊。而只有 root 使用者和 docker 組的使用者才可以訪問 Docker 引擎的 Unix socket。出於安全考慮,一般 Linux 系統上不會直接使用 root 使用者。因此,更好的做法是將需要使用 docker 的使用者加入 docker 使用者組。
⚠️ 安全警告:
docker使用者組等同於root許可權將使用者加入
docker組免去了每次執行docker指令時輸入sudo的繁瑣,但這也意味著該使用者可以輕易獲取主機的最高 root 許可權(例如透過掛載根目錄執行容器)。 如果你在一個多使用者共享的生產系統上設定,切勿隨意將普通使用者加入此組。此時,更安全的替代方案是使用官方提供的 Rootless 模式 (Rootless mode),它允許在沒有任何 root 許可權的情況下執行 Docker 守護程序和容器。
建立 docker 組:
$ sudo groupadd docker
將當前使用者加入 docker 組:
$ sudo usermod -aG docker $USER
退出當前終端並重新登入,進行如下測試。
3.3.6 測試 Docker 是否安裝正確
$ docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
若能正常輸出以上訊息,則說明安裝成功。
3.3.7 映象加速
如果在使用過程中發現拉取 Docker 映象十分緩慢,可以設定 Docker 國內映象加速。