如果安装了 Docker Desktop,则已经安装了完整的 Docker,包括 Compose。

一、在 Ubuntu 上安装 Docker Desktop

DEB 包

先决条件

要成功安装 Docker Desktop,您必须:

  • 满足系统要求
  • 拥有 Ubuntu Jammy Jellyfish 22.04 (LTS) 或 Ubuntu Impish Indri 21.10 的 64 位版本。x86_64(或amd64)架构支持 Docker Desktop 。
  • 对于非 Gnome 桌面环境,必须安装 gnome-terminal:
sudo apt install gnome-terminal
  • 卸载 Docker Desktop for Linux 的技术预览版或 beta 版。运行以下命令:
sudo apt remove docker-desktop

要彻底清理,请删除位于 $HOME/.docker/desktop 的配置和数据文件、位于 /usr/local/bin/com.docker.cli 的符号链接,并运行以下命令清除剩余的 systemd 服务文件:

rm -r $HOME/.docker/desktop
 sudo rm /usr/local/bin/com.docker.cli
 sudo apt purge docker-desktop

注:如果您已安装 Docker Desktop for Linux 技术预览版或 beta 版,您需要删除由这些软件包生成的所有文件,例如

~/.config/systemd/user/docker-desktop.service
~/.local/share/systemd/user/docker-desktop.service

安装 Docker Desktop

在 Ubuntu 上安装 Docker Desktop 的推荐方法,分三步:

  1. 设置Docker 的包版本库。
  2. 下载最新的DEB 包。
  3. 使用 apt 安装软件包

使用版本库安装

在新主机上首次安装 Docker Engine 之前,您需要设置 Docker 版本库。之后,您可以从版本库安装和更新 Docker。

1、设置Docker 的包版本库。

1)设置版本库

  1. 允许apt通过 HTTPS 使用存储库更新apt包索引并安装包:
$ sudo apt-get update

$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. 添加 Docker 的官方 GPG 密钥:
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. 使用以下命令设置版本库:
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

2)安装 Docker Engine

  1. 更新apt包索引,安装最新版本的 Docker Engine、containerd 和 Docker Compose,或者进入下一步安装特定版本:
$ sudo apt-get update
 $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

运行 apt-get update 时收到 GPG 错误?

您的默认 umask 可能设置不正确,导致无法检测到 repo 的公钥文件。运行以下命令,然后再次尝试更新您的存储库:

sudo chmod a+r /etc/apt/keyrings/docker.gpg

  1. 要安装特定版本的 Docker Engine,请在 repo 中列出可用版本,然后选择并安装:a. 列出您的版本库中可用的版本:
$ apt-cache madison docker-ce

docker-ce | 5:20.10.16~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:20.10.15~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:20.10.14~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:20.10.13~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

b. 使用第二列中的版本字符串安装特定版本,例如 5:20.10.16~3-0~ubuntu-jammy 。

$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin
  1. 通过运行 hello-world 镜像来验证 Docker Engine是否已正确安装。
$ sudo service docker start
$ sudo docker run hello-world

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

Docker Engine已安装并正在运行。该docker组已创建,但未向其中添加任何用户。需要使用sudo来运行 Docker 命令。

3)添加用户组(以非root用户身份管理Docker)

Docker 守护进程绑定到 Unix 套接字而不是 TCP 端口。默认情况下,Unix 套接字归root用户所有,其他用户只能使用sudo。 Docker 守护程序始终以root用户身份运行。

如果您不想在docker命令前加上sudo,请创建一个名为 Unix 组docker并将用户添加到其中。当 Docker 守护进程启动时,它会创建一个可供docker组成员访问的 Unix 套接字。

要创建docker组并添加您的用户:

  1. 创建docker组。
$ sudo groupadd docker
  1. 将您的用户添加到docker组中。
