Ubuntu Server 下 Docker 的快速安装与优化配置指南
1. 环境准备与旧版本清理在开始安装Docker之前我们需要确保系统环境干净且具备必要的依赖项。我遇到过不少因为旧版本残留导致的问题所以建议先执行清理操作。Ubuntu Server默认可能包含旧版docker.io或lxc-docker这些可能与新版Docker CE产生冲突。执行以下命令彻底清除旧版本sudo apt-get purge docker-ce docker-ce-cli containerd.io sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd清理完成后建议更新系统基础软件包。这个步骤经常被新手忽略但实测下来能避免很多依赖冲突sudo apt update sudo apt upgrade -y注意生产环境中建议在非业务高峰期执行系统更新避免影响正在运行的服务。我曾经因为跳过这步导致后续安装出现奇怪的依赖错误排查了整整两小时才发现是基础库版本不匹配。2. 安装Docker引擎2.1 安装必要依赖包Docker运行需要一些基础工具支持这些依赖就像盖房子前要准备的水泥和砖块sudo apt install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common这里有个小技巧使用\符号将长命令分成多行既美观又便于后续维护。我在团队协作时发现这种写法能让其他成员更清楚每个依赖的作用。2.2 添加Docker官方GPG密钥GPG密钥相当于软件的身份证确保下载的包是官方正版curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg这个命令做了三件事通过curl下载密钥使用gpg解码将密钥保存到系统可信密钥环2.3 设置稳定版仓库配置软件源就像告诉系统去哪里找软件国内用户建议使用阿里云镜像加速echo deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null这里有个坑要注意$(lsb_release -cs)会自动获取系统代号如focal/jammy但某些非标准系统可能返回错误值。我遇到过自定义镜像返回unknown的情况这时需要手动替换为正确的系统代号。2.4 安装Docker引擎终于到核心步骤了这个命令会安装Docker三大组件sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io安装完成后验证版本docker --version建议同时安装docker-compose插件这在后续容器编排时会非常有用sudo apt install -y docker-compose-plugin3. 基础配置优化3.1 配置国内镜像加速直接从Docker Hub拉取镜像可能会很慢就像国际快递总是比同城配送慢。修改daemon.json配置国内镜像源sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://registry.docker-cn.com, https://mirror.baidubce.com, https://docker.mirrors.ustc.edu.cn ], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 } EOF这个配置除了镜像加速外还包含三个重要优化使用systemd作为cgroup驱动兼容性更好限制日志文件大小避免磁盘爆满使用overlay2存储驱动性能更优应用配置并重启服务sudo systemctl daemon-reload sudo systemctl restart docker3.2 用户权限管理默认只有root能直接操作Docker这就像把家里所有钥匙都交给一个人既不方便也不安全。更合理的做法是将普通用户加入docker组sudo groupadd docker sudo usermod -aG docker $USER newgrp docker测试权限是否生效docker run --rm hello-world重要安全提示docker组实际上拥有root等效权限。在生产环境中应该更精细地控制访问权限比如使用授权插件或RBAC策略。4. 高级安全配置4.1 限制容器能力默认情况下容器几乎能做任何事这就像给陌生人你家的万能钥匙。通过Linux capabilities机制可以限制容器的权限docker run --cap-drop ALL --cap-add NET_BIND_SERVICE -d nginx这个命令首先移除所有权限--cap-drop ALL然后只添加绑定网络端口的权限--cap-add NET_BIND_SERVICE4.2 启用用户命名空间隔离用户命名空间隔离能让容器中的root不等于宿主机的root相当于给容器戴上了面具sudo tee /etc/docker/daemon.json -EOF { userns-remap: default } EOF配置后需要重建所有容器。我在测试环境验证时发现启用这个功能会导致约5%的性能下降但安全性提升显著。4.3 网络访问控制Docker默认开放所有端口非常危险应该像小区门禁一样严格控制访问# 查看现有网络规则 sudo iptables -L DOCKER-USER # 只允许特定IP访问2375管理端口 sudo iptables -I DOCKER-USER -i eth0 ! -s 192.168.1.100 -p tcp --dport 2375 -j DROP对于生产环境更推荐使用VPN或私有网络进行管理完全避免暴露管理端口到公网。5. 性能调优技巧5.1 存储驱动选择不同的存储驱动就像不同类型的仓库适合不同场景驱动类型适用场景优点缺点overlay2默认推荐性能好需要Linux内核4.0aufs旧系统兼容稳定性高性能较差devicemapper企业存储支持块设备配置复杂查看当前使用的驱动docker info | grep Storage Driver5.2 日志管理策略失控的日志就像漏水的水龙头迟早会淹没你的磁盘。除了之前设置的日志大小限制还可以完全禁用某个容器的日志docker run --log-drivernone ...使用外部日志系统docker run --log-driversyslog ...5.3 资源限制实践不给容器设资源限制就像让程序随便刷你的信用卡。通过cgroups可以精确控制docker run -it --cpus 0.5 --memory 512m --memory-swap 1g alpine这个配置表示最多使用50%的CPU时间片内存限制512MB交换分区1GB我在压力测试中发现不设内存限制的容器在内存耗尽时会被OOM Killer直接杀死而有限制的容器会优雅地报错。6. 日常维护命令6.1 空间清理Docker用久了会像从不整理的书房到处都是没用的缓存。这些命令能释放空间# 删除所有停止的容器 docker container prune # 删除所有未被使用的镜像 docker image prune -a # 深度清理包括构建缓存 docker system prune --volumes建议设置定时任务每周自动清理一次但要注意避开业务高峰期。6.2 健康检查定期检查Docker健康状况就像体检能提前发现问题# 检查服务状态 systemctl status docker # 查看详细运行时信息 docker info # 检查存储驱动状态 docker system df我习惯把这些检查写成脚本用Prometheus监控关键指标这样能实时掌握系统状态。7. 常见问题排查7.1 网络连接失败当容器无法联网时可以按照这个流程排查检查宿主机网络ping 8.8.8.8验证DNS解析docker run --rm busybox nslookup example.com检查iptables规则sudo iptables -L -n -v7.2 镜像拉取超时遇到镜像拉取问题时可以换一个镜像源检查DNS配置cat /etc/resolv.conf使用代理需符合相关规定7.3 容器启动失败容器启动报错时按这个顺序检查查看详细日志docker logs -f 容器名以调试模式启动docker run --rm -it --entrypoint sh 镜像名检查存储驱动状态dmesg | grep overlay记得去年我们线上服务突然全部崩溃最后发现是overlay文件系统损坏。现在我会定期检查/var/lib/docker目录的健康状况。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2419136.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!