当前位置: 首页 > news >正文

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"
}

这个配置主要做了以下优化:

  1. 设置默认运行时为NVIDIA,支持GPU
  2. 限制日志大小,避免长期使用导致日志文件过大
  3. 添加国内镜像源,加速镜像拉取,因为docker不支持多镜像源解析,所以比如ghcr.io这些仓库需要用host解析,或者手动转写地址
  4. 修改数据目录为/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就访问不到了
在这里插入图片描述
本地可以访问,其他机器访问不到
在这里插入图片描述

http://www.dtcms.com/a/123198.html

相关文章:

  • 嵌入式八股---计算机网络篇
  • QT中怎么隐藏或显示最大化、最小化、关闭按钮
  • python爬取1688.item_search_best-查询榜单列表返回数据说明
  • KL散度的三种估计k1 k2 k3
  • 电子生产加工行业数字化转型:破局“多品种小批量”的智造跃迁
  • WinForm真入门(13)——ListBox控件详解
  • 天梯集训+代码打卡笔记整理
  • Apipost自定义函数深度实战:灵活处理参数值秘籍
  • 大模型训练关键两步
  • 物联网卡(NB-IoT/4G)技术详解
  • Flexoo 柔性薄膜加热片技术全解析:从原理到应用优势
  • Ubuntu 24.04 中文输入法安装
  • MIT6.828 Lab5 Copy-on-Write Fork for xv6
  • BUUCTF-web刷题篇(19)
  • Vulhub-DC-3靶机通关攻略
  • 【MySQL】——理解事务的隔离性、MVCC、当前读、快照读
  • 力扣 922. 按奇偶排序数组 II :双指针原地交换
  • 2025年第十八届“认证杯”数学中国数学建模网络挑战赛【ABCD题】思路分析
  • Java 实现 List<String> 与 String 互转
  • CentOS Stream release 9安装 MySQL(二)
  • 在Halcon的语义分割中,过度拟合解决方法
  • 什么是中性线、零线、地线,三相四线制如何入户用电
  • JVM底层详解
  • ANTLR v4 中文文档1:语法词典Grammar Lexicon部分
  • NginxWebUI:可视化 Nginx 配置管理工具,告别繁琐命令行!
  • 高并发内存池(三):PageCache(页缓存)的实现
  • Window代码向Linux平台移植问题汇总
  • pytorch TensorDataset与DataLoader类
  • GRBL运动控制算法(五)脉冲生成Bresenham算法
  • 基于 Spring Boot 瑞吉外卖系统开发(三)