$ sudo usermod -aG docker $USER
  1. 注销并重新登录,以便重新评估您的组成员身份。如果在虚拟机上进行测试,可能需要重新启动虚拟机才能使更改生效。在桌面Linux环境(如X Windows)上,完全注销会话,然后重新登录在 Linux 上,您还可以运行以下命令来激活对组的更改:
$ newgrp docker
  1. 验证您可以在没有sudo的情况下运行docker命令。
$ docker run hello-world

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

如果在将用户添加到Docker组之前使用sudo运行Docker CLI命令,您可能会看到以下错误,这表明您的~/.docker/目录是由于命令没有sudo权限导致的。

WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied

要解决此问题,请删除~/.docker/目录(它会自动重新创建,但会丢失任何自定义设置),或使用以下命令更改其所有权和权限:

$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R

4)将 Docker 配置为开机启动

大多数当前的 Linux 发行版(RHEL、CentOS、Fedora、Debian、Ubuntu 16.04 和更高版本)用于systemd管理系统启动时启动的服务。在 Debian 和 Ubuntu 上,Docker 服务默认配置为在启动时启动。要在启动时为 Docker 和 Containerd自动启动其他发行版,请使用以下命令:

$ sudo systemctl enable docker.service
$ sudo systemctl enable containerd.service

要禁用此行为,请改用disable。

$ sudo systemctl disable docker.service
$ sudo systemctl disable containerd.service

2、下载最新的DEB 包。

3、使用 apt 安装软件包

$ sudo apt-get update
$ sudo apt-get install ./docker-desktop-<version>-<arch>.deb

注意:在安装过程结束时,由于 apt安装下载的包而显示错误。您可以忽略此错误消息。

N: Download is performed unsandboxed as root, as file '/home/user/Downloads/docker-desktop.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

通过deb包中所包含的安装脚本在安装后完成了几步配置:

安装脚本:

  • 设置 Docker Desktop 二进制文件的功能以映射特权端口并设置资源限制。
  • 将 Kubernetes 的 DNS 名称添加到 /etc/hosts.
  • 创建从 /usr/bin/docker到 /usr/local/bin/com.docker.cli的链接。

4、启动 Docker Desktop

要启动 Docker Desktop for Linux,请在 Applications菜单上搜索Docker Desktop并将其打开。这将启动鲸鱼菜单图标并打开 Docker Dashboard,报告 Docker Desktop 的状态。

或者,打开终端并运行:

$ systemctl --user start docker-desktop

当 Docker Desktop 启动时,它会创建一个Docker CLI 可以用作目标的专用上下文,并将其设置为当前使用的上下文。这是为了避免与可能在 Linux 主机上运行并使用默认上下文的本地 Docker 引擎发生冲突。关闭时,Docker Desktop 会将当前上下文重置为前一个上下文。

Docker Desktop 安装程序更新主机上的 Docker Compose 和 Docker CLI 二进制文件。它安装了 Docker Compose V2,并让用户可以选择从“设置”面板将其链接为 docker-compose。Docker Desktop安装了新的Docker CLI二进制文件,该文件在 /usr/local/bin中包含云集成功能,并在 /usr/local/bin/com.docker.cli中创建到旧Docker CLI的符号链接。

成功安装 Docker Desktop 后,您可以通过运行以下命令检查这些二进制文件的版本:

注意:如在当前终端执行以下命令没问题,而换一个新的终端执行docker version时发现有权限问题,重启系统即可。

$ docker compose version
Docker Compose version v2.12.0

$ docker --version
Docker version 20.10.20, build 9fdeb9c

$ docker version
Client: Docker Engine - Community
 Cloud integration: v1.0.29
 Version:           20.10.20
 API version:       1.41
 Go version:        go1.18.7
 Git commit:        9fdeb9c
 Built:             Tue Oct 18 18:20:18 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.20
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.7
  Git commit:       03df974
  Built:            Tue Oct 18 18:18:08 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.8
  GitCommit:        9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

要启用 Docker Desktop 在登录时启动,请从 Docker 菜单中选择 设置>常规>登录时启动 Docker Desktop。

