尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Ubuntu 22.04安装与优化Docker完整指南
1. Ubuntu 22.04系统与Docker的适配性解析作为目前最流行的Linux发行版之一Ubuntu 22.04 LTSJammy Jellyfish对容器化技术的支持已经相当成熟。系统内核默认为5.15版本完全满足Docker对Linux内核的最低要求3.10。与旧版Ubuntu相比22.04在以下方面具有显著优势内置的apt软件源已收录Docker官方维护的稳定版本默认启用的cgroups v2与Docker的兼容性经过优化对Overlay2存储驱动的支持更为完善系统防火墙UFW规则可自动适配Docker网络注意虽然Ubuntu 22.04默认未预装Docker但其软件仓库中的docker.io包实际上是较旧的社区版本。建议始终通过官方仓库安装以获得最新功能和安全性更新。2. 安装前的系统准备2.1 硬件环境检查在开始安装前建议先验证系统环境是否符合Docker运行要求# 检查CPU虚拟化支持物理机需要 grep -E --color vmx|svm /proc/cpuinfo # 检查内核版本 uname -r # 检查存储驱动支持 lsmod | grep overlay若在物理机上运行且未检测到虚拟化支持需进入BIOS启用Intel VT-x或AMD-V技术。对于云服务器通常已由云服务商预配置。2.2 系统依赖安装确保系统软件包为最新状态sudo apt update sudo apt upgrade -y sudo apt install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release2.3 旧版本清理如适用若系统存在旧版Docker应先彻底卸载sudo apt remove -y docker docker-engine docker.io containerd runc sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd3. 官方Docker仓库配置3.1 GPG密钥添加Docker官方软件包采用加密签名需先添加可信密钥sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg3.2 仓库源设置根据系统架构配置APT源以amd64为例echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null更新软件包索引sudo apt update4. Docker引擎安装与验证4.1 安装核心组件安装Docker CE社区版、CLI工具和容器运行时sudo apt install -y \ docker-ce \ docker-ce-cli \ containerd.io \ docker-compose-plugin4.2 服务启动与自启配置sudo systemctl enable --now docker验证安装是否成功sudo docker run hello-world正常情况应看到欢迎信息及Docker基本说明。5. 非root用户权限配置5.1 用户组管理为避免每次使用docker命令都需要sudo可将当前用户加入docker组sudo usermod -aG docker $USER newgrp docker # 立即生效无需注销5.2 权限验证docker run --rm alpine echo 权限配置成功若出现权限错误可检查/var/run/docker.sock文件权限ls -l /var/run/docker.sock6. 存储驱动优化配置6.1 驱动选择建议Ubuntu 22.04默认使用overlay2驱动可通过以下命令验证docker info | grep Storage对于使用ext4文件系统的用户建议在/etc/docker/daemon.json中添加优化配置{ storage-driver: overlay2, storage-opts: [ overlay2.override_kernel_checktrue ] }6.2 数据目录迁移可选如需更改默认存储位置如挂载独立数据盘{ data-root: /path/to/new/docker }修改后需重启服务sudo systemctl restart docker7. 网络与防火墙配置7.1 UFW规则调整若系统启用了UFW防火墙需放行Docker网络sudo ufw allow 2375/tcp sudo ufw reload7.2 自定义网络创建建议为应用创建独立网络docker network create --driver bridge my_network8. 国内用户特别优化8.1 镜像加速配置在/etc/docker/daemon.json中添加国内镜像源{ registry-mirrors: [ https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }8.2 容器时区同步解决容器内时区不一致问题sudo timedatectl set-timezone Asia/Shanghai sudo apt install -y tzdata9. 常见问题排查指南9.1 虚拟化支持异常错误现象Cannot connect to the Docker daemon at unix:///var/run/docker.sock解决方案sudo systemctl start docker sudo chmod 666 /var/run/docker.sock9.2 存储驱动冲突当出现storage-driver相关错误时可尝试sudo rm -rf /var/lib/docker sudo systemctl restart docker9.3 网络端口冲突排查占用端口的进程sudo netstat -tulnp | grep 端口号10. 进阶配置与工具集成10.1 Docker Compose安装虽然已安装插件版传统Compose仍可通过sudo curl -L https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m) \ -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose10.2 可视化管理工具Portainer CE的快速部署docker volume create portainer_data docker run -d -p 8000:8000 -p 9443:9443 \ --name portainer \ --restartalways \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest11. 系统服务监控与维护11.1 资源使用查看docker stats docker system df11.2 定期清理策略设置定时任务清理无用资源# 每周日凌晨3点执行 (crontab -l 2/dev/null; echo 0 3 * * 0 docker system prune -f) | crontab -12. 安全加固建议12.1 用户命名空间隔离启用userns-remap增强隔离性sudo echo dockremap:165536:65536 /etc/subuid sudo echo dockremap:165536:65536 /etc/subgid然后在daemon.json中添加{ userns-remap: dockremap }12.2 日志轮转配置创建/etc/docker/daemon.json的日志配置{ log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } }13. 性能调优实践13.1 内存限制调整对于开发环境可修改默认内存限制sudo mkdir -p /etc/systemd/system/docker.service.d sudo tee /etc/systemd/system/docker.service.d/override.conf EOF [Service] MemoryLimit4G EOF sudo systemctl daemon-reload sudo systemctl restart docker13.2 容器资源限制运行容器时明确资源限制docker run -it --cpus1 --memory2g alpine14. 多架构镜像支持启用buildx构建跨平台镜像docker buildx create --use docker buildx inspect --bootstrap构建命令示例docker buildx build --platform linux/amd64,linux/arm64 -t username/image:tag .15. 备份与恢复策略15.1 容器持久化数据备份docker run --rm --volumes-from my_container \ -v $(pwd):/backup alpine \ tar cvf /backup/backup.tar /container_data15.2 完整Docker环境迁移导出所有镜像docker save $(docker images -q) -o all_images.tar导出容器数据卷for container in $(docker ps -aq); do docker export $container ${container}.tar done16. 开发环境特殊配置16.1 IDE集成设置VS Code的Dev Containers扩展需要sudo apt install -y \ openssh-server \ git16.2 调试端口映射运行支持远程调试的容器docker run -p 3000:3000 -p 9229:9229 \ -e NODE_ENVdevelopment \ my_app17. 生产环境部署规范17.1 容器健康检查Dockerfile中应包含HEALTHCHECK --interval30s --timeout3s \ CMD curl -f http://localhost/health || exit 117.2 资源限制实践使用docker-compose.yml示例services: web: deploy: resources: limits: cpus: 0.5 memory: 512M18. 版本升级与回滚18.1 版本查询与升级查看可用版本apt list -a docker-ce指定版本安装sudo apt install docker-ceVERSION18.2 降级操作步骤sudo apt-mark hold docker-ce sudo apt install docker-ceOLDER_VERSION19. 日志收集与分析19.1 ELK集成配置启动ELK容器栈docker run -d --name elasticsearch \ -p 9200:9200 -p 9300:9300 \ -e discovery.typesingle-node \ docker.elastic.co/elasticsearch/elasticsearch:8.6.2 docker run -d --name kibana \ --link elasticsearch:elasticsearch \ -p 5601:5601 \ docker.elastic.co/kibana/kibana:8.6.219.2 容器日志驱动配置syslog日志驱动{ log-driver: syslog, log-opts: { syslog-address: udp://1.2.3.4:514 } }20. 容器编排初步实践20.1 Swarm模式启用初始化Swarm集群docker swarm init --advertise-addr IP_ADDRESS20.2 服务部署示例docker service create \ --name web \ --publish published8080,target80 \ --replicas 3 \ nginx21. GPU加速支持21.1 NVIDIA容器工具安装distribution$(. /etc/os-release;echo $ID$VERSION_ID) \ curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add - \ curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt update sudo apt install -y nvidia-container-toolkit sudo systemctl restart docker21.2 GPU容器运行测试docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi22. 自定义镜像构建优化22.1 多阶段构建示例FROM golang:1.19 AS builder WORKDIR /app COPY . . RUN go build -o myapp . FROM alpine:latest COPY --frombuilder /app/myapp . CMD [./myapp]22.2 构建缓存利用docker build --build-arg BUILDKIT_INLINE_CACHE1 -t myapp .23. 容器安全扫描23.1 Trivy漏洞扫描docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ aquasec/trivy image my_image23.2 Docker Bench测试docker run --rm --net host --pid host --userns host --cap-add audit_control \ -e DOCKER_CONTENT_TRUST1 \ -v /etc:/etc:ro \ -v /usr/bin/docker-containerd:/usr/bin/docker-containerd:ro \ -v /usr/bin/docker-runc:/usr/bin/docker-runc:ro \ -v /lib/systemd/system:/lib/systemd/system:ro \ -v /var/lib:/var/lib:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --label docker_bench_security \ docker/docker-bench-security24. 容器网络深度配置24.1 自定义网桥创建docker network create \ --driver bridge \ --subnet 172.28.0.0/16 \ --gateway 172.28.5.254 \ my-bridge-network24.2 Macvlan网络实践docker network create -d macvlan \ --subnet192.168.1.0/24 \ --gateway192.168.1.1 \ -o parenteth0 \ my-macvlan25. 持续集成集成示例25.1 GitHub Actions配置jobs: build: runs-on: ubuntu-22.04 steps: - uses: actions/checkoutv3 - name: Build Docker image run: docker build -t myapp . - name: Run tests run: docker run myapp npm test25.2 Jenkins管道示例pipeline { agent any stages { stage(Build) { steps { sh docker build -t myapp . } } stage(Test) { steps { sh docker run myapp npm test } } } }26. 容器存储卷进阶26.1 卷插件使用示例docker volume create --driver vieux/sshfs \ -o sshcmduserremotehost:/remote/path \ -o passwordsecret \ sshvolume26.2 数据卷备份策略docker run --rm \ -v dbdata:/volume \ -v $(pwd):/backup \ alpine \ tar cvf /backup/dbdata.tar /volume27. 容器资源监控方案27.1 cAdvisor部署docker run \ --volume/:/rootfs:ro \ --volume/var/run:/var/run:ro \ --volume/sys:/sys:ro \ --volume/var/lib/docker/:/var/lib/docker:ro \ --publish8080:8080 \ --detachtrue \ --namecadvisor \ google/cadvisor:latest27.2 Prometheus配置scrape_configs: - job_name: docker static_configs: - targets: [cadvisor:8080]28. 容器日志管理进阶28.1 Loki日志收集docker run -d --name loki -p 3100:3100 grafana/loki28.2 Fluentd日志驱动{ log-driver: fluentd, log-opts: { fluentd-address: fluentdhost:24224, tag: docker.{{.Name}} } }29. 容器调试技巧29.1 故障容器诊断docker exec -it faulty_container /bin/sh29.2 网络连通性测试docker run --rm --network container:target_container \ nicolaka/netshoot \ ping google.com30. 最佳实践总结经过多年在Ubuntu系统上部署Docker的经验我总结出以下关键实践要点始终通过官方仓库安装Docker避免使用系统自带的docker.io包生产环境必须配置日志轮转和资源限制开发环境建议启用BuildKit加速镜像构建定期执行docker system prune清理无用资源重要数据卷必须建立备份机制使用非root用户运行容器时应谨慎处理权限问题多阶段构建可以显著减小最终镜像体积容器编排工具选择应考虑团队熟悉度和业务规模对于刚接触Docker的Ubuntu用户建议从单容器应用开始逐步掌握网络、存储等核心概念后再尝试复杂部署。遇到问题时docker logs和docker inspect应成为首选调试工具。
RELATED

