CentOS 7.9 上 Docker 安装、配置与实战使用指南

CentOS 7.9 是企业级常用系统,Docker 在其上运行稳定且轻量(无需图形化界面,直接基于内核运行)。以下是 完整实操流程,包括安装、配置优化、核心命令使用、实战案例(如运行 Nginx、MySQL)及常见问题排查,全程贴合生产环境需求。

一、前置检查(必做)

1. 确认系统版本

先确保系统是 CentOS 7.9,避免版本不兼容:

bash

运行

复制代码
cat /etc/centos-release  # 输出 CentOS Linux release 7.9.2009 (Core) 则符合
uname -r  # 内核版本需 ≥ 3.10(CentOS 7.9 默认满足)

2. 关闭防火墙(可选,测试环境推荐)

Docker 网络与防火墙可能冲突,测试环境可直接关闭(生产环境需配置防火墙规则,下文有说明):

bash

运行

复制代码
# 临时关闭防火墙
sudo systemctl stop firewalld
# 禁止防火墙开机自启
sudo systemctl disable firewalld
# 验证:输出 inactive 则成功
sudo systemctl status firewalld

3. 关闭 SELinux(必做,避免权限拦截)

SELinux 会限制 Docker 容器的资源访问,需永久关闭:

bash

运行

复制代码
# 编辑 SELinux 配置文件
sudo vim /etc/selinux/config

SELINUX=enforcing 改为 SELINUX=disabled,保存退出后 重启系统 生效:

bash

运行

复制代码
sudo reboot

重启后验证:

bash

运行

复制代码
getenforce  # 输出 Disabled 则成功

二、Docker 安装步骤(精准版)

1. 卸载旧版本(若有)

CentOS 7 可能预装旧版 Docker(如 dockerdocker-engine),先卸载避免冲突:

bash

运行

复制代码
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

2. 安装依赖工具

Docker 安装需依赖 yum-utils(用于管理软件源)等工具:

bash

运行

复制代码
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3. 配置 Docker 官方软件源(稳定版)

使用 Docker 官方源(避免第三方源的兼容性问题):

bash

运行

复制代码
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4. 安装 Docker Engine(指定稳定版本,推荐 24.0.x)

不指定版本可能安装最新版,生产环境建议指定稳定版(如 docker-ce-24.0.9):

bash

运行

复制代码
# 查看可用的 Docker 版本
yum list docker-ce --showduplicates | sort -r
# 安装指定版本(以 24.0.9 为例,可替换为上述列表中的版本)
sudo yum install -y docker-ce-24.0.9 docker-ce-cli-24.0.9 containerd.io docker-buildx-plugin docker-compose-plugin

5. 启动 Docker 并设置开机自启

bash

运行

复制代码
# 启动 Docker 服务
sudo systemctl start docker
# 设置开机自启(关键,避免服务器重启后 Docker 失效)
sudo systemctl enable docker
# 验证 Docker 状态(输出 active (running) 则正常)
sudo systemctl status docker

6. 验证安装成功

运行官方测试镜像 hello-world,若能输出欢迎信息,则安装成功:

bash

运行

复制代码
sudo docker run hello-world

成功输出示例:

plaintext

复制代码
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

三、核心配置(生产环境必备)

1. 配置普通用户权限(免 sudo 操作 Docker)

默认需用 sudo 执行 Docker 命令,配置后普通用户可直接操作:

bash

运行

复制代码
# 创建 docker 用户组(若已存在则忽略)
sudo groupadd docker
# 将当前用户加入 docker 组(替换为你的用户名,如 root 无需操作)
sudo usermod -aG docker $USER
# 刷新用户组(无需重启,立即生效)
newgrp docker
# 验证:无需 sudo 运行 docker 命令
docker run hello-world  # 无报错则成功

2. 配置镜像加速器(解决拉取镜像慢 / 超时)

Docker Hub 国内访问慢,配置国内加速器(以阿里云、网易云为例,免费可用):

bash

运行

复制代码
# 创建 Docker 配置目录(若不存在)
sudo mkdir -p /etc/docker
# 编辑配置文件 daemon.json
sudo vim /etc/docker/daemon.json

写入以下内容(直接复制粘贴):

json

复制代码
{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",  // 网易云加速器(免费)
    "https://mirror.baidubce.com",   // 百度云加速器(免费)
    "https://xxxxxx.mirror.aliyuncs.com"  // 阿里云加速器(需注册获取专属地址)
  ]
}
  • 阿里云加速器获取:注册阿里云账号 → 进入 容器镜像服务 → 左侧「镜像工具 → 镜像加速器」→ 复制专属地址。

配置后重启 Docker 生效:

bash

运行

复制代码
# 重新加载配置
sudo systemctl daemon-reload
# 重启 Docker 服务
sudo systemctl restart docker
# 验证加速器是否生效(输出配置的加速器地址则成功)
docker info | grep "Registry Mirrors"

