手把手教你用 Docker 部署 Red Hat UBI8 鏡像
一、Red Hat UBI8 簡介
Red Hat UBI8(Universal Base Image 8,通用基礎鏡像)是 Red Hat 官方設計并維護的容器基礎層,專門用來承載你的容器化應用、中間件(如 Tomcat、MySQL)和各類工具——簡單說,它就像容器世界里的“操作系統底層”,所有需要容器化運行的程序,都可以把 UBI8 當作“地基”來搭建。
從實際使用角度,UBI8 有幾個核心價值,不管是初學者還是企業級工程師都得了解:
- 免費可分發:不用花錢就能下載、使用,還能基于它二次打包自己的應用鏡像,不用擔心版權問題;
- 官方維護+定期更新:Red Hat 團隊會持續給 UBI8 打安全補丁、更新系統庫,比自己找的第三方基礎鏡像(如隨意找的 CentOS 鏡像)更穩定、安全;
- 企業級兼容性:作為 Red Hat 生態的一部分,UBI8 能完美適配 Red Hat 旗下產品(如 OpenShift、RHEL),同時也兼容絕大多數 Linux 容器化應用,不會出現“應用在其他基礎鏡像能跑,在 UBI8 跑不了”的情況;
- 輕量且精簡:相比完整的 RHEL 系統鏡像,UBI8 只保留了容器運行必需的組件,體積更小,啟動更快,適合部署在服務器、云平臺等各種環境。
簡單總結:如果你需要一個“靠譜、安全、能長期用”的容器基礎鏡像,尤其是企業級場景(比如部署核心業務應用),UBI8 是首選之一。
二、準備工作:先裝 Docker
如果你的 Linux 服務器還沒裝 Docker 和 Docker Compose,直接用下面的一鍵腳本——支持 CentOS、Ubuntu、Debian 等絕大多數發行版,還能自動配置軒轅鏡像加速源(拉取 UBI8 更快),不用手動改配置,新手也能一步到位:
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
執行完腳本后,輸入 docker --version 和 docker compose --version,能看到版本號就說明裝好了。
三、找到并拉取 Red Hat UBI8 鏡像
我們用“軒轅鏡像”來拉取 UBI8(地址:https://xuanyuan.cloud/r/redhat/ubi8 ),這個源在國內訪問更快,還提供多種拉取方式,按需選就行。
3.1 先看鏡像信息(可選,了解細節)
打開上面的軒轅鏡像鏈接,頁面里會顯示 UBI8 的最新版本、鏡像大小、更新時間,還有不同架構(如 amd64、arm64)的拉取命令,高級工程師可以根據服務器架構選擇對應版本,初學者直接用默認的 latest 版本就行。
3.2 拉取 UBI8 鏡像(4種方式,推薦第3種)
方式1:軒轅鏡像登錄驗證拉取(適合需要鏡像權限的場景)
如果你的團隊配置了軒轅鏡像的登錄權限,用這個命令:
docker pull docker.xuanyuan.run/redhat/ubi8:latest
“latest”是鏡像的最新版本標簽,如果你需要指定版本(比如 8.9),把“latest”換成具體版本號就行(如 docker.xuanyuan.run/redhat/ubi8:8.9)。
方式2:拉取后改名(方便后續使用)
有些時候,拉取的鏡像名太長(比如帶“docker.xuanyuan.run”前綴),后續啟動容器時命令不方便記,可以拉取后改個短名字:
# 先拉取鏡像
docker pull docker.xuanyuan.run/redhat/ubi8:latest \
# 改名為“redhat/ubi8:latest”(官方標準名)
&& docker tag docker.xuanyuan.run/redhat/ubi8:latest redhat/ubi8:latest \
# 刪除原來的長名鏡像,避免占存儲空間
&& docker rmi docker.xuanyuan.run/redhat/ubi8:latest
解釋下這三個命令:
docker pull:從軒轅鏡像源下載鏡像;docker tag:給鏡像加一個新標簽(相當于“別名”),不改變鏡像本身;docker rmi:刪除原來的標簽(不是刪鏡像文件),釋放標簽占用的資源。
方式3:免登錄拉取(推薦!新手直接用)
不用注冊賬號,不用輸密碼,直接拉取,速度還快,適合大多數場景:
# 基礎拉取命令
docker pull xxx.xuanyuan.run/redhat/ubi8:latest
# 帶改名的完整命令(推薦,后續用著方便)
docker pull xxx.xuanyuan.run/redhat/ubi8:latest \
&& docker tag xxx.xuanyuan.run/redhat/ubi8:latest redhat/ubi8:latest \
&& docker rmi xxx.xuanyuan.run/redhat/ubi8:latest
這個方式的鏡像內容和“docker.xuanyuan.run”源完全一樣,只是拉取地址不用登錄,新手不用糾結權限問題。
方式4:官方直連拉取(適合能訪問 Docker Hub 的環境)
如果你的服務器能直接連 Docker Hub(比如海外服務器),或者已經配置了軒轅鏡像加速器(前面的一鍵腳本已經配了),可以直接拉 Red Hat 官方鏡像:
docker pull redhat/ubi8:latest
3.3 驗證鏡像是否拉取成功
不管用哪種方式,拉完后執行這個命令檢查:
docker images
如果輸出里有類似下面的內容,說明拉取成功了:
REPOSITORY TAG IMAGE ID CREATED SIZE
redhat/ubi8 latest 7f88b8111111 3 days ago 235MB
四、部署 UBI8 容器(3種場景,按需選)
UBI8 是基礎鏡像,部署時要根據你的需求選方案——比如測試用就簡單啟動,實際項目要持久化數據,企業級場景用 Compose 管理。
4.1 快速部署(測試/臨時使用,適合新手)
如果只是想先“用起來”UBI8,比如測試基礎環境是否正常,用這個命令:
# 啟動 UBI8 容器,命名為“ubi8-test”
docker run -d -it --name ubi8-test redhat/ubi8:latest /bin/bash
命令參數解釋(新手必看):
-d:讓容器在后臺運行(不會占用當前終端);-it:啟用交互式終端(因為 UBI8 默認沒有前臺進程,不加這個容器會啟動后立即退出);--name ubi8-test:給容器起個名字“ubi8-test”,后續停止、重啟容器時直接用這個名字,不用記長 ID;/bin/bash:容器啟動后執行的命令(啟動 Bash 終端,保持容器運行)。
怎么用這個測試容器?
進入容器內部操作(比如查看系統版本、安裝工具):
# 進入“ubi8-test”容器的 Bash 終端
docker exec -it ubi8-test bash
進去后可以試幾個命令,比如:
- 查看系統版本:
cat /etc/redhat-release(會顯示“Red Hat Enterprise Linux release 8.x”); - 安裝簡單工具(如 wget):
microdnf install wget -y(UBI8 用 microdnf 代替 yum,更輕量); - 退出容器:輸入
exit就行,容器還會在后臺運行。
4.2 掛載目錄部署(實際項目用,持久化數據)
測試完后,實際項目里用 UBI8,必須做“數據持久化”——比如容器里的配置文件、日志、業務數據,要存在宿主機(你的服務器)上,不然容器刪了數據就沒了。
步驟1:在宿主機創建掛載目錄
先在服務器上建幾個目錄,用來存 UBI8 容器的配置、日志和數據:
# 一次性創建 3 個目錄(conf:配置,logs:日志,data:數據)
mkdir -p /data/ubi8/{conf,logs,data}
“/data/ubi8”是宿主機上的目錄路徑,你可以改成自己習慣的路徑(比如 /opt/ubi8),只要后續命令對應上就行。
步驟2:啟動容器并掛載目錄
docker run -d -it --name ubi8-prod \
# 掛載宿主機目錄到容器內(格式:宿主機路徑:容器內路徑)
-v /data/ubi8/conf:/etc/ubi8/conf \
-v /data/ubi8/logs:/var/log/ubi8 \
-v /data/ubi8/data:/opt/ubi8/data \
# (可選)設置時區,避免容器內時間和宿主機不一致
-e TZ=Asia/Shanghai \
redhat/ubi8:latest /bin/bash
目錄掛載說明(清晰對應,不怕搞混):
| 宿主機目錄 | 容器內目錄 | 用途說明 |
|---|---|---|
/data/ubi8/conf |
/etc/ubi8/conf |
存容器的配置文件(如后續部署應用的配置) |
/data/ubi8/logs |
/var/log/ubi8 |
存容器的日志文件(方便在宿主機查看日志) |
/data/ubi8/data |
/opt/ubi8/data |
存業務數據(如數據庫文件、緩存文件) |
怎么驗證掛載生效?
在宿主機的 data 目錄下寫個文件,看容器里能不能讀到:
- 宿主機執行:
echo "UBI8 持久化測試" > /data/ubi8/data/test.txt; - 進入容器:
docker exec -it ubi8-prod bash; - 容器內查看:
cat /opt/ubi8/data/test.txt,能看到“UBI8 持久化測試”就說明掛載成功了。
4.3 Docker Compose 部署(企業級場景,適合高級工程師)
如果你的項目里有多個容器(比如 UBI8 上部署了 Java 應用,還要連 MySQL 容器),用 Docker Compose 能統一管理所有容器的配置,一鍵啟動/停止,不用記一堆命令。
步驟1:創建 docker-compose.yml 文件
在服務器上找個目錄(比如 /opt/ubi8-compose),創建 docker-compose.yml 文件:
version: '3.8' # Compose 語法版本,3.8 兼容大多數 Docker 版本
services:
# 定義 UBI8 服務,名稱叫“ubi8-service”
ubi8-service:
image: redhat/ubi8:latest # 使用的 UBI8 鏡像
container_name: ubi8-enterprise # 容器名稱
restart: always # 容器意外退出后自動重啟(保障服務不中斷)
tty: true # 保持終端運行(類似 -t 參數,避免容器退出)
stdin_open: true # 啟用標準輸入(類似 -i 參數)
environment:
- TZ=Asia/Shanghai # 設置時區
# (可選)添加其他環境變量,比如應用的配置參數
# - APP_ENV=production
volumes:
# 掛載目錄,和前面的“掛載目錄部署”對應
- ./conf:/etc/ubi8/conf
- ./logs:/var/log/ubi8
- ./data:/opt/ubi8/data
# (可選)暴露端口,如果 UBI8 上部署了 Web 應用,需要映射端口
# ports:
# - "8080:8080" # 宿主機 8080 端口映射到容器 8080 端口
步驟2:啟動服務
- 進入
docker-compose.yml所在的目錄(比如 /opt/ubi8-compose); - 執行啟動命令:
# 后臺啟動所有服務(-d 表示后臺運行)
docker compose up -d
常用 Compose 命令(高級工程師必備):
- 停止服務:
docker compose down(不會刪掛載的數據,放心用); - 查看服務狀態:
docker compose ps(看容器是否在運行); - 查看容器日志:
docker compose logs ubi8-service(只看 UBI8 容器的日志); - 重啟服務:
docker compose restart ubi8-service。
第三步:驗證 UBI8 容器是否正常運行
不管用哪種部署方式,都要確認容器沒問題,這幾步必做:
1. 查看容器狀態
docker ps | grep ubi8
如果輸出里的“STATUS”列顯示“Up”(比如“Up 5 minutes”),說明容器在正常運行。
2. 檢查容器內環境
進入容器,執行基本命令,確認系統和工具正常:
# 進入容器
docker exec -it 容器名 bash # 容器名是你起的,比如 ubi8-test、ubi8-prod
# 容器內執行以下命令,驗證環境
cat /etc/redhat-release # 看系統版本,確認是 UBI8
microdnf --version # 看包管理工具是否正常
date # 看時間是否和宿主機一致(如果設了時區)
3. 驗證持久化(針對掛載目錄部署)
前面已經講過,這里再補一個場景:在容器內寫文件,宿主機查看——確保數據雙向同步:
- 容器內執行:
echo "企業級數據測試" > /opt/ubi8/data/enterprise.txt; - 宿主機執行:
cat /data/ubi8/data/enterprise.txt(路徑對應你掛載的宿主機目錄),能看到內容就沒問題。
常見問題(踩過的坑都在這了)
1. 拉取鏡像失敗,提示“network error”或“timeout”?
- 原因:網絡不好,或者鏡像源沒配置對;
- 解決:用前面的“免登錄拉取”方式(xxx.xuanyuan.run 源),或者重新執行 Docker 一鍵安裝腳本(會自動配置軒轅加速源)。
2. 容器啟動后立即退出,STATUS 顯示“Exited”?
- 原因:UBI8 是基礎鏡像,沒有默認的前臺進程,沒加
-it或tty: true參數; - 解決:
- 快速部署:加
-it參數(參考 4.1 的命令); - Compose 部署:確保
docker-compose.yml里有tty: true和stdin_open: true(參考 4.3 的配置)。
- 快速部署:加
3. 容器內用 microdnf 安裝軟件,提示“no package available”?
- 原因:UBI8 的默認軟件源可能沒包含某些工具,或者需要更新源;
- 解決:先更新源,再安裝:
# 容器內執行
microdnf update -y # 更新軟件源緩存
microdnf install 軟件名 -y # 比如 install wget -y、install vim -y
4. 掛載目錄時,提示“permission denied”(權限不足)?
- 原因:宿主機目錄的權限太低,容器內用戶(默認是 root)沒權限讀寫;
- 解決:給宿主機的掛載目錄加權限:
# 宿主機執行,替換成你的目錄路徑
chmod -R 755 /data/ubi8
# 或者給目錄改所有者(和容器內用戶一致,默認是 root)
chown -R root:root /data/ubi8
5. 容器內時間和宿主機不一致?
- 原因:沒設置時區,容器用默認的 UTC 時間;
- 解決:
- 啟動時加環境變量:
-e TZ=Asia/Shanghai(參考 4.2 的命令); - Compose 部署:在
environment里加- TZ=Asia/Shanghai(參考 4.3 的配置)。
- 啟動時加環境變量:
結尾:UBI8 后續怎么用?
UBI8 本身是基礎鏡像,不是“應用”,部署完后,你可以基于它做這些事:
- 新手:練習 Linux 命令(容器里操作,不怕搞壞宿主機);
- 開發:打包自己的應用(比如把 Java 項目、Python 項目放到 UBI8 里,做成新鏡像);
- 企業級:部署中間件(如在 UBI8 上裝 Nginx、Redis、PostgreSQL,用 Compose 管理)。
如果后續遇到問題,優先看容器日志(docker logs 容器名),大多數問題能從日志里找到原因;也可以參考 Red Hat 官方文檔(https://access.redhat.com/documentation/en-us/red_hat_universal_base_image/8 ),里面有更詳細的 UBI8 用法。
從快速測試到企業級部署,這篇教程覆蓋了所有關鍵步驟,跟著做就能把 UBI8 用起來——新手先練熟“快速部署”和“掛載目錄”,高級工程師可以重點研究 Compose 配置和鏡像二次打包,按需進階就行。

如果你需要一個“靠譜、安全、能長期用”的容器基礎鏡像,尤其是企業級場景(比如部署核心業務應用),UBI8 是首選之一。
浙公網安備 33010602011771號