相关推荐

基于微信小程序的大学生校园跑腿管理系统的设计与实现---附源码

基于微信小程序的大学生校园跑腿管理系统的设计与实现---附源码

本文整理一个面向学生、配送员和管理员的校园跑腿系统。项目重点不在普通商品交易,而在“任务发布—配送员接单—执行反馈—学生确认—评价投诉”的实时服务链路,前端采用微信小程序以降低校园用户的使用门槛。文章标签:微信小程序、校园跑腿…

📅 2026/10/8 8:02:01
嵌入式C语言面向对象编程:封装继承多态的C实现与串口驱动实战

嵌入式C语言面向对象编程:封装继承多态的C实现与串口驱动实战

上一篇讲轮询、回调、观察者,把"底层变化通知应用层"的线理清了。这篇往更根本的地方挖一步:嵌入式用 C 写,为什么绕不开面向对象?做嵌入式开发时间久了,你一定在技术论坛和公众号里反复看到"面向对象&…

📅 2026/9/9 0:08:06
快速排序与桶排序:核心原理、实战优化与场景选择指南

快速排序与桶排序:核心原理、实战优化与场景选择指南

1. 项目概述:从理论到实战的排序算法精讲在软件开发的日常里,排序算法就像厨师的刀工,是处理数据这道大餐的基本功。无论是处理海量用户数据,还是优化内存中的缓存顺序,一个高效的排序算法往往能带来性能上的质变。今天…