3. 生产环境防火墙配置(若未关闭防火墙)

若需开启防火墙,需放行 Docker 相关端口(以常用端口为例):

bash

运行

复制代码
# 放行 Docker 默认桥接网络端口
sudo firewall-cmd --permanent --add-port=2375/tcp  # Docker 客户端通信(非加密,测试用)
sudo firewall-cmd --permanent --add-port=2376/tcp  # Docker 客户端通信(加密,生产用)
# 放行容器映射的常用端口(如 Nginx 80、MySQL 3306,根据实际需求添加)
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=3306/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
# 验证已放行端口
sudo firewall-cmd --list-ports

四、Docker 核心命令实战(CentOS 7.9 常用)

以下命令覆盖「镜像管理、容器管理、网络 / 数据卷」核心场景,结合实例说明:

1. 镜像管理(拉取、查看、删除)

命令 作用 实战示例
docker pull 镜像名:版本 拉取镜像(版本可选,默认 latest) docker pull nginx:1.24(拉取 Nginx 1.24 稳定版)
docker images 查看本地所有镜像 docker images(输出镜像名、版本、ID 等)
docker rmi 镜像ID/镜像名 删除镜像(需先删除依赖该镜像的容器) docker rmi nginx:1.24docker rmi 5a3221f0137b(镜像 ID 前几位即可)
docker search 镜像名 搜索 Docker Hub 镜像 docker search mysql(搜索 MySQL 相关镜像)

示例:拉取 MySQL 8.0 镜像

bash

运行

复制代码
docker pull mysql:8.0

2. 容器管理(创建、启动、停止、删除)

核心命令:docker run(创建并启动容器),参数说明:

  • -d:后台运行容器(守护态);
  • -p 宿主机端口:容器端口:端口映射(外部访问宿主机端口 → 容器端口);
  • --name 容器名:指定容器名称(唯一);
  • -e 环境变量:设置容器环境变量(如 MySQL 密码);
  • -v 宿主机目录:容器目录:数据卷挂载(持久化容器数据);
  • --restart=always:容器随 Docker 服务自动启动(生产必备)。
实战 1:运行 Nginx 容器(Web 服务)

bash

运行

复制代码
# 创建并启动 Nginx 容器,映射宿主机 80 端口到容器 80 端口
docker run -d -p 80:80 --name my-nginx --restart=always nginx:1.24

