如果安装了 Docker Desktop,则已经安装了完整的 Docker,包括 Compose。
一、在 Ubuntu 上安装 Docker Desktop
先决条件
要成功安装 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