在 RHEL 上安裝 Docker Engine

要在 RHEL 上開始使用 Docker Engine,請確保您滿足先決條件,然後按照安裝步驟進行操作。

先決條件

作業系統要求

要安裝 Docker Engine,您需要以下 RHEL 版本中受支援的版本之一:

  • RHEL 8
  • RHEL 9

解除安裝舊版本

在安裝 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-engine \
                  podman \
                  runc

dnf 可能會報告您沒有安裝這些軟體包。

解除安裝 Docker 時,儲存在 /var/lib/docker/ 中的映象、容器、卷和網路不會自動刪除。

安裝方法

您可以根據需要,透過不同方式安裝 Docker Engine

  • 您可以設定 Docker 的倉庫並從中安裝,以簡化安裝和升級任務。這是推薦的方法。

  • 您可以下載 RPM 軟體包,手動安裝它,並完全手動管理升級。這在諸如在無法訪問網際網路的氣隙系統上安裝 Docker 等情況下非常有用。

  • 在測試和開發環境中,您可以使用自動化的便捷指令碼來安裝 Docker。

Apache 許可證,版本 2.0。有關完整許可證,請參閱 LICENSE

使用 rpm 倉庫安裝

在新主機上首次安裝 Docker Engine 之前,您需要設定 Docker 倉庫。之後,您可以從倉庫安裝和更新 Docker。

設定倉庫

安裝 dnf-plugins-core 軟體包(它提供了管理 DNF 倉庫的命令)並設定倉庫。

$ sudo dnf -y install dnf-plugins-core
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

安裝 Docker Engine

  1. 安裝 Docker 軟體包。

    要安裝最新版本,請執行

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

    如果提示接受 GPG 金鑰,請驗證指紋是否匹配 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35,如果匹配,則接受它。

    此命令會安裝 Docker,但不會啟動 Docker。它還會建立一個 docker 組,但預設情況下不會將任何使用者新增到該組。

    要安裝特定版本,首先列出倉庫中的可用版本

    $ dnf list docker-ce --showduplicates | sort -r
    
    docker-ce.x86_64    3:28.4.0-1.el9    docker-ce-stable
    docker-ce.x86_64    3:28.3.3-1.el9    docker-ce-stable
    <...>
    

    返回的列表取決於啟用了哪些儲存庫,並且特定於您的 RHEL 版本(在此示例中由 `.el9` 字尾指示)。

    透過其完全限定的包名稱來安裝特定版本,該名稱是包名稱 (docker-ce) 加上版本字串(第二列),用連字元 (-) 分隔。例如,docker-ce-3:28.4.0-1.el9

    <VERSION_STRING> 替換為所需的版本,然後執行以下命令進行安裝

    $ sudo dnf install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin
    

    此命令會安裝 Docker,但不會啟動 Docker。它還會建立一個 docker 組,但預設情況下不會將任何使用者新增到該組。

  2. 啟動 Docker Engine。

    $ sudo systemctl enable --now docker
    

    這將配置 Docker systemd 服務在您啟動系統時自動啟動。如果您不希望 Docker 自動啟動,請改用 sudo systemctl start docker

  3. 透過執行 hello-world 映象來驗證安裝是否成功

    $ sudo docker run hello-world
    

    此命令會下載一個測試映象並在容器中執行它。當容器執行時,它會列印一條確認訊息並退出。

您現在已成功安裝並啟動了 Docker Engine。

提示

嘗試在沒有 root 許可權的情況下執行時收到錯誤?

docker 使用者組已存在但其中不包含任何使用者,這就是您需要使用 sudo 執行 Docker 命令的原因。請繼續閱讀 Linux 安裝後步驟,以允許非特權使用者執行 Docker 命令以及進行其他可選配置步驟。

升級 Docker Engine

要升級 Docker Engine,請按照安裝說明,選擇您想要安裝的新版本。

從軟體包安裝

如果您無法使用 Docker 的 rpm 倉庫來安裝 Docker Engine,您可以下載適用於您版本的 .rpm 檔案並手動安裝。每次要升級 Docker Engine 時,都需要下載一個新檔案。

  1. 轉到 https://download.docker.com/linux/rhel/

  2. 在列表中選擇您的 RHEL 版本。

  3. 選擇適用的架構(`x86_64`、`aarch64` 或 `s390x`),然後轉到 `stable/Packages/`。

  4. 為 Docker Engine、CLI、containerd 和 Docker Compose 包下載以下 `rpm` 檔案:

    • containerd.io-<version>.<arch>.rpm
    • docker-ce-<version>.<arch>.rpm
    • docker-ce-cli-<version>.<arch>.rpm
    • docker-buildx-plugin-<version>.<arch>.rpm
    • docker-compose-plugin-<version>.<arch>.rpm
  5. 安裝 Docker Engine,將以下路徑更改為您下載軟體包的路徑。

    $ sudo dnf install ./containerd.io-<version>.<arch>.rpm \
      ./docker-ce-<version>.<arch>.rpm \
      ./docker-ce-cli-<version>.<arch>.rpm \
      ./docker-buildx-plugin-<version>.<arch>.rpm \
      ./docker-compose-plugin-<version>.<arch>.rpm
    

    Docker 已安裝但未啟動。docker 組已建立,但沒有使用者新增到該組。

  6. 啟動 Docker Engine。

    $ sudo systemctl enable --now docker
    

    這將配置 Docker systemd 服務在您啟動系統時自動啟動。如果您不希望 Docker 自動啟動,請改用 sudo systemctl start docker

  7. 透過執行 hello-world 映象來驗證安裝是否成功

    $ sudo docker run hello-world
    

    此命令會下載一個測試映象並在容器中執行它。當容器執行時,它會列印一條確認訊息並退出。

