在現代軟件開發和運維中,Docker已成為一種非常流行的工具,它通過容器化應用程序來簡化部署過程。然而,默認的官方鏡像往往只能滿足基礎需求,無法涵蓋所有特定項目的具體要求。
原因 | 說明 |
---|---|
系統級改動無法通過 volume 實現 | 修改用戶、刪除命令、安裝系統組件等只能在鏡像層完成 |
安全加固要求可復制、可驗證 | 你不能讓每個節點手動執行一遍加固腳本,必須統一標準 |
合規性要求可追溯 | 構建鏡像可以打標簽、記錄作者和時間,方便審計和版本管理 |
鏡像 vs Volume 的適用場景對比表
場景 | 是否需要構建鏡像 | 使用 Volume 是否足夠 |
---|---|---|
修改系統組件(如安裝包、刪命令) | 必須構建鏡像 | 不夠 |
用戶權限、安全策略調整 | 必須構建鏡像 | 不夠 |
日志配置、訪問控制等應用級配置 | 可以用 volume | 足夠 |
數據持久化、網站靜態資源 | 可以用 volume | 足夠 |
安全合規、標準化部署 | 必須構建鏡像 | 不夠 |
自定義HTTP鏡像
在 CentOS 7 容器中安裝 httpd
,并提交為新鏡像 my-httpd-image
啟動容器并進入交互式 shell
docker run -it --name my-httpd-container centos:7 /bin/bash
這會創建一個名為 my-httpd-container
的容器,并進入它的 bash 環境。
在容器內安裝 httpd
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum clean all
yum makecacheyum install -y httpd
配置啟動服務
做一些簡單配置,比如添加一個測試頁面:
echo "Hello from Apache in Docker!" > /var/www/html/index.html
退出容器:
exit
提交容器為新鏡像
docker commit my-httpd-container my-httpd-image:latest
查看鏡像信息
docker images | grep my-httpd
你應該看到類似輸出:
my-httpd-image ? latest ? xxxxxxxxxxxx ? ... ?
運行該鏡像并啟動 Apache
為了運行這個鏡像并啟動 Apache,可以這樣運行:
docker run -d -p 8080:80 --name my-running-httpd my-httpd-image /usr/sbin/httpd -DFOREGROUND
解釋:
-d
: 后臺運行-p 8080:80
: 映射宿主機端口 8080 到容器的 80 端口/usr/sbin/httpd -DFOREGROUND
: 強制 Apache 前臺運行(避免容器立即退出)