在 Debian 上安裝 Docker Engine

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

先決條件

防火牆限制

警告

在安裝 Docker 之前,請務必考慮以下安全影響和防火牆不相容性。

  • 如果您使用 ufw 或 firewalld 來管理防火牆設定,請注意,當您使用 Docker 暴露容器埠時,這些埠會繞過您的防火牆規則。有關更多資訊,請參閱 Docker 和 ufw
  • Docker 僅與 `iptables-nft` 和 `iptables-legacy` 相容。在安裝了 Docker 的系統上,不支援使用 `nft` 建立的防火牆規則。請確保您使用的任何防火牆規則集都是用 `iptables` 或 `ip6tables` 建立的,並將它們新增到 `DOCKER-USER` 鏈中,請參閱資料包過濾和防火牆

作業系統要求

要安裝 Docker Engine,您需要以下 Debian 版本之一的 64 位版本

  • Debian Trixie 13 (testing)
  • Debian Bookworm 12 (stable)
  • Debian Bullseye 11 (oldstable)

Debian 版的 Docker Engine 與 x86_64(或 amd64)、armhf、arm64 和 ppc64le(ppc64el)架構相容。

解除安裝舊版本

在安裝 Docker Engine 之前,您需要解除安裝任何衝突的軟體包。

您的 Linux 發行版可能提供非官方的 Docker 軟體包,這些軟體包可能與 Docker 提供的官方軟體包衝突。在安裝官方版本的 Docker Engine 之前,您必須解除安裝這些軟體包。

需要解除安裝的非官方軟體包是

  • docker.io
  • docker-compose
  • docker-doc
  • podman-docker

此外,Docker Engine 依賴於 `containerd` 和 `runc`。Docker Engine 將這些依賴項捆綁為一個包:`containerd.io`。如果您之前安裝了 `containerd` 或 `runc`,請解除安裝它們以避免與 Docker Engine 捆綁的版本衝突。

執行以下命令解除安裝所有衝突的軟體包

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

`apt-get` 可能會報告您沒有安裝這些軟體包中的任何一個。

解除安裝 Docker 時,儲存在 `/var/lib/docker/` 中的映象、容器、卷和網路不會自動刪除。如果您想進行全新安裝,並希望清理任何現有資料,請閱讀解除安裝 Docker Engine 部分。

安裝方法

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

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

使用 `apt` 倉庫安裝

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

  1. 設定 Docker 的 `apt` 倉庫。

    # Add Docker's official GPG key:
    sudo apt-get update
    sudo apt-get install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    # Add the repository to Apt sources:
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    注意

    如果您使用衍生發行版,例如 Kali Linux,您可能需要替換此命令中預期列印版本代號的部分

    $(. /etc/os-release && echo "$VERSION_CODENAME")
    

    將這部分替換為相應 Debian 發行版的代號,例如 `bookworm`。

  2. 安裝 Docker 軟體包。

    要安裝最新版本,請執行

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

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

    # List the available versions:
    $ apt-cache madison docker-ce | awk '{ print $3 }'
    
    5:28.4.0-1~debian.12~bookworm
    5:28.3.3-1~debian.12~bookworm
    ...
    

    選擇所需的版本並安裝

    $ VERSION_STRING=5:28.4.0-1~debian.12~bookworm
    $ sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
    
  3. 透過執行 hello-world 映象來驗證安裝是否成功

    $ sudo docker run hello-world
    

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

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

提示

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

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

升級 Docker Engine

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

從軟體包安裝

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

  1. 前往 `https://download.docker.com/linux/debian/dists/`

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

  3. 轉到 `pool/stable/` 並選擇適用的架構(`amd64`、`armhf`、`arm64` 或 `s390x`)。

  4. 下載以下 Docker Engine、CLI、containerd 和 Docker Compose 軟體包的 `deb` 檔案

    • containerd.io_<版本號>_<架構>.deb
    • docker-ce_<版本號>_<架構>.deb
    • docker-ce-cli_<版本號>_<架構>.deb
    • docker-buildx-plugin_<版本號>_<架構>.deb
    • docker-compose-plugin_<版本號>_<架構>.deb
  5. 安裝 `.deb` 軟體包。將以下示例中的路徑更新為您下載 Docker 軟體包的位置。

    $ sudo dpkg -i ./containerd.io_<version>_<arch>.deb \
      ./docker-ce_<version>_<arch>.deb \
      ./docker-ce-cli_<version>_<arch>.deb \
      ./docker-buildx-plugin_<version>_<arch>.deb \
      ./docker-compose-plugin_<version>_<arch>.deb
    

    Docker 守護程序會自動啟動。

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

    $ sudo service docker start
    $ sudo docker run hello-world
    

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

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

提示

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

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

升級 Docker Engine

要升級 Docker Engine,請下載更新的軟體包檔案並重復安裝過程,指向新的檔案。

使用便捷指令碼安裝

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。在基於 Debian 的發行版上,`docker` 服務會自動啟動。在基於 `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 apt-get purge 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
    
  3. 刪除源列表和金鑰環

    $ sudo rm /etc/apt/sources.list.d/docker.list
    $ sudo rm /etc/apt/keyrings/docker.asc
    

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

後續步驟