如果安装了 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 的推荐方法,分三步:
- 设置Docker 的包版本库。
- 下载最新的DEB 包。
- 使用 apt 安装软件包
使用版本库安装
在新主机上首次安装 Docker Engine 之前,您需要设置 Docker 版本库。之后,您可以从版本库安装和更新 Docker。
1、设置Docker 的包版本库。
1)设置版本库
- 允许apt通过 HTTPS 使用存储库更新apt包索引并安装包:
$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- 添加 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
- 使用以下命令设置版本库:
$ 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
- 更新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
- 要安装特定版本的 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
- 通过运行 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组并添加您的用户:
- 创建docker组。
$ sudo groupadd docker
- 将您的用户添加到docker组中。
$ sudo usermod -aG docker $USER
- 注销并重新登录,以便重新评估您的组成员身份。如果在虚拟机上进行测试,可能需要重新启动虚拟机才能使更改生效。在桌面Linux环境(如X Windows)上,完全注销会话,然后重新登录在 Linux 上,您还可以运行以下命令来激活对组的更改:
$ newgrp docker
- 验证您可以在没有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并保存。
要按需运行快速入门指南,请选择,然后选择快速入门指南。
有关更详细的指南,请参阅 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