Docker Compose 與 Harbor 私有倉庫

目錄

簡介

一、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 容器的強大工具。通過一個配置文件即可定義多個容器,并使用一條命令啟動,極大簡化了多容器應用的部署。

安裝步驟

  1. 使用 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?? 目錄。

  1. 添加執行權限并創建軟鏈接:
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

??chmod +x??? 賦予文件執行權限,??ln -s??? 創建軟鏈接以便在任何目錄都能執行 ??docker-compose?? 命令。

  1. 驗證安裝:
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 安全策略,確保容器化環境的穩定運行與高效管理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/911770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/911770.shtml
英文地址,請注明出處:http://en.pswp.cn/news/911770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

thinkphp8之文件上傳

文件上傳安裝 命令&#xff1a;composer require topthink/think-filesystem 二&#xff0e;上傳代碼、接收代碼 <form action"/index/index/index" enctype"multipart/form-data" method"post"> <input type"file" name…

【商業分析】價值流圖應用案例:服務器硬件生產

在當今競爭激烈的市場環境下&#xff0c;服務器硬件制造商面臨著諸多挑戰。本文中&#xff0c;田辛老師將深入探討價值流圖&#xff08;VSM&#xff09;在某服務器硬件生產中的應用案例&#xff0c;展示其如何助力企業實現降本增效。 一、價值流圖概述 &#xff08;一&#x…

系統性能優化-4 磁盤

系統性能優化-4 磁盤 磁盤作為計算機中速度最慢的硬件之一&#xff0c;常常是系統的性能瓶頸&#xff0c;優化磁盤一般能得到明顯的提升~ 文章以如何高效的傳輸文件來討論針對磁盤的優化技術&#xff0c;如零拷貝、直接 IO、異步 IO等。 最簡單的網絡傳輸 最簡單的方式的當然…

Windows注冊HTTP服務實現Jenkins Allure報告、測試日志永久訪問

使用 NSSM (Non-Sucking Service Manager) 將 Allure 報告的 HTTP 服務注冊為 Windows 后臺服務的詳細操作攻略&#xff0c;確保 Jenkins 測試結果可以長期通過 URL 訪問。 ? 目標 將 allure generate 生成的報告目錄托管為靜態網頁服務&#xff0c;并作為后臺服務運行&#…

從ADI與AMD的專利訴訟,看高端FPGA的巔峰對決

RFSoC,作為FPGA家族中的“貴族”,高端芯片中的尖端代表,技術積累要求高、利潤厚,售價貴,主要面向不差錢的軍用雷達處理、通信和測試/測量儀器用戶。 2019年,模擬芯片龍頭ADI公司,發起專利侵權訴訟,而嘗到甜頭的賽靈思,一邊反訴,一邊揶揄ADI公司:愛哭的娃未必有奶吃…

性能測試-jmeter實戰3

課程&#xff1a;B站大學 記錄軟件測試-性能測試學習歷程、掌握前端性能測試、后端性能測試、服務端性能測試的你才是一個專業的軟件測試工程師 性能測試-jmeter實戰3 負載測試穩定性測試負載測試曲線圖其他測試策略并發測試壓力測試容量測試 性能指標的介紹響應時間并發用戶數…

Maven鏡像

在 Maven 中配置多個鏡像源&#xff0c;主要是為了解決依賴包在不同地區下載速度不同的問題&#xff0c;或者為了使用特定的私有倉庫作為依賴源。Maven 支持在 pom.xml 文件中配置多個鏡像源&#xff08;repositories&#xff09;&#xff0c;也可以在 Maven 的全局配置文件 se…

ArduPilot 教程(2):運行第一個 SITL 無人機仿真

目錄 1. MAVLink 通信協議 2. MAVProxy 地面控制站 3. 運行 SITL 無人機仿真 3.1. 使用 MAVProxy 控制無人機 3.2. 使用 SITL 地圖界面控制無人機 4. MAVProxy 常用命令 5. 其它地面控制站 5.1. QGroundControl 5.2. MissionPlanner 5.3. 不啟用 MAVProxy 6. 本講小…

開源AI大模型驅動下視頻媒介對圖文生態的重構與S2B2C商業場景創新——基于AI智能名片與商城小程序源碼的實踐分析

摘要&#xff1a;數字媒介演進的進程中&#xff0c;視頻對圖片及文字的媒介侵蝕效應正呈現加速態勢&#xff0c;尤其在Z世代及新網民群體中&#xff0c;視頻已成為其觸網的首要信息載體。本文基于媒介技術迭代與商業場景融合的雙重視角&#xff0c;探究開源AI大模型如何通過智能…

Kafka線上集群部署方案:從環境選型到資源規劃思考

