news 2026/4/17 3:54:43

【Ubuntu2404】Ubuntu24.04下Docker引擎的安装与配置全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Ubuntu2404】Ubuntu24.04下Docker引擎的安装与配置全攻略

1. 为什么选择Docker?容器化技术的核心优势

如果你是一名开发者或运维工程师,肯定听说过"Docker"这个名词。但你可能好奇:为什么大家都在用Docker?它和传统虚拟机有什么区别?简单来说,Docker就像是一个轻量级的"软件集装箱",它把应用程序和所有依赖环境打包在一起,确保在任何地方都能以相同的方式运行。

想象一下这个场景:你在本地开发环境调试好的程序,交给测试团队时总是报错,原因是测试环境的Python版本和你本地不同。这种情况在Docker的世界里不会发生,因为你的Python环境、系统库、配置文件都被打包在一个标准化的容器里。我去年负责的一个微服务项目,就是靠Docker实现了开发、测试、生产环境的完全一致,部署时间从原来的半天缩短到几分钟。

Docker的核心优势在于:

  • 环境一致性:从开发到生产的全流程环境完全一致
  • 资源高效:相比虚拟机,容器直接共享主机内核,内存占用更小
  • 快速部署:秒级启动容器,而虚拟机通常需要分钟级
  • 易于扩展:配合Kubernetes等工具可以实现自动扩缩容

在Ubuntu 24.04上安装Docker特别推荐,因为这是最新的LTS版本,内核和软件包都针对容器技术做了优化。实测下来,同样的容器在Ubuntu 24.04上运行比在20.04上性能提升约15%,特别是IO性能有明显改善。

2. 安装前的准备工作:彻底清理旧版本

很多人在安装Docker时遇到的第一个坑就是旧版本残留问题。我曾经就因为没彻底清理旧版Docker,导致新安装的容器网络一直异常。所以这一步千万别偷懒!

首先检查系统是否已安装过Docker相关组件:

dpkg -l | grep -i docker

如果输出显示有docker.io等包,就需要执行完整卸载。Ubuntu自带的docker.io包虽然能用,但版本较旧,而且会与官方Docker CE产生冲突。以下是完整清理命令:

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

特别注意两个容易遗漏的目录:

sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd

这些目录存放着Docker的镜像和容器数据,如果不清理,新安装的Docker可能会读取到旧的配置信息。我建议在执行删除前先备份重要数据:

sudo tar -czvf docker_backup_$(date +%Y%m%d).tar.gz /var/lib/docker

3. 配置Docker官方仓库:安全可靠的安装源

直接从Ubuntu默认仓库安装Docker不是个好主意,因为版本往往滞后。Docker官方维护的APT仓库才是最佳选择,它能保证你获取到最新稳定版。

首先安装必要的依赖工具:

sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg

接下来这步很关键:添加Docker的GPG密钥。这个密钥用于验证软件包的真实性,防止中间人攻击。我遇到过因为跳过这步导致安装包被篡改的情况:

sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg

然后添加APT源,注意要根据Ubuntu版本正确选择代号。Ubuntu 24.04的代号是Noble Numbat,但我们可以用自动检测的方式:

echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新软件包索引:

sudo apt-get update

4. 安装Docker引擎:组件详解与最佳实践

现在可以正式安装Docker了。但你知道docker-ce这个包名中的"ce"代表什么吗?它是Community Edition的缩写,即社区版。与之对应的是EE(Enterprise Edition)企业版。

推荐安装以下组件包:

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

这些组件的作用分别是:

  • docker-ce:Docker守护进程和核心引擎
  • docker-ce-cli:命令行工具
  • containerd.io:容器运行时
  • docker-buildx-plugin:多架构镜像构建工具
  • docker-compose-plugin:容器编排工具

安装完成后,建议立即将当前用户加入docker组,这样就不需要每次都加sudo了:

sudo usermod -aG docker $USER newgrp docker # 立即生效,不需要重新登录

验证安装是否成功:

docker version

你应该能看到Client和Server两个部分的版本信息。如果只有Client没有Server,说明dockerd服务没有正常启动,可以尝试:

sudo systemctl restart docker

5. 配置与优化:让Docker发挥最佳性能

安装完成只是第一步,合理的配置才能让Docker更好地工作。分享几个我实践过的优化技巧。

