目錄
簡介
一、Docker 容器重啟策略與狀態碼解析
(一)Docker 容器重啟策略詳解
(二)Docker 容器常見退出狀態碼
二、Docker Compose 工具深度應用
(一)Docker Compose 簡介與安裝
(二)YAML 文件格式與編寫規范
(三)Docker Compose 基本操作命令
1. 容器運行
2. 容器控制
3. 容器刪除
(四)Docker Compose 案例演示
1. 編寫 docker-compose.yaml 文件
2. 配置 Nginx
3. 執行部署
4. 查看容器狀態
三、Harbor 企業級私有倉庫搭建與管理
(一)Harbor 基礎概念
1. Harbor 簡介
2. Harbor 的核心優勢
3. Harbor 架構組成
(二)Harbor 部署實戰
1. 環境準備
2. 基礎環境設置(兩臺主機均需操作)
3. 下載與安裝
4. 配置 Harbor
5. 執行安裝
6. 訪問與驗證
(三)Harbor 客戶端應用
1. 配置 Docker 信任私有倉庫
2. 登錄 Harbor 倉庫
3. 推送鏡像到 Harbor
4. 從 Harbor 拉取鏡像
5. 退出 Harbor 登錄
四、總結
簡介
在當今云計算與容器化技術飛速發展的時代,Docker 作為容器化領域的領軍技術,已成為開發與運維團隊不可或缺的工具。本文將探討 Docker Compose 多容器編排工具與 Harbor 企業級私有倉庫的核心技術,幫助讀者掌握從容器管理到鏡像安全存儲的完整解決方案。
一、Docker 容器重啟策略與狀態碼解析
(一)Docker 容器重啟策略詳解
Docker 容器的重啟策略是面向生產環境的重要機制,由 Docker 守護進程控制,在開發過程中可忽略,但在生產部署中至關重要。常見的重啟策略包括:
- no(默認策略):容器退出時不進行重啟,適用于開發測試場景。
- on-failure:僅在容器非正常退出(退出狀態碼非 0)時重啟,是生產環境中常用的策略之一。
- on-failure:3:在 on-failure 基礎上,限制最多重啟 3 次,避免容器反復重啟消耗系統資源。
- always:無論容器以何種狀態退出,都會立即重啟,確保服務持續運行。
- unless-stopped:與 always 類似,但 Docker 守護進程啟動時已停止的容器不會重啟。
示例命令:
# 啟動一個始終重啟的容器
docker run -itd --restart=always --name host1 busybox sh
該命令通過 ??--restart=always?
? 參數指定容器退出時始終重啟,確保 host1 容器保持運行狀態。
(二)Docker 容器常見退出狀態碼
通過容器退出狀態碼可快速判斷容器運行情況:
狀態碼 | 說明 |
0 | 容器正常退出,表明容器內的進程成功執行完畢。 |
125 | Docker 守護進程本身出現錯誤,需檢查 Docker 服務狀態。 |
126 | 容器啟動后要執行的默認命令無法調用,可能是命令權限問題或路徑錯誤。 |
127 | 容器啟動后要執行的默認命令不存在,需確認命令名稱是否正確。 |
其他 | 容器內正常執行的命令返回的狀態碼,需根據具體命令邏輯分析。 |
二、Docker Compose 工具深度應用
(一)Docker Compose 簡介與安裝
Docker Compose 的前身是 Fig,是定義和運行多個 Docker 容器的強大工具。通過一個配置文件即可定義多個容器,并使用一條命令啟動,極大簡化了多容器應用的部署。
安裝步驟:
- 使用 curl 下載對應版本的 Docker Compose:
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
該命令從 GitHub 下載指定版本的 Docker Compose 二進制文件并保存到 ??/usr/local/bin?
? 目錄。
- 添加執行權限并創建軟鏈接:
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
??chmod +x?
?? 賦予文件執行權限,??ln -s?
?? 創建軟鏈接以便在任何目錄都能執行 ??docker-compose?
? 命令。
- 驗證安裝:
docker-compose --version
輸出版本信息則表示安裝成功。
(二)YAML 文件格式與編寫規范
Docker Compose 使用 YAML 格式的配置文件,YAML 是一種可讀性高的標記語言,語法比 XML 簡單。編寫時需注意:
- 不支持制表符(tab)縮進,必須使用空格。
- 通常開頭縮進兩個空格,保持格式統一。
- 冒號、逗號、橫桿等字符后需縮進一個空格。
- 使用 ?
?#?
? 號添加注釋。 - 包含特殊字符時用單引號括起來,布爾值也需用引號括起-。
(三)Docker Compose 基本操作命令
1. 容器運行
- 前臺運行:?
?docker-compose up?
?,將容器日志輸出到前臺,按 Ctrl+C 停止。 - 后臺運行:?
?docker-compose up -d?
?,容器在后臺運行,是生產環境的常用方式。 - 重新構建運行:?
?docker-compose up --build -d?
?,在啟動前重新構建鏡像。
2. 容器控制
- 關閉指定容器:?
?docker-compose stop <容器名稱>?
??,如 ??docker-compose stop nginx?
? 停止名為 nginx 的容器-。 - 全部關閉:?
?docker-compose stop?
?,停止所有由 Compose 管理的容器。 - 啟動指定容器:?
?docker-compose start <容器名稱>?
?,啟動已停止的指定容器-。 - 全部啟動:?
?docker-compose start?
?,啟動所有已停止的容器。 - 重啟指定容器:?
?docker-compose restart <容器名稱>?
?,重啟指定容器-。 - 全部重啟:?
?docker-compose restart?
?,重啟所有容器。
3. 容器刪除
??docker-compose down?
? 命令用于停止并刪除容器、網絡等資源,是清理環境的常用命令。
(四)Docker Compose 案例演示
以部署 Nginx 服務為例,演示 Compose 的實際應用:
1. 編寫 docker-compose.yaml 文件
version: '2'
services:webapp:image: 'nginx'ports:- "80:80"volumes:- "/www/html:/www/html:rw"- "/opt/nginx/nginx.conf:/etc/nginx/nginx.conf"
- ?
?version?
? 指定 Compose 文件格式版本。 - ?
?services.webapp?
? 定義名為 webapp 的服務。 - ?
?image?
? 指定使用 nginx 鏡像。 - ?
?ports?
? 將容器的 80 端口映射到主機的 80 端口。 - ?
?volumes?
?? 設置卷掛載,實現數據持久化和配置自定義,??/www/html:/www/html:rw?
? 表示讀寫權限掛載。
2. 配置 Nginx
創建 nginx 配置文件并上傳到 Docker 主機:
mkdir /opt/nginx
vim /opt/nginx/nginx.conf
在配置文件中設置工作進程數、事件連接數、HTTP 服務等參數,如:
worker_processes 1;
events {worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root /www/html;index index.html index.htm index.php;}# 其他配置...}
}
該配置定義了一個基本的 Nginx 服務,監聽 80 端口,根目錄為 ??/www/html?
?-。
3. 執行部署
docker-compose up -d
該命令在后臺啟動 Nginx 容器,根據配置文件完成服務部署。
4. 查看容器狀態
docker-compose ps
命令列出當前運行的容器及其狀態,確認 Nginx 服務是否正常啟動。
三、Harbor 企業級私有倉庫搭建與管理
(一)Harbor 基礎概念
1. Harbor 簡介
Harbor 是 VMware 開源的企業級 Docker Registry 項目,基于 Docker 開源的 Registry 構建,添加了管理 UI、基于角色的訪問控制、LDAP/AD 集成、審計日志等企業級功能。作為私有倉庫,Harbor 提供了更好的性能和安全性,提升了鏡像傳輸和管理效率。
2. Harbor 的核心優勢
- 基于角色的訪問控制:用戶和倉庫按項目組織,不同用戶在項目中擁有不同權限。
- 鏡像復制策略:支持在多實例間復制(同步)鏡像,適用于負載平衡、高可用性等復雜場景。
- LDAP/AD 集成:與企業現有的 LDAP/AD 系統集成,實現統一的用戶認證和管理。
- 鏡像管理功能:支持刪除鏡像和垃圾回收,釋放存儲空間。
- 圖形化界面:提供直觀的 UI,方便用戶瀏覽、搜索鏡像和管理項目。
- 審計與 API:記錄所有操作日志,提供 RESTful API 便于與外部系統集成-。
3. Harbor 架構組成
Harbor 主要由以下組件構成:
- Proxy:前置反向代理,統一接收瀏覽器和 Docker 客戶端的請求并轉發到后端服務。
- Registry:存儲 Docker 鏡像,處理 push/pull 命令,通過 Token 服務實現訪問控制-。
- Core services:核心服務,包括 UI(圖形界面)、Webhook(獲取鏡像狀態變化)和 Token 服務(簽發訪問令牌)-。
- Database (Harbor-db):存儲用戶權限、審計日志、鏡像分組等數據。
- Log collector (Harbor-log):收集各組件日志,用于監控和分析。
(二)Harbor 部署實戰
1. 環境準備
操作系統 | 主機名 | 配置 | IP |
CentOS 7.9 2009 | harbor | 2C4G | 192.168.10.106 |
CentOS 7.9 2009 | client | 2C4G | 192.168.10.101 |
2. 基礎環境設置(兩臺主機均需操作)
- 關閉防火墻:
systemctl stop firewalld
systemctl disable firewalld
停止并禁用防火墻,確保網絡通信正常。
- 關閉 selinux:
setenforce 0
sed -i "s/.*SELINUX=.*$/SELINUX=disabled/g" /etc/selinux/config
臨時和永久關閉 selinux,避免其對 Docker 操作產生干擾。
3. 下載與安裝
- 下載安裝包:從 GitHub 下載 Harbor 離線安裝包,如 v2.4.3 版本:
wget https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz
。
- 解壓安裝包:
tar -zxvf harbor-offline-installer-v2.4.3.tgz
解壓后得到 harbor 目錄,包含安裝腳本和配置文件模板-。
4. 配置 Harbor
- 復制配置文件模板:
cp harbor.yml.tmpl harbor.yml
創建默認配置文件。
- 編輯配置文件:
vim harbor.yml
修改以下關鍵配置:
hostname: 192.168.10.106 # 設置為當前主機 IP
harbor_admin_password: Harbor12345 # 管理員密碼
# 注釋掉 https 相關配置,使用 http 訪問
??hostname?
?? 配置為 Harbor 服務器的 IP 地址,??harbor_admin_password?
? 設置管理員登錄密碼-。
5. 執行安裝
./install.sh
安裝腳本會檢查 Docker 和 Docker Compose 版本,加載 Harbor 鏡像,并啟動各組件容器。成功安裝后會顯示 "Harbor has been installed and started successfully"。
6. 訪問與驗證
在瀏覽器中輸入 ??http://192.168.10.106?
??,使用默認用戶名 ??admin?
?? 和配置的密碼 ??Harbor12345?
?? 登錄。登錄后可創建項目和用戶,如創建名為 ??kubernetes?
?? 的項目和 ??zhangsan?
? 用戶-。
(三)Harbor 客戶端應用
1. 配置 Docker 信任私有倉庫
在所有 Docker 主機上添加以下配置到 ??/etc/docker/daemon.json?
?:
{"insecure-registries": ["192.168.10.106"]
}
該配置告知 Docker 信任指定的私有倉庫,避免因證書問題導致操作失敗。
重啟 Docker 服務使配置生效:
systemctl daemon-reload
systemctl restart docker
。
2. 登錄 Harbor 倉庫
docker login 192.168.10.106 -u zhangsan -p Aptech1!
使用創建的用戶賬號登錄 Harbor 倉庫,??-u?
?? 指定用戶名,??-p?
? 指定密碼。
3. 推送鏡像到 Harbor
# 拉取一個示例鏡像
docker pull cirros
# 為鏡像打標簽,格式為 [倉庫地址]/[項目名]/[鏡像名]:[版本]
docker tag cirros 192.168.10.106/kubernetes/cirros:v1
# 推送鏡像到 Harbor
docker push 192.168.10.106/kubernetes/cirros:v1
??docker tag?
?? 命令為鏡像添加 Harbor 倉庫的標簽,??docker push?
? 命令將鏡像推送到指定倉庫和項目-。
4. 從 Harbor 拉取鏡像
在另一臺主機上重復配置步驟后,使用以下命令拉取鏡像:
docker pull 192.168.10.106/kubernetes/cirros:v1
驗證鏡像是否能從 Harbor 成功拉取。
5. 退出 Harbor 登錄
docker logout 192.168.10.106
退出當前 Harbor 倉庫登錄。
四、總結
本文全面介紹了 Docker Compose 與 Harbor 私有倉庫的核心技術與實踐操作。Docker Compose 通過 YAML 配置文件和簡單命令,實現了多容器應用的高效編排與管理,極大提升了開發和部署效率。Harbor 作為企業級私有倉庫,提供了安全、可控的鏡像管理解決方案,滿足了企業在鏡像存儲、傳輸和權限控制等方面的需求。
通過掌握這些技術,開發與運維團隊能夠構建更加靈活、可靠的容器化應用架構,為現代化軟件開發與部署奠定堅實基礎。在實際應用中,可根據企業具體需求,進一步優化 Docker Compose 配置和 Harbor 安全策略,確保容器化環境的穩定運行與高效管理。