当前位置:首页 > CN2资讯 > 正文内容

Ubuntu 20安装Docker全攻略:3分钟避坑指南+版本选择技巧

1周前 (05-30)CN2资讯

sudo apt remove -y docker docker-engine docker.io containerd runc

2.1 通过官方仓库安装Docker Engine

我的首选安装方式是从Docker官方仓库获取最新稳定版本。先给系统添加可信密钥环,执行curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg时,注意终端不能出现gpg: no valid OpenPGP data found的警告。遇到网络波动导致密钥下载失败的情况,可以改用sudo mkdir -p /etc/apt/keyrings && curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg通过国内镜像源加速。

配置软件源时需精准匹配系统代号,Ubuntu 20.04对应的代号是focal。建立仓库链接的命令echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list要逐字核对,曾经有运维同事把signed-by参数写成sign-by导致后续安装报错。更新源清单后运行sudo apt update,应该在输出列表里看到docker-ce-stable分支的新条目。

2.2 使用deb包手动安装方式

当服务器无法连接外网时,手动安装deb包成为救命稻草。先到https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/ 找特定版本包,比如docker-ce_24.0.7-1~ubuntu.20.04~focal_amd64.deb。用wget下载到本地后,执行sudo dpkg -i docker-ce*.deb时经常会出现依赖缺失的红字报错,这时候需要提前备好containerd、docker-cli等依赖包的deb文件。

手动安装更适合需要固定特定版本的生产环境。我有次在金融系统部署时,客户指定必须使用docker-ce=5:20.10.23~3-0~ubuntu-focal版本,只能通过手动下载30多个关联deb包逐个安装。记得用apt-cache depends docker-ce查看完整依赖树,避免漏装关键组件导致服务异常启动。

2.3 Docker CE与Docker Engine版本选择指南

版本命名规则变化曾让我栽过跟头。2017年后Docker CE(社区版)与EE(企业版)的划分已调整为Docker Engine单一品牌,但apt仓库里仍保留docker-ce的包名。通过apt list -a docker-ce能看到类似24.0.7-1~ubuntu.20.04~focal的版本号结构,其中5:24.0.7的5代表包版本序列,比单纯24.0.7更易追踪更新路径。

生产环境建议锁定次要版本,比如sudo apt install docker-ce=5:24.0.7-1~ubuntu.20.04~focal避免自动升级到新主版本。测试环境可用docker-ce-clidocker-ce组合安装最新版,但要注意containerd版本兼容性——有次升级后容器无法启动,回退containerd到1.6.9版本才解决。

3.1 运行测试容器验证基础功能

装完Docker后的第一个动作就是跑个hello-world容器试试水。在终端敲入sudo docker run hello-world,当看到那只熟悉的鲸鱼图案和"Hello from Docker!"的欢迎信息,悬着的心才算放下。有次在客户现场遇到镜像拉取超时,发现是DNS配置问题,临时改用sudo docker run --dns 8.8.8.8 hello-world才成功加载测试镜像。

新手常会遇到权限拒绝的报错,表现为"Got permission denied while trying to connect to the Docker daemon socket"。这时候需要把当前用户加入docker组,执行sudo usermod -aG docker $USER后重新登录系统。记得用docker run --rm alpine echo "导管测试"验证中文环境支持,避免后续开发时容器内出现乱码。

3.2 检查Docker服务运行状态

服务是否正常启动直接决定后续操作成败。运行sudo systemctl status docker时,关注输出中的"Active: active (running)"绿色标识。有次凌晨升级内核后服务异常,发现状态显示"inactive (dead)",用journalctl -u docker.service --since "2024-01-01 00:00:00"查日志才发现是cgroup驱动不兼容。

配置开机自启是生产环境必备操作,执行sudo systemctl enable docker会创建符号链接到systemd启动目录。测试环境中偶尔需要重启服务,掌握sudo systemctl restart docker比直接reboot服务器更优雅。遇到端口占用导致服务启动失败时,netstat -tulnp | grep 2375能快速定位冲突进程。

3.3 查看版本信息确认组件完整性

版本一致性检查是部署后的重要环节。执行docker version会分两栏显示Client和Server的版本信息,特别注意两者是否匹配。曾遇到客户端24.0.7连接服务端23.0.1的情况,导致部分新命令无法执行,需要重新用sudo apt install --only-upgrade docker-ce对齐版本。

docker info输出的信息量更大,包含存储驱动、镜像数量、运行容器等关键数据。重点关注"Server Version"和"Containerd Version"的兼容性,有次升级后containerd从1.6.9跳到1.7.3导致旧容器崩溃,回退时需要用sudo apt install containerd.io=1.6.9-1指定版本。通过docker-compose --versiondocker buildx version还能验证扩展组件的完整性,避免构建工具链缺失。

4.1 配置非root用户docker权限

