ubunut 20.04 Docker安装简易教学
ubunut 20.04 Docker安装简易教学
前言
在容器化技术方面,Ubuntu 20.04更适合使用Docker,而Ubuntu 22.04则可以考虑拥抱Podman。Podman作为新一代容器工具,支持为不同仓库配置不同镜像源,且无需守护进程,安全性更高。本教程将详细介绍Docker的安装与配置,同时提及Podman的优势。
在容器化技术领域,选择合适的工具对系统性能和工作流程至关重要。Ubuntu 20.04更适合使用Docker,这是由于其生态系统成熟且与该版本兼容性优秀;而Ubuntu 22.04则可以考虑拥抱Podman,利用其现代化设计和增强的安全特性。
Podman作为新一代容器工具,带来了一些甜点:
支持为不同仓库配置不同镜像源,解决了Docker单一镜像源的限制
比如你可以发现尽管配置了国内的镜像源,但是在拉取ghcr.io这类源的时候仍然很慢
采用无守护进程架构,减少了系统资源占用
实现了真正的rootless容器,大幅提升了安全性
现在docker也支持rootless了,所以点用户使用上差不多
提供了与Docker命令完全兼容的接口,降低了迁移成本
是的,你可以安装podman后,仍然使用docker指令,podman会出手的
下面开始介绍
一、安装Docker
首先,不要直接使用apt install docker
命令,这会安装一个非官方的Docker包。正确的安装步骤如下:
1.卸载非官方的依赖
Docker官方文档明确指出以下包是非官方的,可能与官方Docker Engine包冲突:
- docker.io (Ubuntu的仓库版本)
- docker-compose
- docker-compose-v2
- docker-doc
- podman-docker
- 单独安装的containerd和runc
# 卸载所有可能冲突的包
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
2.更新包索引,安装依赖
# 更新包索引并安装依赖
# Add Docker's official GPG key:
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
# Add the repository to Apt sources:
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
3.安装docker-engine
3.1安装最新版
# # 安装最新版Docker Engine、CLI、containerd和Docker Compose
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3.2.安装特定版本
3.2.1 列出可用版本
安装前,您可以首先查看仓库中可用的Docker版本:
# 列出仓库中所有可用的Docker版本
apt-cache madison docker-ce | awk '{ print $3 }'
输出会显示类似以下内容的版本列表:
5:28.0.4-1~ubuntu.24.04~noble
5:28.0.3-1~ubuntu.24.04~noble
[更多版本...]
3.2.1.2. 选择并安装特定版本
确定您想要安装的版本后,使用以下命令安装该特定版本:
# 设置您想要安装的版本字符串
VERSION_STRING=5:28.0.4-1~ubuntu.24.04~noble
# 安装特定版本的Docker
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
二、安装NVIDIA Container Toolkit
2. 配置NVIDIA Container Toolkit
避免使用过时的nvidia-docker2
安装方式,而是使用新的NVIDIA Container Toolkit:
# 添加NVIDIA Container Toolkit仓库密钥
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 更新包索引
sudo apt update
# 安装NVIDIA Container Toolkit
sudo apt install -y nvidia-container-toolkit
# 重启Docker服务以应用更改
sudo systemctl daemon-reload
sudo systemctl restart docker
3. 优化Docker配置
Docker的默认配置可能不够理想,需要进行以下优化:
配置Docker的daemon.json
编辑/etc/docker/daemon.json
文件:
sudo vim /etc/docker/daemon.json
我们可以看到安装nvidia组件后,这里的已经写入了配置,但是这个配置只是上我们可以正常使用–runtime=nvidia这个参数,我们希望默认就使用nvidia的runtime,所以需要加一个默认参数,
docker的仓库配置不支持对于不同的仓库配置不同的镜像源,
Podman和containerd的nerdctl客户端支持为不同仓库配置不同的镜像,这一点优于docker
docker有个问题,长期使用,docker log会非常大,所以我们要限制一下
docker的默认数据目录,你拉取的镜像都会在这里,有些服务器管理得很差劲,没有把所有的存储都挂载在/目录下,导致后续使用上有问题,比如我台服务器,就是在/data目录下挂载了很大的磁盘,因此我需要调整我docker的数据目录,
添加以下内容(根据需要调整):
{
"default-runtime": "nvidia",
"iptables": true,
"log-driver": "json-file",
"log-opts": {
"max-file": "3",
"max-size": "50m"
},
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live/"
],
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"experimental": false,
"data-root": "/data/docker"
}
这个配置主要做了以下优化:
- 设置默认运行时为NVIDIA,支持GPU
- 限制日志大小,避免长期使用导致日志文件过大
- 添加国内镜像源,加速镜像拉取,因为docker不支持多镜像源解析,所以比如
ghcr.io
这些仓库需要用host
解析,或者手动转写地址 - 修改数据目录为
/data/docker
,适用于数据盘挂载在其他位置的情况
注意:如果你的服务器
/data
目录不存在或未挂载足够大的磁盘,请根据实际情况调整data-root
路径。
重启Docker服务应用配置
sudo systemctl daemon-reload
sudo systemctl restart docker
4. 用户权限配置
为避免每次使用Docker命令都需要使用sudo
,可以将当前用户添加到docker用户组:
# 添加当前用户到docker组
sudo usermod -aG docker $USER
# 使更改生效(或者重新登录)
newgrp docker
5. 测试Docker + NVIDIA配置
# 测试基本Docker功能
docker run --rm hello-world
# 测试NVIDIA支持
docker run --rm -it --gpus all ubuntu nvidia-smi
如果看到NVIDIA GPU信息输出,则表示配置成功。
6. 好的,现在还有最后一步,重启你的服务器
不重启的话,你可能遇到这种问题,使用-p后,其他程序是无法访问本地服务的,我们还需要重启一下
比如我在1.202上启动了一个服务,端口8880,本地可以访问到,但是1.204就访问不到了
本地可以访问,其他机器访问不到