从零开始在 CentOS 7 上部署 Docker:我的实战踩坑记录 📅 2026/7/7 4:46:43 写在前面这是我 Docker 学习之路的第二篇文章。前一篇《从虚拟机到容器Docker 解决了什么问题》讲了概念这篇来点硬核的——真实环境下的部署实战。从网络配置到镜像拉取从 Dockerfile 编写到 Docker Compose 编排我把这几天的踩坑经历全部记录下来希望能帮到同样在折腾 Docker 的你。一、环境准备我的实验环境•宿主机Windows 10•虚拟机VMware 上的 CentOS 7•Docker 版本最终升级到 Docker CE 26.1.4目标在 CentOS 7 上完整部署 Docker并成功运行 nginx mysql 多容器应用。二、第一个坑网卡没有启动装完虚拟机后我发现网络不通。执行ping 8.8.8.8提示网络不可达。问题排查// bash[rootlocalhost ~]# ping -c 3 8.8.8.8connect: 网络不可达[rootlocalhost ~]# ip addr1: lo: LOOPBACK,UP ...inet 127.0.0.1/8 scope host lo2: ens33: BROADCAST,MULTICAST ...# 注意这里没有 inet 地址状态也不是 UP3: docker0: NO-CARRIER,BROADCAST,MULTICAST,UP ...inet 172.17.0.1/16 scope global docker0关键发现ens33网卡状态是DOWN没有分配到 IP 地址。解决方案// bash# 启动网卡ip link set ens33 up# 通过 DHCP 获取 IPdhclient ens33# 验证ip addr show ens33# 现在可以看到inet 192.168.120.131/24# 测试网络ping -c 3 8.8.8.8# 64 bytes from 8.8.8.8: icmp_seq1 ttl128 time201 ms ✓教训CentOS 7 最小化安装后网卡默认可能没有设置为开机自启。三、第二个坑DNS 配置缺失网络通了但 Docker 还是拉不到镜像。报错Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:46940-[::1]:53: read: connection refused问题分析// bash[rootlocalhost ~]# cat /etc/resolv.conf# Generated by NetworkManager# 空的没有 nameserver根本原因DNS 配置为空无法解析域名。解决方案// bash# 配置公共 DNSecho nameserver 114.114.114.114 /etc/resolv.confecho nameserver 8.8.8.8 /etc/resolv.conf# 验证cat /etc/resolv.conf# nameserver 114.114.114.114# nameserver 8.8.8.8# 测试解析ping -c 3 registry-1.docker.io注意如果/etc/resolv.conf被 NetworkManager 覆盖需要修改 NetworkManager 配置或手动固定 DNS。四、第三个坑Docker 镜像拉取失败DNS 修好了但拉取镜像还是超时Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection原因分析国内网络访问 Docker Hub 不稳定需要配置镜像加速器。解决方案一配置阿里云镜像加速1.登录阿里云容器镜像服务2.点击「镜像加速器」获取你的专属加速地址3.配置到 Docker// bashcat /etc/docker/daemon.json EOF{registry-mirrors: [https://你的专属地址.mirror.aliyuncs.com]}EOFsystemctl daemon-reloadsystemctl restart docker解决方案二安装 Docker CE推荐CentOS 7 自带的 Docker 版本太老1.13对镜像加速支持不完善。升级到 Docker CE// bash# 卸载旧版本yum remove -y docker docker-common docker-client# 添加阿里云 Docker CE 仓库yum install -y yum-utilsyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装 Docker CEyum install -y docker-ce docker-ce-cli containerd.io# 启动并设置开机自启systemctl start dockersystemctl enable docker# 验证版本docker --version# Docker version 26.1.4, build 5650f9b关键收获CentOS 7 自带的docker包和 Docker 官方的docker-ce是两个不同的东西后者功能更完整、更新更及时。五、Dockerfile 实战构建自定义镜像基础概念掌握了来动手写个 Dockerfile。目标构建一个包含自定义首页的 nginx 镜像不依赖外部 volume 挂载。实现步骤// bash# 创建项目目录mkdir ~/my-nginx cd ~/my-nginx# 创建 Dockerfilecat Dockerfile EOFFROM nginx:latestCOPY index.html /usr/share/nginx/html/index.htmlEOF# 创建自定义首页echo h1这是我的第一个 Dockerfile 构建的镜像/h1 index.html# 构建镜像docker build -t my-nginx:v1 .# 查看镜像docker images | grep my-nginx# my-nginx v1 b13e6ca12d9a 2 minutes ago 161MB# 运行容器docker run -d -p 8082:80 --name my-nginx-test my-nginx:v1访问http://192.168.120.131:8082成功看到自定义页面Dockerfile 要点•FROM指定基础镜像•COPY将本地文件复制到镜像•docker build -t 镜像名:标签 .注意最后的.表示当前目录六、Docker Compose多容器编排单个容器搞定了接下来挑战多容器应用。目标用 docker-compose 同时启动 nginx mysql并实现数据持久化。实现步骤// bash# 创建项目目录mkdir ~/docker-compose-demo cd ~/docker-compose-demo# 创建 docker-compose.ymlcat docker-compose.yml EOFversion: 3services:nginx:image: nginx:latestports:- 8080:80volumes:- ./html:/usr/share/nginx/htmlmysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: root123MYSQL_DATABASE: testdbports:- 3306:3306volumes:- mysql-data:/var/lib/mysqlvolumes:mysql-data:EOF# 创建自定义页面mkdir htmlecho h1Docker Compose 测试成功/h1 html/index.html# 启动所有服务docker compose up -d # 注意新版是 docker compose不是 docker-compose# 查看状态docker compose ps# 查看日志docker compose logs踩坑提醒•旧版命令是docker-compose需要单独安装•新版Docker 20内置了docker compose空格分隔•如果你的系统报docker-compose: 未找到命令试试docker compose七、核心概念总结1. Volume 数据持久化// bash# 绑定挂载Bind Mount-v ~/nginx-data/html:/usr/share/nginx/html# 命名卷Named Volume-v mysql-data:/var/lib/mysql区别•绑定挂载直接映射宿主机目录适合开发环境•命名卷由 Docker 管理适合生产环境更易迁移2. 端口映射// bash-p 8080:80 # 宿主机 8080 → 容器 803. 网络模式•bridge默认容器有独立 IP通过端口映射访问•host容器直接使用宿主机网络•none无网络连接八、踩坑清单问题现象解决方案网卡未启动ping 不通外网ip link set ens33 up dhclient ens33DNS 配置缺失域名解析失败配置/etc/resolv.conf添加 nameserver镜像拉取超时Docker pull 失败配置镜像加速器或升级 Docker CEDocker 版本过旧功能不完整卸载旧版安装 Docker CEdocker-compose 未安装命令找不到使用docker compose或单独安装参考资料•Docker 官方文档•阿里云 Docker CE 镜像•Docker Compose 官方文档写在最后从零开始在 CentOS 7 上部署 Docker看似简单的任务实际操作中遇到了不少坑。但每一个坑都是一次学习的机会•网络问题让我理解了 Linux 网络配置•镜像拉取失败让我学会了配置加速器•Dockerfile 编写让我掌握了镜像构建原理•Docker Compose 让我体验到了多容器编排的便利如果你也在学 Docker我的建议是1.不要只看教程一定要动手实操2.遇到问题先查日志90% 的问题都能自己解决3.把踩过的坑记录下来这就是你最好的学习笔记下一篇我将记录如何用 Docker Compose 部署完整的 Web 应用敬请期待系列文章•从虚拟机到容器Docker 解决了什么问题•从零开始在 CentOS 7 上部署 Docker我的实战踩坑记录本文