Docker 部署 CentOS 全流程指南
CentOS 官方已于 2024 年 6 月 30 日停止所有版本的維護與更新(EOL),現有鏡像不再提供安全補丁和功能迭代。當前 Docker 部署 CentOS 僅適用于遺留系統兼容、歷史項目測試等場景,不建議用于新生產環境。下文將詳細說明部署流程,并提供成熟的替代方案供你選擇。
關于 CentOS
CentOS 曾是基于紅帽企業 Linux(RHEL)源代碼構建的社區級發行版,核心優勢集中在三點:
- 與 RHEL 1:1 功能兼容,可無縫運行企業級應用,無需修改配置
- 10 年長期支持周期,穩定性強,曾是服務器領域的"標配"
- 完全免費且可再分發,降低企業運維成本
但隨著紅帽調整開源策略,CentOS 項目終止,后續推出的 CentOS Stream 轉為 RHEL 上游測試版本,不再具備原 CentOS 的穩定特性。當前 Docker 鏡像的最后更新停留在 2020 年 11 月,存在未修復的安全漏洞,生產環境使用風險極高。
為什么仍需 Docker 部署 CentOS?
盡管已停止維護,在特定場景下 Docker 部署仍是高效選擇:
- 遺留系統遷移過渡:原有業務基于 CentOS 開發,暫未完成遷移時,容器化部署可快速搭建兼容環境
- 測試驗證需求:需要復現歷史項目的運行環境,驗證兼容性或排查舊版本問題
- 臨時開發環境:短期使用且不涉及敏感數據的開發場景,容器隔離可避免影響主機環境
- 學習實踐:熟悉 RHEL 系 Linux 操作,容器化部署無需占用完整服務器資源
?? 推薦替代方案(優先選擇)
對于新項目或需要長期運行的服務,推薦以下與 CentOS 兼容的替代發行版,均支持 Docker 部署:
1. Rocky Linux
- 核心優勢:由 CentOS 創始人發起,完全兼容 RHEL,社區驅動維護,免費無商業限制
- 適用場景:企業級生產環境、原 CentOS 7/8 用戶遷移首選
- Docker 鏡像:
docker pull rockylinux/rockylinux:latest - 鏡像詳情:?? 軒轅鏡像 Rocky Linux 頁面
2. AlmaLinux OS
- 核心優勢:與 RHEL 二進制兼容,提供 10 年長期支持,商業公司贊助保障可持續性
- 適用場景:服務器部署、數據庫服務、企業應用運行
- Docker 鏡像:
docker pull almalinux/almalinux:latest - 鏡像詳情:?? 軒轅鏡像 AlmaLinux 頁面
3. Oracle Linux
- 核心優勢:基于 RHEL 源代碼,完全免費,提供可選付費支持,內存管理優化出色
- 適用場景:預算有限但需要 RHEL 兼容性的企業,Oracle 生態用戶
- Docker 鏡像:
docker pull oraclelinux:latest - 鏡像詳情:?? 軒轅鏡像 Oracle Linux 頁面
4. Ubuntu Server
- 核心優勢:社區活躍,軟件包豐富,部署簡單,云平臺支持完善
- 適用場景:通用服務器、開發環境、輕量級應用部署
- Docker 鏡像:
docker pull ubuntu:latest - 鏡像詳情:?? 軒轅鏡像 Ubuntu 頁面
?? 準備工作
若你的系統尚未安裝 Docker,請先完成環境配置:
Linux Docker & Docker Compose 一鍵安裝
腳本支持主流 Linux 發行版,自動配置軒轅鏡像加速源,簡化安裝流程:
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
驗證安裝成功:
docker --version && docker compose --version
輸出版本信息即表示安裝完成。
1、查看并拉取 CentOS 鏡像
CentOS 鏡像已歸檔至軒轅鏡像平臺,僅保留歷史標簽(無最新版本):
?? 軒轅鏡像 CentOS 頁面
1.1 支持的鏡像標簽
僅推薦拉取 CentOS 7 鏡像(兼容性最好,使用量最大),其他版本漏洞風險更高:
# 拉取 CentOS 7 鏡像(推薦)
docker pull docker.xuanyuan.run/library/centos:7
# 可選:拉取后重命名為簡潔標簽
docker tag docker.xuanyuan.run/library/centos:7 centos:7
1.2 免登錄快速拉?。ㄍ扑])
無需配置賬戶,直接拉取鏡像:
docker pull xxx.xuanyuan.run/library/centos:7
1.3 驗證拉取結果
docker images | grep centos
輸出類似以下內容即成功:
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 8652b9f0cb4c 2 years ago 204MB
2、Docker 部署 CentOS 實戰
提供三種部署方案,根據使用場景選擇,所有方案均基于 CentOS 7 鏡像。
2.1 快速部署(最簡測試)
適合臨時驗證環境,一鍵啟動交互式容器:
# 啟動容器并進入命令行,命名為 centos-test
docker run -it --name centos-test centos:7 /bin/bash
核心參數說明:
-it:交互式運行,保持終端連接--name centos-test:指定容器名稱,便于后續管理/bin/bash:啟動后進入 Bash 命令行
退出與重啟:
- 臨時退出(容器后臺運行):按
Ctrl+P+Q - 完全退出(停止容器):按
Ctrl+D或輸入exit - 重啟容器并重新進入:
docker restart centos-test && docker exec -it centos-test /bin/bash
2.2 掛載目錄部署(推薦,持久化配置)
通過目錄掛載實現文件共享、配置持久化,避免容器銷毀后數據丟失:
第一步:創建宿主機掛載目錄
# 創建數據、配置、日志三個目錄,按需調整路徑
mkdir -p /data/centos/{data,conf,logs}
第二步:啟動容器并掛載目錄
docker run -d --name centos-web \
-p 8080:80 \ # 端口映射(宿主機8080:容器80),按需調整
-v /data/centos/data:/var/data \ # 數據目錄掛載
-v /data/centos/conf:/etc/conf \ # 配置目錄掛載
-v /data/centos/logs:/var/log \ # 日志目錄掛載
-e TZ=Asia/Shanghai \ # 設置時區(解決容器時區偏差)
centos:7 \
/bin/bash -c "while true; do echo 'CentOS container running' >> /var/log/run.log; sleep 3600; done"
目錄映射說明:
| 宿主機目錄 | 容器內目錄 | 用途 |
|---|---|---|
/data/centos/data |
/var/data |
存放業務數據文件 |
/data/centos/conf |
/etc/conf |
存放自定義配置文件 |
/data/centos/logs |
/var/log |
存放運行日志 |
進入運行中的容器:
docker exec -it centos-web /bin/bash
2.3 docker-compose 部署(企業級管理)
適合多服務組合或長期運行,通過配置文件統一管理:
第一步:創建 docker-compose.yml 文件
version: '3'
services:
centos:
image: centos:7
container_name: centos-service
ports:
- "8080:80"
- "2222:22" # 若需 SSH 連接可映射22端口
volumes:
- ./data:/var/data
- ./conf:/etc/conf
- ./logs:/var/log
environment:
- TZ=Asia/Shanghai
restart: on-failure # 容器故障時自動重啟
command: /bin/bash -c "yum install -y crontabs && crond -n" # 示例:安裝定時任務并啟動
第二步:啟動與管理服務
# 啟動服務(在 yml 文件所在目錄執行)
docker compose up -d
# 查看狀態
docker compose ps
# 停止服務(保留容器)
docker compose stop
# 停止并刪除容器
docker compose down
3、CentOS 容器關鍵配置優化
3.1 修復 yum 源(解決鏡像源失效問題)
CentOS 7 官方源已停止維護,需替換為第三方鏡像源:
# 進入容器后執行
sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|^#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo
yum clean all && yum makecache
3.2 安裝基礎工具
默認鏡像精簡,需手動安裝常用工具:
yum install -y wget curl vim net-tools telnet
3.3 啟用 systemd 服務(可選)
CentOS 7 容器支持 systemd,但需特殊配置:
# 1. 創建 Dockerfile 構建基礎鏡像
cat > Dockerfile << EOF
FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ \$i == systemd-tmpfiles-setup.service ] || rm -f \$i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*; \
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
EOF
# 2. 構建鏡像
docker build -t centos7-systemd .
# 3. 啟動容器
docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos7-systemd
3.4 解決存儲驅動限制
CentOS 容器默認使用 Device Mapper 存儲驅動,存在 100GB 存儲池限制,建議切換為 OverlayFS:
# 1. 停止 Docker 服務
systemctl stop docker
# 2. 備份原有數據(可選)
mv /var/lib/docker /var/lib/docker.bak
# 3. 修改 Docker 配置
cat > /etc/docker/daemon.json << EOF
{
"storage-driver": "overlay2"
}
EOF
# 4. 重啟 Docker
systemctl daemon-reload && systemctl start docker
4、常見問題排查
4.1 容器啟動失敗(狀態碼 139)
原因:CentOS 6/7 依賴 vsyscall 系統調用,部分主機默認禁用
解決方案:
# 檢查主機是否支持 vsyscall
grep vsyscall /proc/self/maps
# 無輸出則添加內核參數
grubby --args="vsyscall=emulated" --update-kernel="$(grubby --default-kernel)"
reboot # 重啟生效
4.2 yum 安裝軟件報錯
原因:鏡像源失效或緩存問題
解決方案:
- 執行 3.1 節的鏡像源替換命令
- 關閉 GPG 校驗(臨時方案):
yum install -y 軟件名 --nogpgcheck
4.3 容器內時區不正確
解決方案:啟動時添加時區環境變量
docker run -d -e TZ=Asia/Shanghai --name centos-test centos:7
4.4 掛載目錄權限不足
原因:宿主機目錄權限與容器內用戶權限不匹配
解決方案:
# 1. 調整宿主機目錄權限
chmod -R 777 /data/centos
# 2. 或啟動時指定用戶
docker run -d -u root --name centos-test -v /data/centos:/var/data centos:7
結尾
本文詳細覆蓋了 Docker 部署 CentOS 的全流程,從鏡像拉取、多場景部署到配置優化和問題排查,適用于遺留系統兼容等特定需求。但再次強調,CentOS 已終止維護,新環境請優先選擇 Rocky Linux、AlmaLinux 等替代方案,避免安全風險。

CentOS 官方已于 2024 年 6 月 30 日停止所有版本的維護與更新(EOL),現有鏡像不再提供安全補丁和功能迭代。當前 Docker 部署 CentOS 僅適用于遺留系統兼容、歷史項目測試等場景,不建議用于新生產環境。下文將詳細說明部署流程,并提供成熟的替代方案供你選擇。
浙公網安備 33010602011771號