Docker Compose 與 Harbor 私有倉庫詳解
簡(jiǎn)介
在當(dāng)今云計(jì)算與容器化技術(shù)飛速發(fā)展的時(shí)代,Docker 作為容器化領(lǐng)域的領(lǐng)軍技術(shù),已成為開發(fā)與運(yùn)維團(tuán)隊(duì)不可或缺的工具。本文將探討 Docker Compose 多容器編排工具與 Harbor 企業(yè)級(jí)私有倉庫的核心技術(shù),幫助讀者掌握從容器管理到鏡像安全存儲(chǔ)的完整解決方案。
一、Docker 容器重啟策略與狀態(tài)碼解析
(一)Docker 容器重啟策略詳解
Docker 容器的重啟策略是面向生產(chǎn)環(huán)境的重要機(jī)制,由 Docker 守護(hù)進(jìn)程控制,在開發(fā)過程中可忽略,但在生產(chǎn)部署中至關(guān)重要。常見的重啟策略包括:
- no(默認(rèn)策略):容器退出時(shí)不進(jìn)行重啟,適用于開發(fā)測(cè)試場(chǎng)景。
- on-failure:僅在容器非正常退出(退出狀態(tài)碼非 0)時(shí)重啟,是生產(chǎn)環(huán)境中常用的策略之一。
- on-failure:3:在 on-failure 基礎(chǔ)上,限制最多重啟 3 次,避免容器反復(fù)重啟消耗系統(tǒng)資源。
- always:無論容器以何種狀態(tài)退出,都會(huì)立即重啟,確保服務(wù)持續(xù)運(yùn)行。
- unless-stopped:與 always 類似,但 Docker 守護(hù)進(jìn)程啟動(dòng)時(shí)已停止的容器不會(huì)重啟。
示例命令:
# 啟動(dòng)一個(gè)始終重啟的容器 docker run -itd --restart=always --name host1 busybox sh
該命令通過 ??--restart=always?
? 參數(shù)指定容器退出時(shí)始終重啟,確保 host1 容器保持運(yùn)行狀態(tài)。
(二)Docker 容器常見退出狀態(tài)碼
通過容器退出狀態(tài)碼可快速判斷容器運(yùn)行情況:
狀態(tài)碼 | 說明 |
0 | 容器正常退出,表明容器內(nèi)的進(jìn)程成功執(zhí)行完畢。 |
125 | Docker 守護(hù)進(jìn)程本身出現(xiàn)錯(cuò)誤,需檢查 Docker 服務(wù)狀態(tài)。 |
126 | 容器啟動(dòng)后要執(zhí)行的默認(rèn)命令無法調(diào)用,可能是命令權(quán)限問題或路徑錯(cuò)誤。 |
127 | 容器啟動(dòng)后要執(zhí)行的默認(rèn)命令不存在,需確認(rèn)命令名稱是否正確。 |
其他 | 容器內(nèi)正常執(zhí)行的命令返回的狀態(tài)碼,需根據(jù)具體命令邏輯分析。 |
二、Docker Compose 工具深度應(yīng)用
(一)Docker Compose 簡(jiǎn)介與安裝
Docker Compose 的前身是 Fig,是定義和運(yùn)行多個(gè) Docker 容器的強(qiáng)大工具。通過一個(gè)配置文件即可定義多個(gè)容器,并使用一條命令啟動(dòng),極大簡(jiǎn)化了多容器應(yīng)用的部署。
安裝步驟:
- 使用 curl 下載對(duì)應(yīng)版本的 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 二進(jìn)制文件并保存到 ??/usr/local/bin?
? 目錄。
- 添加執(zhí)行權(quán)限并創(chuàng)建軟鏈接:
chmod +x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
??chmod +x?
?? 賦予文件執(zhí)行權(quán)限,??ln -s?
?? 創(chuàng)建軟鏈接以便在任何目錄都能執(zhí)行 ??docker-compose?
? 命令。
- 驗(yàn)證安裝:
docker-compose --version
輸出版本信息則表示安裝成功。
(二)YAML 文件格式與編寫規(guī)范
Docker Compose 使用 YAML 格式的配置文件,YAML 是一種可讀性高的標(biāo)記語言,語法比 XML 簡(jiǎn)單。編寫時(shí)需注意:
- 不支持制表符(tab)縮進(jìn),必須使用空格。
- 通常開頭縮進(jìn)兩個(gè)空格,保持格式統(tǒng)一。
- 冒號(hào)、逗號(hào)、橫桿等字符后需縮進(jìn)一個(gè)空格。
- 使用 ?
?#?
? 號(hào)添加注釋。 - 包含特殊字符時(shí)用單引號(hào)括起來,布爾值也需用引號(hào)括起-。
(三)Docker Compose 基本操作命令
1. 容器運(yùn)行
- 前臺(tái)運(yùn)行:?
?docker-compose up?
?,將容器日志輸出到前臺(tái),按 Ctrl+C 停止。 - 后臺(tái)運(yùn)行:?
?docker-compose up -d?
?,容器在后臺(tái)運(yùn)行,是生產(chǎn)環(huán)境的常用方式。 - 重新構(gòu)建運(yùn)行:?
?docker-compose up --build -d?
?,在啟動(dòng)前重新構(gòu)建鏡像。
2. 容器控制
- 關(guān)閉指定容器:?
?docker-compose stop <容器名稱>?
??,如 ??docker-compose stop nginx?
? 停止名為 nginx 的容器-。 - 全部關(guān)閉:?
?docker-compose stop?
?,停止所有由 Compose 管理的容器。 - 啟動(dòng)指定容器:?
?docker-compose start <容器名稱>?
?,啟動(dòng)已停止的指定容器-。 - 全部啟動(dòng):?
?docker-compose start?
?,啟動(dòng)所有已停止的容器。 - 重啟指定容器:?
?docker-compose restart <容器名稱>?
?,重啟指定容器-。 - 全部重啟:?
?docker-compose restart?
?,重啟所有容器。
3. 容器刪除
??docker-compose down?
? 命令用于停止并刪除容器、網(wǎng)絡(luò)等資源,是清理環(huán)境的常用命令。
(四)Docker Compose 案例演示
以部署 Nginx 服務(wù)為例,演示 Compose 的實(shí)際應(yīng)用:
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 的服務(wù)。 - ?
?image?
? 指定使用 nginx 鏡像。 - ?
?ports?
? 將容器的 80 端口映射到主機(jī)的 80 端口。 - ?
?volumes?
?? 設(shè)置卷掛載,實(shí)現(xiàn)數(shù)據(jù)持久化和配置自定義,??/www/html:/www/html:rw?
? 表示讀寫權(quán)限掛載。
2. 配置 Nginx
創(chuàng)建 nginx 配置文件并上傳到 Docker 主機(jī):
mkdir /opt/nginx vim /opt/nginx/nginx.conf
在配置文件中設(shè)置工作進(jìn)程數(shù)、事件連接數(shù)、HTTP 服務(wù)等參數(shù),如:
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; } # 其他配置... } }
該配置定義了一個(gè)基本的 Nginx 服務(wù),監(jiān)聽 80 端口,根目錄為 ??/www/html?
?-。
3. 執(zhí)行部署
docker-compose up -d
該命令在后臺(tái)啟動(dòng) Nginx 容器,根據(jù)配置文件完成服務(wù)部署。
4. 查看容器狀態(tài)
docker-compose ps
命令列出當(dāng)前運(yùn)行的容器及其狀態(tài),確認(rèn) Nginx 服務(wù)是否正常啟動(dòng)。
三、Harbor 企業(yè)級(jí)私有倉庫搭建與管理
(一)Harbor 基礎(chǔ)概念
1. Harbor 簡(jiǎn)介
Harbor 是 VMware 開源的企業(yè)級(jí) Docker Registry 項(xiàng)目,基于 Docker 開源的 Registry 構(gòu)建,添加了管理 UI、基于角色的訪問控制、LDAP/AD 集成、審計(jì)日志等企業(yè)級(jí)功能。作為私有倉庫,Harbor 提供了更好的性能和安全性,提升了鏡像傳輸和管理效率。
2. Harbor 的核心優(yōu)勢(shì)
- 基于角色的訪問控制:用戶和倉庫按項(xiàng)目組織,不同用戶在項(xiàng)目中擁有不同權(quán)限。
- 鏡像復(fù)制策略:支持在多實(shí)例間復(fù)制(同步)鏡像,適用于負(fù)載平衡、高可用性等復(fù)雜場(chǎng)景。
- LDAP/AD 集成:與企業(yè)現(xiàn)有的 LDAP/AD 系統(tǒng)集成,實(shí)現(xiàn)統(tǒng)一的用戶認(rèn)證和管理。
- 鏡像管理功能:支持刪除鏡像和垃圾回收,釋放存儲(chǔ)空間。
- 圖形化界面:提供直觀的 UI,方便用戶瀏覽、搜索鏡像和管理項(xiàng)目。
- 審計(jì)與 API:記錄所有操作日志,提供 RESTful API 便于與外部系統(tǒng)集成-。
3. Harbor 架構(gòu)組成
Harbor 主要由以下組件構(gòu)成:
- Proxy:前置反向代理,統(tǒng)一接收瀏覽器和 Docker 客戶端的請(qǐng)求并轉(zhuǎn)發(fā)到后端服務(wù)。
- Registry:存儲(chǔ) Docker 鏡像,處理 push/pull 命令,通過 Token 服務(wù)實(shí)現(xiàn)訪問控制-。
- Core services:核心服務(wù),包括 UI(圖形界面)、Webhook(獲取鏡像狀態(tài)變化)和 Token 服務(wù)(簽發(fā)訪問令牌)-。
- Database (Harbor-db):存儲(chǔ)用戶權(quán)限、審計(jì)日志、鏡像分組等數(shù)據(jù)。
- Log collector (Harbor-log):收集各組件日志,用于監(jiān)控和分析。
(二)Harbor 部署實(shí)戰(zhàn)
1. 環(huán)境準(zhǔn)備
操作系統(tǒng) | 主機(jī)名 | 配置 | IP |
CentOS 7.9 2009 | harbor | 2C4G | 192.168.10.106 |
CentOS 7.9 2009 | client | 2C4G | 192.168.10.101 |
2. 基礎(chǔ)環(huán)境設(shè)置(兩臺(tái)主機(jī)均需操作)
- 關(guān)閉防火墻:
systemctl stop firewalld systemctl disable firewalld
停止并禁用防火墻,確保網(wǎng)絡(luò)通信正常。
- 關(guān)閉 selinux:
setenforce 0 sed -i "s/.*SELINUX=.*$/SELINUX=disabled/g" /etc/selinux/config
臨時(shí)和永久關(guān)閉 selinux,避免其對(duì) Docker 操作產(chǎn)生干擾。
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
- 復(fù)制配置文件模板:
cp harbor.yml.tmpl harbor.yml
創(chuàng)建默認(rèn)配置文件。
- 編輯配置文件:
vim harbor.yml
修改以下關(guān)鍵配置:
hostname: 192.168.10.106 # 設(shè)置為當(dāng)前主機(jī) IP harbor_admin_password: Harbor12345 # 管理員密碼 # 注釋掉 https 相關(guān)配置,使用 http 訪問
??hostname?
?? 配置為 Harbor 服務(wù)器的 IP 地址,??harbor_admin_password?
? 設(shè)置管理員登錄密碼-。
5. 執(zhí)行安裝
./install.sh
安裝腳本會(huì)檢查 Docker 和 Docker Compose 版本,加載 Harbor 鏡像,并啟動(dòng)各組件容器。成功安裝后會(huì)顯示 "Harbor has been installed and started successfully"。
6. 訪問與驗(yàn)證
在瀏覽器中輸入 ??http://192.168.10.106?
??,使用默認(rèn)用戶名 ??admin?
?? 和配置的密碼 ??Harbor12345?
?? 登錄。登錄后可創(chuàng)建項(xiàng)目和用戶,如創(chuàng)建名為 ??kubernetes?
?? 的項(xiàng)目和 ??zhangsan?
? 用戶-。
(三)Harbor 客戶端應(yīng)用
1. 配置 Docker 信任私有倉庫
在所有 Docker 主機(jī)上添加以下配置到 ??/etc/docker/daemon.json?
?:
{ "insecure-registries": ["192.168.10.106"] }
該配置告知 Docker 信任指定的私有倉庫,避免因證書問題導(dǎo)致操作失敗。
重啟 Docker 服務(wù)使配置生效:
systemctl daemon-reload systemctl restart docker
。
2. 登錄 Harbor 倉庫
docker login 192.168.10.106 -u zhangsan -p Aptech1!
使用創(chuàng)建的用戶賬號(hào)登錄 Harbor 倉庫,??-u?
?? 指定用戶名,??-p?
? 指定密碼。
3. 推送鏡像到 Harbor
# 拉取一個(gè)示例鏡像 docker pull cirros # 為鏡像打標(biāo)簽,格式為 [倉庫地址]/[項(xiàng)目名]/[鏡像名]:[版本] docker tag cirros 192.168.10.106/kubernetes/cirros:v1 # 推送鏡像到 Harbor docker push 192.168.10.106/kubernetes/cirros:v1
??docker tag?
?? 命令為鏡像添加 Harbor 倉庫的標(biāo)簽,??docker push?
? 命令將鏡像推送到指定倉庫和項(xiàng)目-。
4. 從 Harbor 拉取鏡像
在另一臺(tái)主機(jī)上重復(fù)配置步驟后,使用以下命令拉取鏡像:
docker pull 192.168.10.106/kubernetes/cirros:v1
驗(yàn)證鏡像是否能從 Harbor 成功拉取。
5. 退出 Harbor 登錄
docker logout 192.168.10.106
退出當(dāng)前 Harbor 倉庫登錄。
四、總結(jié)
本文全面介紹了 Docker Compose 與 Harbor 私有倉庫的核心技術(shù)與實(shí)踐操作。Docker Compose 通過 YAML 配置文件和簡(jiǎn)單命令,實(shí)現(xiàn)了多容器應(yīng)用的高效編排與管理,極大提升了開發(fā)和部署效率。Harbor 作為企業(yè)級(jí)私有倉庫,提供了安全、可控的鏡像管理解決方案,滿足了企業(yè)在鏡像存儲(chǔ)、傳輸和權(quán)限控制等方面的需求。
通過掌握這些技術(shù),開發(fā)與運(yùn)維團(tuán)隊(duì)能夠構(gòu)建更加靈活、可靠的容器化應(yīng)用架構(gòu),為現(xiàn)代化軟件開發(fā)與部署奠定堅(jiān)實(shí)基礎(chǔ)。在實(shí)際應(yīng)用中,可根據(jù)企業(yè)具體需求,進(jìn)一步優(yōu)化 Docker Compose 配置和 Harbor 安全策略,確保容器化環(huán)境的穩(wěn)定運(yùn)行與高效管理。
到此這篇關(guān)于Docker Compose 與 Harbor 私有倉庫詳解的文章就介紹到這了,更多相關(guān)Docker Compose 私有倉庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker-desktop啟動(dòng)k8s的詳細(xì)方法
這篇文章主要介紹了docker-desktop啟動(dòng)k8s,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08使用Docker-compose離線部署Django應(yīng)用的方法
這篇文章主要介紹了使用Docker-compose離線部署Django應(yīng)用的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03如何為Go程序創(chuàng)建一個(gè)最小的Docker Image詳解
這篇文章主要給大家介紹了關(guān)于如何為Go程序創(chuàng)建一個(gè)最小的Docker Image的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11微信小程序Docker+Nginx環(huán)境配置業(yè)務(wù)域名驗(yàn)證文件的操作方法
本文介紹了如何在DockerCompose+Nginx環(huán)境下配置并訪問靜態(tài)驗(yàn)證文件,首先下載驗(yàn)證文件并將其掛載到容器中,然后修改Nginx配置文件使其能夠正確返回請(qǐng)求路徑下的靜態(tài)文件,最后,測(cè)試訪問驗(yàn)證文件并提交業(yè)務(wù)域名,感興趣的朋友跟隨小編一起看看吧2025-01-01docker-compose離線部署ollama+open-webui的實(shí)現(xiàn)步驟
本女王主要介紹了docker-compose離線部署ollama+open-webui的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02基于Docker搭建Graylog分布式日志采集系統(tǒng)的詳細(xì)過程
Graylog是一個(gè)開源的日志管理工具,支持日志收集、解析、存儲(chǔ)、搜索和可視化,它可以從各種數(shù)據(jù)源收集日志,并通過內(nèi)置的解析器將日志格式化,本文介紹基于Docker搭建Graylog分布式日志采集系統(tǒng),感興趣的朋友一起看看吧2025-02-02