每次操作都要加sudo实在太麻烦。我习惯安装后立即把常用账号加入docker组,执行sudo usermod -aG docker $USER这条命令。新用户在终端看到"docker: command not found"提示别慌,注销重新登录就能生效。上次在团队服务器配置时忘做这步,结果开发同事的CI/CD流水线一直报权限错误。

真正的权限问题藏在组权限里。检查/etc/group文件确认用户名已出现在docker组条目中,有时需要手动激活组变更newgrp docker。生产环境我会用docker run --user 1001指定容器用户ID,避免直接使用root账户运行容器,这个习惯帮我拦住了好几次安全漏洞。

4.2 设置国内镜像加速器

拉取镜像卡在90%进度太折磨人。我首选阿里云镜像加速器,登录容器镜像服务控制台就能拿到专属加速地址。修改/etc/docker/daemon.json时记得保留原有配置,完整写法是{"registry-mirrors":["https://xxxx.mirror.aliyuncs.com"]}。有次误删了逗号导致服务启动失败,幸亏提前备份了原文件。

网易镜像源也很稳定,地址填https://hub-mirror.c.163.com就行。配置完成后必须执行sudo systemctl daemon-reload && sudo systemctl restart docker双重生效。测试时用docker pull ubuntu观察下载速度,从原先的10KB/s飙升到8MB/s的感觉特别爽。定期运行docker info | grep Mirrors还能验证配置是否持续生效。

4.3 Docker服务启停与自动启动设置

服务器维护时免不了操作服务状态。重启容器引擎就用sudo systemctl restart docker,比起直接重启主机优雅得多。临时故障排查我会先sudo systemctl stop docker停服务,修完再sudo systemctl start docker启动。有次磁盘爆满导致服务异常,就是靠这套操作保住了正在运行的数据库容器。

生产环境必须设置开机自启。执行sudo systemctl enable docker创建systemd链接,重启后用systemctl is-enabled docker确认返回"enabled"。测试服务器相反,我会特意加sudo systemctl disable docker防止自动启动。突发断电后最怕服务没起来,所以每次维护完都顺手敲sudo systemctl status docker | grep Active看绿色running标识。

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/17532.html

    分享给朋友:

    “Ubuntu 20安装Docker全攻略:3分钟避坑指南+版本选择技巧” 的相关文章

    如何在Ubuntu上安装BBR Plus以提高网络性能

    在谈论BBR Plus之前,我们得先来了解一下BBR。BBR即“Bottleneck Bandwidth and Round-trip time”的缩写,这是Google推出的一种拥塞控制算法,它被集成在最新的Linux内核中。它的核心理念在于通过更合理的方式来计算网络的瓶颈带宽和往返时间。这种算法...

    全面了解扩容:定义、分类及最佳实践

    扩容的定义与重要性 扩容这个词听起来似乎很简单,但它其实蕴含了很多技术细节和实际应用。简单来说,扩容就是对已有系统或设备的能力进行增强,尤其是在存储或处理能力上。想象一下,当你的业务正在快速增长,客户数量激增,原本的系统可能会面临压力,这时扩容就显得尤为重要。通过扩容,我可以在需要的时候增加更多的存...

    如何使用RackNerd优惠码进行主机购买:节省开支的最佳策略

    RackNerd是一家成立于2017年的国外主机公司,作为一家新生力量,它迅速在市场上占据了一席之地。它的使命是为全球用户提供可靠且高性能的主机服务,帮助他们搭建自己的网络基础设施。我最喜欢RackNerd的地方是他们始终如一地致力于客户体验,这让我在使用他们的服务时非常安心。 RackNerd的服...

    Host Winds:可再生能源的关键因素与未来发展潜力

    什么是 Host Winds? 在谈论可再生能源时,Host Winds 是一个不容忽视的概念。简单来说,Host Winds 指的就是那些发生在某一特定区域内的风速和风向。这些风的模式能够极大地影响一个地区的风力发电潜力。想象一下,如果你在一个风速稳定且方向一致的地区,那么利用这些风来发电就会更加...

    选择和管理海外服务器的最佳策略与优势

    在如今这个信息高度发达的时代,海外服务器逐渐成为许多企业的不二选择。简单来说,海外服务器是指那些位于中国境外的数据处理设备。这些服务器致力于为全球用户提供高效的服务,不论是数据存储、网站托管还是其他在线服务。通过使用海外服务器,企业能够接触到更广阔的市场以及可定制的解决方案,以满足特定需求。 选择海...

    APT攻击解析:如何应对高级持续性威胁

    APT攻击,或称为高级持续性威胁,是一种复杂的网络攻击形式。这种攻击的发起者通常是具有高度组织性和专业性的攻击者,可能是国家支持的黑客组织,或者其他有目的的恶意实体。他们的目标不仅仅是短期内造成损害,而是着眼于更长远的战略性目标,比如窃取国家机密、企业的核心技术或其他商业秘密。这种攻击对目标组织的声...