或者,打开终端并运行:

$ systemctl --user enable docker-desktop

要停止 Docker Desktop,请单击鲸鱼菜单托盘图标以打开 Docker 菜单并选择退出 Docker Desktop。

或者,打开终端并运行:

$ systemctl --user stop docker-desktop

5、升级 Docker Desktop

发布 Docker Desktop 的新版本后,Docker UI 会显示通知。每次要升级并运行 Docker Desktop 时,都需要下载新包:

$ sudo apt-get install ./docker-desktop-<version>-<arch>.deb

 6、登录并开始

快速入门指南

安装Docker Desktop后,将启动快速入门指南。它包括一个简单的练习,构建一个示例Docker镜像,将其作为容器运行,将镜像推送到Docker Hub并保存。

docker容器内安装 maven docker容器内安装桌面_容器

要按需运行快速入门指南,请选择,然后选择快速入门指南。

 有关更详细的指南,请参阅 Get started.

登录 Docker 桌面

建议使用Docker Desktop 右上角的登录/创建 ID选项进行身份验证。

登录后,可以直接从 Docker Desktop 访问 Docker Hub 存储库。

与匿名用户相比,经过身份验证的用户获得更高的拉取率限制。例如,如果您通过了身份验证,则每 6 小时您会获得 200 次拉取,而匿名用户的每个 IP 地址每 6 小时会获得 100 次拉取。有关详细信息,请参阅下载速率限制。

 两因素身份验证

Docker Desktop 使您能够使用双重身份验证登录 Docker Hub。双重身份验证在访问 Docker Hub 帐户时提供了额外的安全层。

在通过 Docker Desktop 登录 Docker Hub 帐户之前,您必须在 Docker Hub 中启用双重身份验证。有关说明,请参阅为 Docker Hub 启用双重身份验证。

 启用双因素身份验证后:

  • 转到 Docker 桌面菜单,然后选择登录/创建 Docker ID。
  • 输入您的 Docker ID 和密码,然后单击登录。
  • 成功登录后,Docker Desktop 会提示您输入验证码。输入手机中的六位数代码,然后单击验证。

 Linux 用户的凭据管理

Docker Desktop 依赖于pass(通行证)将凭据存储在 gpg2 加密文件中。在从 Docker 仪表板或 Docker 菜单登录 Docker Hub 之前,您必须初始化pass。如果您尚未初始化pass, Docker Desktop则会显示警告。 

您可以使用 gpg 密钥初始化传递。要生成 gpg 密钥,请运行:

$ gpg --generate-key
...
GnuPG needs to construct a user ID to identify your key.

Real name: Fbbqt
Email address: fbbqt@example.com
You selected this USER-ID:
    "Fbbqt <fbbqt@example.com>"

Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
...
pub   rsa3072 2022-03-31 [SC] [expires: 2024-03-30]
      7865BA9185AFA2C26C5B505669FC4F36530097C2
uid                      Fbbqt <fbbqt@example.com>
sub   rsa3072 2022-10-21 [E] [expires: 2024-10-20]

要初始化pass,请运行:

fbbqt@ubuntu:~$ pass init 7865BA9185AFA2C26C5B505669FC4F36530097C2
mkdir: created directory '/home/fbbqt/.password-store/'
Password store initialized for 7865BA9185AFA2C26C5B505669FC4F36530097C2

初始化pass后,您可以登录Docker Dashboard 并拉取您的私有镜像。当 Docker CLI 或 Docker Desktop 使用凭据时,可能会弹出用户提示输入您在 gpg 密钥生成期间设置的密码。

$ docker pull fbbqt/privateimage
Using default tag: latest
latest: Pulling from fbbqt/privateimage
3b9cc81c3203: Pull complete 
Digest: sha256:3c6b73ce467f04d4897d7a7439782721fd28ec9bf62ea2ad9e81a5fb7fb3ff96
Status: Downloaded newer image for fbbqt/privateimage:latest
docker.io/fbbqt/privateimage:latest