📅 2026/10/7 15:59:18
MORE NEWS

更多资讯

📰

n8n实战指南:AI原生混合编程自动化平台核心能力与部署解析

1. n8n 项目概述:为什么说它是“AI 原生的混合编程自动化平台”做自动化工具这个领域,我前前后后接触了不少。早些年用的是 Zapier,后来换过 Make(当时还叫 Integromat),再往后自己折腾过 Huginn、Node-RED…

📰

Linux SNMP监控与snmp++精简实践:从协议原理到采集器开发

简介:面向Linux网络管理与嵌入式开发者的SNMP精简实现源码包,主要解决资源受限环境下快速部署、学习或二次开发SNMP协议栈的迫切需求。压缩包共6个C语言源码文件,总大小仅39KB,代码结构紧凑,涵盖ASN.1编解码、MIB信息结…

📰

基于YOLO的深度学习头盔佩戴检测系统:从数据集到PyQt5部署全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

DIC全场动态监测:薄板焊接变形控制的关键技术

1. 薄板焊接变形:一场收益极高的“工艺攻坚战”薄板焊接变形,是焊接工程师绕不开的老大难。车身覆盖件、电池托盘、精密箱体、船用薄板分段,凡是板厚在0.8mm到3mm这个区间,焊完一测,平面度超差、角变形翘起、波浪变形起…

📰

无人机集群分布式估计:事件触发与量化通信的EKF仿真对比

1. 为什么拿集中式EKF当标尺:分布式估计的通信代价从哪来无人机集群协同最核心的瓶颈其实不是算力,而是通信。你想想看,每架无人机都在用机载传感器(惯导、GPS、视觉、雷达)感知周围环境,但这些传感器数据如…

📰

事件委托实战:用单个监听器为消息列表实现 [x] 关闭按钮

文档教程前端 【免费下载链接】zh.javascript.info 现代 JavaScript 教程(The Modern JavaScript Tutorial),以最新的 ECMAScript 规范为基准,通过简单但足够详细的内容,为你讲解从基础到高阶的 JavaScript 相关知识。…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