在分布式消息系統的落地應用中&#xff0c;Kafka集群的線上部署方案直接關系到業務系統的穩定性與性能表現。不同于測試環境的簡易搭建&#xff0c;生產級集群需要從操作系統適配、存儲介質選型、容量規劃到網絡資源調度等多維度進行系統性設計。本文將從工程實踐角度&#xff…

算法第40天|買賣股票的最佳時機 1 2 3

121. 買賣股票的最佳時機 題目 思路與解法 記錄每一天買或不買時的價值 class Solution { public:int maxProfit(vector<int>& prices) {// dp數組含義&#xff1a;// dp[i][0]:第i天&#xff0c;持有股票時的最大價值&#xff0c;dp[i][1]:第i天&#xff0c;不持…

【趙渝強老師】使用select...into outfile語句備份MySQL

MySQL可以使用select…into outfile語句將表的內容導出為一個文本文件。其基本的語法格式如下&#xff1a; select [列名] from 表名 [WHERE 語句] into outfile 目標文件 [其他選項];該語句分為兩個部分。前半部分是一個普通的select語句&#xff0c;通過這個select語句來查詢…

PHY XGE 自協商AN數據交互過程

在裸機環境下&#xff0c;兩個 **支持 10GBASE-T** 的 PHY 芯片通過 Clause 73 協議完成自協商&#xff08;Auto-Negotiation&#xff0c;AN&#xff09;&#xff0c;它們在 **無操作系統控制** 的條件下&#xff0c;完成以下 **完整的點對點數據交互流程**&#xff1a; --- ##…

【算法 day09】LeetCode 232.用棧實現隊列 | 225. 用隊列實現棧 | 20. 有效的括號 |1047. 刪除字符串中的所有相鄰重復項

232.用棧實現隊列 題目鏈接 | 文檔講解 |視頻講解 : 鏈接 1.思路&#xff1a; 使用2個棧去實現隊列 先將元素放入棧1中&#xff0c;然后在將棧1中的元素出棧到棧2中&#xff0c;棧2的元素出棧順序就和隊列的出隊一樣 2.代碼&#xff1a; class MyQueue {Stack<Integer…

大模型項目實戰:業務場景和解決方案

你的這張圖已經涵蓋了很多主流的大模型實戰項目&#xff0c;非常全面&#xff01;下面我會補充更多市面上常見的AI大模型實戰項目&#xff0c;并且簡要說明每個項目的核心內容、實現思路和主流技術棧&#xff0c;方便你參考和擴展。 1. 智能問答/知識庫系統 核心內容&#xff…

vscode + Jlink 一鍵調試stm32 單片機程序(windows系統版)

vscode Jlink 一鍵調試stm32 單片機程序 安裝交叉編譯工具鏈安裝 x-pack 構建工具安裝 JLink 工具gnu-debuger 插件編譯一鍵啟動調試 安裝交叉編譯工具鏈 stm32采用 交叉編譯工具鏈 arm-none-eabi-xxx, 下載之后解壓&#xff0c;壓縮包內部結構如下圖&#xff1a; 目錄下的bi…

Linux線程概念和控制

Linux線程概念 Linux中線程如何理解 線程<執行流<進程 Linux中的線程模擬進程實現&#xff08;線程就是輕量級進程&#xff09; 與獨立的進程相比&#xff0c;線程創建和銷毀的開銷較小&#xff0c;因為它們共享相同的內存空間和資源。 線程是進程內的執行分支&…

服務器出現問題,連接服務器出現3680 并刪除數據庫出現1192,請查看詳細問題(運維)

mysql連接服務器時&#xff0c;出現這個問題&#xff1a;3680 - Failed to create schema directory xxxx (errno: 28 - No space left on device) 第一步&#xff1a;診斷問題類型 檢查磁盤空間 運行以下命令&#xff1a; bash df -h # 查看磁盤使用情況 如果輸出中 Use% 接…

uniapp:微信小程序膠囊「復制鏈接」灰色處理

在原生開發的小程序中默認是支持復制的 &#x1f424; 但是在 uniapp 開發的小程序中無法復制&#xff08;體驗版與開發版都可以進行復制&#xff0c;但發布后不可&#xff09; 解決方法&#xff1a; methods: {onShareAppMessage: function() {// return custom share data …

差分數組c++

溫度波動記錄 每天記錄溫度&#xff0c;支持區間溫度調整和單日查詢 輸入&#xff1a; 第一行&#xff1a;一個整數n表示有n個溫度 第二行&#xff1a;n個數表示具體溫度 第三行&#xff1a;三個整數&#xff1a;S&#xff0c;e&#xff0c;c&#xff0c;表示從…