在 Ubuntu 上安装 Docker 引擎

在Ubuntu上安装Docker Engine,首先确保满足先决条件,然后按照安装步骤进行操作。

先决条件:

操作系统要求

  • 64位版本的Ubuntu Lunar 23.04、Ubuntu Kinetic 22.10、Ubuntu Jammy 22.04(LTS)、Ubuntu Focal 20.04(LTS)之一。
  • x86_64(或amd64)、armhf、arm64、s390x和ppc64le(ppc64el)架构的兼容Docker Engine。

卸载旧版本:

  • 在安装Docker Engine之前,必须先确保卸载所有冲突的软件包。
  • 发行版维护者提供了Docker包的非官方APT分发。在安装官方版本的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可能报告您没有安装这些软件包。

存储在/var/lib/docker/中的映像、容器、卷和网络不会在使用卸载Docker时自动删除。如果您希望从干净的安装开始并选择清理任何现有数据,请参阅卸载Docker Engine部分。

安装方法:

  • Docker Engine与Linux上的Docker Desktop捆绑在一起提供。这是最简单最快捷的入门方式。
  • 从Docker的Apt存储库设置并安装Docker Engine。
  • 手动安装和管理升级。
  • 使用便捷脚本进行安装。仅推荐用于测试和开发环境。

使用Apt存储库进行安装

在新的主机机器上首次安装Docker Engine之前,需要设置Docker存储库。之后,可以从存储库中安装和更新Docker。

  1. 设置Docker的Apt存储库。

    # 添加Docker的官方GPG密钥:
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    
    # 将存储库添加到Apt源中:
    echo \
      "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update

    注意
    如果您使用的是Ubuntu派生发行版,例如Linux Mint,则可能需要使用UBUNTU_CODENAME而不是VERSION_CODENAME。

  2. 安装Docker软件包。

    要安装最新版本,请运行:

    $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  3. 通过运行hello-world映像来验证Docker Engine安装是否成功。

    $ sudo docker run hello-world

    该命令下载一个测试映像并在容器中运行它。当容器运行时,它会打印确认消息并退出。

您现在已经成功安装了并启动了Docker Engine。

提示

尝试在没有root的情况下运行时收到错误?

docker用户组存在,但其中不包含任何用户,这就是为什么需要使用sudo来运行Docker命令的原因。继续进行Linux postinstall以允许非特权用户运行Docker命令和其他可选配置步骤。

升级Docker引擎

要升级Docker Engine,请遵循安装说明中的第2步,选择要安装的新版本。

从软件包安装

如果您无法使用Docker的apt存储库来安装Docker Engine,您可以下载您的发行版的deb文件并手动安装它。每次想要升级Docker Engine时,您需要下载一个新的文件。

跳转到https://download.docker.com/linux/ubuntu/dists

在列表中选择您的Ubuntu版本。

转到pool/stable/ 并选择适用的架构(amd64、armhf、arm64或s390x)。

下载以下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

安装.deb软件包。请将以下示例中的路径更新为您下载的Docker软件包的位置。

$ sudo dpkg -i ./containerd.io.deb \
./docker-ce.deb \
./docker-ce-cli.deb \
./docker-buildx-plugin.deb \
./docker-compose-plugin.deb

Docker守护进程自动启动。

通过运行hello-world映像来验证Docker Engine安装是否成功。

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

此命令下载一个测试映像并在容器中运行它。当容器运行时,它会打印确认消息并退出。

现在,您已成功安装并启动了Docker Engine。

提示

尝试在没有root权限的情况下运行时收到错误?

docker用户组存在,但其中没有用户,这就是为什么您需要使用sudo来运行Docker命令的原因。继续进行Linux postinstall以允许非特权用户运行Docker命令和其他可选配置步骤。

升级Docker引擎

要升级Docker Engine,请下载较新的软件包文件并重复安装过程,指向新文件。

使用便捷脚本安装

Docker提供了一个便捷的脚本https://get.docker.com/open_in_new, 用于在非交互式环境中将Docker安装到开发环境中。便利脚本不适用于生产环境,但对于创建定制的预配脚本非常有用。还要参考使用存储库步骤中的安装使用存储库步骤,了解如何使用软件包存储库进行安装。该脚本的源代码是开源的,您可以在GitHub上的docker-install存储库中找到它open_in_new。

在本地运行之前,始终检查从互联网下载的脚本。在安装之前,请使自己熟悉便利脚本的潜在风险和限制:

该脚本需要root或sudo权限才能运行。
该脚本尝试检测您的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/open_in_new 下载脚本并在Linux上运行它以安装最新的稳定版Docker:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
执行docker install脚本,提交:7cae5f8b0decc17d6571f9f52eb840fbc13b2737
<...>

现在,您已成功安装了并启动了Docker Engine。Docker服务在基于Debian的发行版上自动启动。在基于RPM的发行版(如CentOS、Fedora、RHEL或SLES)上,您需要使用适当的systemctl或service命令手动启动它。正如消息所示,非root用户默认情况下无法运行Docker命令。

使用Docker作为非特权用户,或以rootless模式安装?

安装脚本需要root或sudo权限才能安装和使用Docker。如果您想授予非root用户访问Docker的权限,请参阅Linux的安装后步骤。您还可以在没有root权限的情况下安装Docker,或配置为以rootless模式运行。有关以rootless模式运行Docker的说明,请参阅以非root用户身份运行Docker守护程序(rootless模式)。

安装预发布版本

Docker还提供了一个便利脚本https://test.docker.com/open_in_new, 用于在Linux上从测试通道安装Docker的预发布版本。此脚本等于get.docker.com上的脚本,但配置您的包管理器以使用Docker软件包存储库的测试通道。测试通道包括Docker的稳定版和预发布版(beta版本、发布候选版本)。使用此脚本可以提前访问新功能,并在正式发布之前在测试环境中对其进行评估。
要从测试通道在Linux上安装最新版本的Docker,请运行:

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

升级便利脚本安装的Docker

如果您使用便利脚本安装了Docker,您应该直接使用包管理器升级Docker。重新运行便利脚本没有优势。如果它尝试重新安装主机上已经存在的存储库,重新运行它可能会导致问题。

卸载Docker Engine

卸载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

您的主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷,请执行以下操作:

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

您必须手动删除任何编辑过的配置文件。