3.1 Ubuntu

Ubuntu 是 Docker 最常用的執行環境之一。本節將介紹如何在 Ubuntu 系統上安裝 Docker,並設定國內映象加速。

為什麼推薦 APT 源安裝而不是指令碼?

雖然 Docker 官方提供了便捷的安裝指令碼(get.docker.com),但筆者在生產環境中強烈推薦透過 Docker 官方 APT 倉庫安裝,原因如下:

  • 版本管理:透過 APT 倉庫安裝後,可以像管理其他系統軟件套件一樣升級、回滾和鎖定版本
  • 安全更新:Docker 官方倉庫會持續發布新版本和安全修復,適合長期維護
  • 一致性:團隊更容易鎖定同一版本,避免『在我的機器上可以執行』的問題
  • 解除安裝乾淨:APT 套件管理系統會負責清理所有相關檔案,指令碼安裝的清理往往不夠徹底

如果你只是想快速嘗試 Docker,指令碼安裝沒有問題;但一旦涉及持久運維,APT 源是更成熟的選擇。

警告:切勿在沒有設定 Docker APT 源的情況下直接使用 apt 指令安裝 Docker。

3.1.1 準備工作

在開始安裝之前,我們需要確認系統版本是否滿足要求,並清理可能存在的舊版本。

系統要求

根據 Docker 官方安裝文件,當前受支援的 Ubuntu 64 位版本包括(具體以官方 安裝文件 為準):

  • Ubuntu Resolute Raccoon 26.04 (LTS)
  • Ubuntu Questing Quokka 25.10
  • Ubuntu Noble 24.04 (LTS)
  • Ubuntu Jammy 22.04 (LTS)

警告:Ubuntu 20.04 LTS 已不在 Docker 當前支援清單中,不建議用於新部署。對於仍在執行 20.04 的生產系統,應儘快升級到 22.04 LTS 或 24.04 LTS;若短期內無法遷移,可透過 Ubuntu Pro 獲取作業系統層面的擴充套件安全維護(ESM),但這並不改變 Docker 官方支援矩陣。

在 Ubuntu LTS 版本上,目前 Docker 支援 amd64、arm64、armhf、ppc64el、s390x 等 5 個平台;而非 LTS 版本支援的平台通常較少。同時,LTS 版本會獲得 5 年的升級維護支援,這樣的系統會獲得更長期的安全保障,因此在生產環境中推薦使用 LTS 版本。

解除安裝舊版本

Docker 官方建議先解除安裝可能衝突的非官方軟體套件:

$ for pkg in docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc;
do
    sudo apt remove $pkg;
done

3.1.2 使用 APT 安裝

先安裝基礎依賴,並準備 Docker 官方金鑰目錄:

$ sudo apt update

$ sudo apt install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings

如果企業內網已經維護了受信任的軟體套件映象,可在後續步驟中替換 URIs 的網域名稱;預設建議優先以 Docker 官方倉庫為準。

為了確認所下載軟體套件的合法性,需要新增倉庫簽名金鑰:

$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc

然後向 apt 新增 Docker 倉庫:

$ sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

如果需要測試頻道,可將 Components: stable 改為 test,或改用 test.docker.com 指令碼在測試環境驗證。

更新 APT 快取,並安裝 Docker Engine 及常用 CLI 外掛:

$ sudo apt update

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3.1.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.1.4 啟動 Docker

$ sudo systemctl enable --now docker

3.1.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.1.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.1.7 映象加速

如果在使用過程中發現拉取 Docker 映象十分緩慢,可以設定 Docker 國內映象加速

第 15 页,共 196 页
使用 mdPress 构建