您現在已成功安裝並啟動了 Docker Engine。

提示

嘗試在沒有 root 許可權的情況下執行時收到錯誤?

docker 使用者組已存在但其中不包含任何使用者,這就是您需要使用 sudo 執行 Docker 命令的原因。請繼續閱讀 Linux 安裝後步驟,以允許非特權使用者執行 Docker 命令以及進行其他可選配置步驟。

升級 Docker Engine

要升級 Docker Engine,請下載新的軟體包檔案,並重復安裝過程,使用 dnf upgrade 而不是 dnf install,並指向新檔案。

使用便捷指令碼安裝

Docker 在 https://get.docker.com/ 提供了一個方便的指令碼,用於在開發環境中非互動式地安裝 Docker。不建議在生產環境中使用該方便指令碼,但它對於建立適合您需求的配置指令碼非常有用。另請參閱使用儲存庫安裝步驟,以瞭解使用軟體包儲存庫進行安裝的步驟。該指令碼的原始碼是開源的,您可以在 GitHub 上的 `docker-install` 儲存庫中找到它。

在本地執行從網際網路下載的指令碼之前,請務必仔細檢查。安裝前,請熟悉便捷指令碼的潛在風險和限制

  • 該指令碼需要 rootsudo 許可權才能執行。
  • 該指令碼會嘗試檢測您的 Linux 發行版和版本,併為您配置軟體包管理系統。
  • 該指令碼不允許您自定義大多數安裝引數。
  • 該指令碼會安裝依賴項和推薦項,而不會徵求確認。這可能會安裝大量軟體包,具體取決於您主機的當前配置。
  • 預設情況下,該指令碼會安裝 Docker、containerd 和 runc 的最新穩定版本。在使用此指令碼配置機器時,這可能會導致 Docker 的主要版本意外升級。在部署到生產系統之前,務必在測試環境中測試升級。
  • 該指令碼並非為升級現有 Docker 安裝而設計。使用該指令碼更新現有安裝時,依賴項可能不會更新到預期版本,從而導致版本過時。
提示

在執行之前預覽指令碼步驟。您可以使用 --dry-run 選項執行指令碼,以瞭解指令碼在呼叫時將執行哪些步驟

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh --dry-run

此示例從 https://get.docker.com/ 下載指令碼並執行它,以在 Linux 上安裝最新穩定版本的 Docker

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b2737
<...>

您現在已經成功安裝並啟動了 Docker Engine。`docker` 服務在基於 Debian 的發行版上會自動啟動。在基於 `RPM` 的發行版上,例如 CentOS、Fedora、RHEL 或 SLES,您需要使用適當的 `systemctl` 或 `service` 命令手動啟動它。正如訊息所示,非 root 使用者預設無法執行 Docker 命令。

以非特權使用者身份使用 Docker,還是以無根模式安裝?

安裝指令碼需要 `root` 或 `sudo` 許可權才能安裝和使用 Docker。如果您想授予非 root 使用者訪問 Docker 的許可權,請參閱Linux 的安裝後步驟。您也可以在沒有 `root` 許可權的情況下安裝 Docker,或將其配置為在無根模式下執行。有關在無根模式下執行 Docker 的說明,請參閱以非 root 使用者身份執行 Docker 守護程序(無根模式)

安裝預釋出版本

Docker 還在 https://test.docker.com/ 提供了一個方便的指令碼,用於在 Linux 上安裝 Docker 的預釋出版本。此指令碼與 `get.docker.com` 處的指令碼相同,但它會將您的包管理器配置為使用 Docker 包儲存庫的測試通道。測試通道包括 Docker 的穩定版和預釋出版(測試版、候選版)。使用此指令碼可以提前訪問新版本,並在它們作為穩定版釋出之前在測試環境中進行評估。

要從測試通道在 Linux 上安裝最新版本的 Docker,請執行

$ curl -fsSL https://test.docker.com -o test-docker.sh
$ sudo sh test-docker.sh

使用便捷指令碼後升級 Docker

如果您使用便利指令碼安裝了 Docker,則應直接使用包管理器升級 Docker。重新執行便利指令碼沒有任何好處。如果它試圖重新安裝主機上已存在的儲存庫,重新執行可能會導致問題。

解除安裝 Docker Engine

  1. 解除安裝 Docker Engine、CLI、containerd 和 Docker Compose 軟體包

    $ sudo dnf remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
    
  2. 主機上的映象、容器、卷或自定義配置檔案不會自動刪除。要刪除所有映象、容器和卷

    $ sudo rm -rf /var/lib/docker
    $ sudo rm -rf /var/lib/containerd
    

您必須手動刪除任何已編輯的配置檔案。

後續步驟