验证:访问宿主机 IP(如 http://192.168.1.100),能看到 Nginx 默认页面则成功。

实战 2:运行 MySQL 容器(数据库服务,持久化数据)

bash

运行

复制代码
# 1. 创建宿主机目录(用于持久化 MySQL 数据和配置)
mkdir -p /data/mysql/data /data/mysql/conf
# 2. 启动 MySQL 容器,设置密码、挂载数据卷
docker run -d -p 3306:3306 --name my-mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \  # 设置 root 密码为 123456
  -v /data/mysql/data:/var/lib/mysql \  # 挂载数据目录(持久化数据)
  -v /data/mysql/conf:/etc/mysql/conf.d \  # 挂载配置目录
  --restart=always \
  mysql:8.0

验证:用 MySQL 客户端连接宿主机 IP:3306,用户名 root,密码 123456,能连接则成功。

其他常用容器命令:

bash

运行

复制代码
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop my-nginx
# 启动已停止的容器
docker start my-nginx
# 重启容器
docker restart my-nginx
# 查看容器日志(实时输出,-f 实时跟踪)
docker logs -f my-nginx
# 进入容器内部(交互模式,如进入 Nginx 容器)
docker exec -it my-nginx /bin/bash
# 删除容器(需先停止,-f 强制删除运行中的容器)
docker stop my-nginx && docker rm my-nginx
# 批量删除所有停止的容器
docker rm $(docker ps -a -q)

3. 数据卷管理(持久化数据)

容器默认数据存储在内部,删除容器后数据丢失,需通过 -v 挂载宿主机目录或 Docker 数据卷:

bash

运行

复制代码
# 查看 Docker 数据卷(自动创建的挂载目录)
docker volume ls
# 查看数据卷详情(如挂载路径)
docker volume inspect 数据卷名
# 删除未使用的数据卷
docker volume prune

示例:修改 Nginx 首页(通过挂载目录)

bash

运行

复制代码
# 1. 复制容器内 Nginx 首页文件到宿主机挂载目录
docker cp my-nginx:/usr/share/nginx/html/index.html /data/nginx/html/
# 2. 重新启动 Nginx 容器,挂载宿主机目录
docker stop my-nginx && docker rm my-nginx
docker run -d -p 80:80 --name my-nginx \
  -v /data/nginx/html:/usr/share/nginx/html \
  --restart=always nginx:1.24
# 3. 修改宿主机的 index.html,容器内会实时同步
vim /data/nginx/html/index.html

4. 自定义镜像(通过 Dockerfile 打包应用)

以打包一个简单的 Python 脚本为例:

步骤 1:创建应用目录和文件

bash

运行

复制代码
mkdir -p /data/python-app && cd /data/python-app
# 创建 Python 脚本 app.py
echo 'print("Hello Docker on CentOS 7.9!")' > app.py
# 创建 Dockerfile
vim Dockerfile
步骤 2:编写 Dockerfile

dockerfile

复制代码
# 基础镜像(Python 3.11 官方镜像)
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 复制应用代码到容器
COPY app.py /app
# 容器启动时执行的命令
CMD ["python", "app.py"]
步骤 3:构建镜像并运行

bash

运行

复制代码
# 构建镜像(-t 打标签:镜像名:版本)
docker build -t my-python-app:1.0 .
# 运行自定义镜像
docker run my-python-app:1.0  # 输出 Hello Docker on CentOS 7.9! 则成功

五、Docker 服务管理(CentOS 7.9 特有)

1. 启动 / 停止 / 重启 Docker 服务

bash

运行

复制代码
sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl restart docker

2. 查看 Docker 服务日志(排查启动故障)

bash

运行

复制代码
sudo journalctl -u docker -f  # -f 实时跟踪日志

3. 禁止 Docker 开机自启

bash

运行

复制代码
sudo systemctl disable docker

六、常见问题排查(CentOS 7.9 高频问题)

1. 安装时提示 "没有可用软件包 docker-ce"

  • 原因:未正确配置 Docker 官方源,或系统内核版本过低;
  • 解决:
    1. 重新执行 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    2. 清理 yum 缓存:sudo yum clean all && sudo yum makecache fast
    3. 再次安装指定版本的 docker-ce。

2. 运行容器报错 "permission denied"

  • 原因:普通用户未加入 docker 组,或 SELinux 未关闭;
  • 解决:
    1. 重新执行「配置普通用户权限」步骤;
    2. 确认 SELinux 已关闭:getenforce 输出 Disabled(未关闭则重启系统)。

3. 拉取镜像超时(Timeout)

  • 原因:未配置镜像加速器,或网络不通;
  • 解决:
    1. 检查 daemon.json 中的加速器配置,重启 Docker;
    2. 测试网络:ping hub-mirror.c.163.com,能通则正常。

4. 容器启动后外部无法访问(如 Nginx 80 端口)

  • 原因:防火墙未放行端口,或端口映射错误;
  • 解决:
    1. 关闭防火墙(测试环境):sudo systemctl stop firewalld
    2. 生产环境放行端口:sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload
    3. 检查端口映射:docker ps 确认「PORTS」列显示 0.0.0.0:80->80/tcp

5. Docker 启动失败(提示 "containerd not running")

  • 原因:containerd 服务未启动(Docker 依赖 containerd);

  • 解决: bash

    运行

    复制代码
    sudo systemctl start containerd
    sudo systemctl enable containerd
    sudo systemctl restart docker

七、总结

CentOS 7.9 上 Docker 的核心流程:

  1. 前置准备:关闭 SELinux、配置防火墙(或关闭);
  2. 安装:通过官方源安装指定稳定版本的 Docker Engine;
  3. 配置:普通用户权限、镜像加速器(生产必备);
  4. 使用:重点掌握 docker run 命令(端口映射、数据挂载、环境变量),结合 Nginx/MySQL 实战案例理解容器运行逻辑。

通过以上步骤,即可在 CentOS 7.9 上搭建稳定的 Docker 环境,满足开发、测试或生产环境的容器化需求。后续可结合 docker-compose 编排多容器应用(如前端 + 后端 + 数据库),进一步提升部署效率。

相关推荐
皮糖小王子2 小时前
Docker打开本地镜像
运维·docker·容器
❀͜͡傀儡师2 小时前
docker 部署Flink和传统部署
docker·容器·flink
r***d8653 小时前
GitHub星标15万+的Docker项目,使用指南
docker·容器·github
❀͜͡傀儡师6 小时前
docker部署orion-ops一站式运维管理平台
运维·docker·github
笨蛋不要掉眼泪7 小时前
Docker概念入门与初步安装
docker·微服务·容器
青靴9 小时前
轻量级 CI/CD 实战(三):Kafka消费者Docker容器化部署
分布式·docker·kafka
青靴12 小时前
轻量级 CI/CD 实战(四):本地开发钉钉告警 → 自动部署云服务器 Kafka 消费者容器
ci/cd·docker·钉钉
秋邱14 小时前
自我进化!AI 驱动平台自动迭代,用户行为 + 数据反馈打造教育超级助手 2.0
网络·数据库·人工智能·redis·python·缓存·docker
艾莉丝努力练剑15 小时前
【Linux基础开发工具 (四)】Linux编程基础:深入理解gcc / g++编译与链接原理
linux·运维·服务器·c++·人工智能·ubuntu·centos