在 Linux 上安装并配置 Docker
前言
Docker 是一个开源的应用容器引擎,可以使得用户在不同的电脑上运行相同的应用程序。它通过将应用和所有需要的文件、库、设置等打包在一个叫做“容器”的小盒子里,确保这个应用在任何地方都能顺利运行。就像把一个应用和它的环境装进一个箱子,拿到别的地方就能直接用一样。Docker 使用 Go
开发,它的社区版本开源且免费,因此是开发、生产环境中的容器引擎首选。本文将以 Docker Engine 社区版为例,讲述如何在 Ubuntu 22.04.5 LTS 的开发环境中安装最新版本的 Docker Engine。
开始安装
检查系统版本
以 Debian/Ubuntu 为例,当前版本的 Docker 支持以下的的操作系统:
-
Debian
- Debian Bullseye 11 (oldstable)
- Debian Bookworm 12 (stable)
-
Ubuntu
- Ubuntu Focal 20.04 (LTS)
- Ubuntu Jammy 22.04 (LTS)
- Ubuntu Noble 24.04 (LTS)
- Ubuntu Oracular 24.10
请核对系统版本,确保当前需要安装 Docker 的 Linux 发行版在上述支持列表中。
卸载旧版的 Docker 或冲突软件包
在终端中,使用以下命令来卸载旧版的 Docker 或冲突软件包:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove $pkg;
done
执行后,apt 包管理器会卸载掉 docker.io、docker-doc、docker-compose、docker-compose-v2、podman-docker、containerd、runc 这些软件包,其中不乏有我们可能熟悉的 docker-compose 和 containerd 等软件包,在最新的 Docker 版本中,这些软件包的包名或多或少都发生了一些变化,所以弃用原有的这些软件包。
设置 apt 的仓库包源
使用以下命令来设置 Docker 的 apt 存储库:
# 添加 Docker 的官方 GPG 密钥:
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/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 将仓库添加至 apt 的包源中
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
细心的读者可能发现,上面这幅图中似乎出现了错误。是的,如果由于网络状态不佳或某些其它原因导致设置 apt 仓库包源时出现了错误,重新将上述的命令执行即可,直至终端的输出中没有“错误”、“Error”等字样。
使用 apt 包管理器来安装 Docker
确保 apt 仓库包源设置完毕后,执行以下命令来最新的 Docker Engine:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
截止 2025 年 4 月,最新版本的 Docker 安装需要下载接近 500 MiB 的文件,安装时间可能很长,等待完成即可。当然,笔者已提前安装了,所以下面的图片仅供参考:
执行以下命令来运行 Docker 的 Hello-World 镜像:
sudo docker run hello-world
若您身处中国大陆,那极大可能是会报错的,其原因就是 Docker Hub 无法访问。若出现了无法拉取 Docker 镜像的报错,请参照下一小节来配置 Docker 镜像源;若无出现报错,那么恭喜:您的网络是天选的爬资源圣体 —— 没被 DNS 污染或直接封禁,但对于的 Docker 的使用,还是强烈建议配置镜像源。
配置 Docker 镜像源
由于自 2024 年 6 月以来,Docker Hub 被中国大陆地区禁止访问,因此需要我们配置镜像源来恢复对 Docker Hub 的访问,以保证能正常推送/拉取 Docker 镜像。
先检查 /etc/docker
是否存在(一般都是存在的),若不存在,则使用以下命令创建 /etc/docker
目录:
# 检查 /etc/docker 目录
ll /etc/docker
# 若不存在,才执行手动创建
mkdir -p /etc/docker
然后切换至 /etc/docker
目录下,使用 gedit 编辑器创建一个名为 daemon.json
的文件:
cd /etc/docker
sudo gedit ./daemon.json
接着,在 gedit 编辑器中输入以下内容来配置 Docker 镜像源:
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
保存,并在终端中使用 systemctl
命令重启一下 Docker 的守护进程:
sudo systemctl daemon-reload
sudo systemctl restart docker
然后在终端中检查一下 Docker 的守护进程的情况,若 Active 情况显示为 active (running),即代表目前 Docker 的守护进程已正常运行:
最后,再运行 sudo docker run hello-world
,若出现下图所示的字样,则代表镜像源和 Docker 都配置完成了:
以非 root 用户来管理 Docker(可选)
由于 Docker 守护进程是直接绑定绑定到 Unix 套接字的,而不是 TCP 端口。而在默认情况下,Docker 守护进程是 root 用户,其他用户只能使用 sudo
来提权。也就是所, Docker 守护进程始终作为 root 用户的权限。
如果您不想在使用 Docker 时前面一直加 sudo
,那么可以将自己加入到 Docker 的用户组中,这样自己在对 Docker 进行管理时,相当于在使用 root 用户权限。
创建 docker 用户组
在终端中,使用如下命令来创建 docker 用户组:
sudo groupadd docker
然后,将自己添加至 docker 用户组中:
# $USER 变量代表当前的用户
sudo usermod -aG docker $USER
接着,重启计算机,登入后再在终端中不使用 sudo
来运行 Docker 的 Hello-World 镜像:
docker run hello-world
若出现如下字样,则代表我们的用户/用户组配置成功,在未来不需要频繁使用 sudo
来进行 Docker 的操作和管理了:
总结
本文简单地讲述了如何在 Linux 上安装 Docker Engine,并配置 Docker 镜像源与系统中的用户组来简化 Docker 的操作和管理。实际上,Docker 是十分强大的容器引擎工具,换言之就是强大的环境管理工具,笔者已经有想法未来使用 Docker 来装配计算机视觉相关的环境了,应该会比现在的本地安装的便捷程度和容灾程度好上不少。对 Docker 的安装与配置流程还有任何的看法与补充,欢迎在下方留言评论~