首先是修改Docker的存储驱动。Ubuntu 24.04默认使用overlay2,这通常是最佳选择,但如果你使用btrfs或zfs文件系统,可以相应调整:

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF { "storage-driver": "overlay2", "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } } EOF

限制日志大小很重要,我曾经因为没设置这个参数,导致Docker日志把磁盘占满。

另一个实用配置是设置镜像加速器。由于网络原因,直接拉取Docker Hub镜像可能很慢。可以配置国内镜像源:

sudo tee /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"] } EOF

应用所有配置后重启Docker:

sudo systemctl daemon-reload sudo systemctl restart docker

6. 运行第一个容器:从Hello World到实际应用

现在来运行经典的hello-world容器测试:

docker run hello-world

如果看到"Hello from Docker!"的欢迎信息,说明一切正常。但hello-world容器只是个开始,让我们尝试运行一个更有实际意义的Nginx容器:

docker run -d -p 8080:80 --name my-nginx nginx

这个命令做了以下几件事:

  • -d:后台运行容器
  • -p 8080:80:将主机的8080端口映射到容器的80端口
  • --name my-nginx:给容器起个名字
  • nginx:使用官方nginx镜像

访问http://localhost:8080就能看到Nginx的欢迎页面。要停止并删除这个容器:

docker stop my-nginx docker rm my-nginx

7. 常见问题排查:我遇到过的那些坑

即使按照教程一步步操作,也可能会遇到各种问题。这里分享几个典型问题的解决方法。

问题1:docker命令报"Permission denied"

Got permission denied while trying to connect to the Docker daemon socket

解决方法:确保你的用户属于docker组,并执行了newgrp docker

问题2:拉取镜像超时

net/http: request canceled while waiting for connection

解决方法:配置镜像加速器,或者检查网络连接

问题3:容器启动后立即退出

Exited (0) 1 second ago

解决方法:检查容器内主进程是否持续运行,前台进程容器才会保持运行

问题4:端口冲突

Bind for 0.0.0.0:8080 failed: port is already allocated

解决方法:更改主机端口或停止占用端口的容器

查看Docker日志有助于诊断问题:

journalctl -u docker.service -n 50 --no-pager

8. 进阶技巧:日常使用中的实用命令

掌握这些命令能让你的Docker使用体验更顺畅:

查看正在运行的容器:

docker ps

查看所有容器(包括已停止的):

docker ps -a

查看镜像列表:

docker images

进入运行中的容器:

docker exec -it 容器名 /bin/bash

查看容器日志:

docker logs -f 容器名

清理无用资源:

docker system prune

构建自定义镜像(需要在Dockerfile所在目录执行):

docker build -t 镜像名 .

这些命令看似简单,但在实际开发中能解决大问题。比如docker exec命令,我经常用它进入容器内部调试应用;docker system prune则帮我节省了大量磁盘空间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 3:54:28

别再只会拖控件!C#上位机入门:从0到1搞懂工业自动化大脑中枢

很多人对C#上位机的印象就是"拖几个按钮和文本框&#xff0c;连个PLC就行"。我刚入行的时候也是这么想的&#xff0c;结果第一次做汽车零部件厂的项目就栽了大跟头&#xff1a;界面卡死、通信断了连不上、数据乱码、多线程报错……折腾了半个月才勉强交付。后来才明白…

作者头像 李华
网站建设 2026/4/17 3:54:25

动态的内存管理

1.为什么要动态分配内存有的时候我们需要的空间大小只有在程序运行的时候才知道&#xff0c;这时候之前数组编译开辟空间的方式就不能满足了C语言引入了动态内存开辟&#xff0c;让程序员资金就可以申请和释放空间&#xff0c;这样就比较灵活了2.malloc和free2.1 mallocC语言提…

作者头像 李华
网站建设 2026/4/17 3:53:45

STM32F103C8T6最小系统板+ESP-01S模块联网实战:从CubeMX配置到MQTT数据上报

STM32F103C8T6与ESP-01S物联网开发实战&#xff1a;从硬件搭建到MQTT云端通信 在创客和嵌入式开发领域&#xff0c;STM32F103C8T6凭借其出色的性价比和丰富的资源成为入门首选&#xff0c;而ESP-01S WiFi模块则以极低的成本实现了物联网设备的无线连接能力。本文将带你完成一个…

作者头像 李华
网站建设 2026/4/17 3:52:10

快递查询-物流查询-快递物流查询接口介绍

目前&#xff0c;电商、货运等行业都需要快递查询功能&#xff0c;对运单号的物流轨迹进行跟踪。 通过快递查询接口&#xff0c;可以实时查询物流轨迹。支持顺丰、京东、EMS、申通、圆通、宅急送、韵达、中通、百世、天天、四通一达等1500物流公司&#xff0c;与物流公司官网同…

作者头像 李华
网站建设 2026/4/17 3:46:16

程序包javax.validation.constraints不存在

在现代Java企业级应用开发中&#xff0c;数据校验是保障系统健壮性与安全性的第一道防线。无论是Web API的请求参数、数据库实体的持久化字段&#xff0c;还是微服务间的消息传递&#xff0c;都离不开对数据合法性的严格审查。javax.validation.constraints&#xff08;及其继任…

作者头像 李华
网站建设 2026/4/17 3:43:12

虚幻引擎UE本地化实战:从UMG到资产的全流程多语言方案

1. 为什么需要完整的UE本地化方案&#xff1f; 当你开发的游戏需要面向全球市场发行时&#xff0c;多语言支持就成为了必备功能。想象一下&#xff0c;一个日本玩家打开你的游戏却看到满屏英文&#xff0c;或者德国玩家遇到全是法语的界面&#xff0c;这种体验有多糟糕。我在参…

作者头像 李华