Docker鏡像構(gòu)建_Docker?Compose編排實(shí)踐_Docker?Harbor倉庫的集成
在現(xiàn)代化的軟件開發(fā)和部署流程中,容器化技術(shù)已成為提升效率、簡化環(huán)境管理的重要工具。Docker 作為容器化的核心平臺,通過鏡像封裝應(yīng)用及其依賴,確??绛h(huán)境的一致性。Docker Compose 則進(jìn)一步簡化多容器應(yīng)用的編排,通過聲明式配置實(shí)現(xiàn)服務(wù)的快速部署與協(xié)同。而 Docker Harbor 作為企業(yè)級鏡像倉庫,提供了安全、高效的鏡像存儲與管理能力,支持團(tuán)隊(duì)協(xié)作和持續(xù)集成。
本內(nèi)容旨在系統(tǒng)介紹 Docker 鏡像的構(gòu)建方法、Docker Compose 的編排實(shí)踐,以及 Harbor 倉庫的集成使用,幫助開發(fā)者掌握從開發(fā)到生產(chǎn)的完整容器化流程,提升 DevOps 實(shí)踐的成熟度。
Docker鏡像的創(chuàng)建
Docker 鏡像的創(chuàng)建通常通過編寫 Dockerfile 文件并執(zhí)行構(gòu)建命令完成。Dockerfile 是一個(gè)文本文件,包含一系列指令,用于定義鏡像的構(gòu)建步驟。
編寫一個(gè)簡單的 Dockerfile 示例:
FROM ubuntu:20.04 RUN apt-get update && apt-get install -y python3 COPY ./app /app WORKDIR /app CMD ["python3", "app.py"]
構(gòu)建鏡像的命令
使用 docker build 命令根據(jù) Dockerfile 構(gòu)建鏡像。通過 -t 參數(shù)指定鏡像名稱和標(biāo)簽:
docker build -t my-python-app:latest .
多階段構(gòu)建優(yōu)化鏡像大小
對于需要編譯或依賴復(fù)雜的環(huán)境,可以使用多階段構(gòu)建減少最終鏡像體積:
FROM golang:1.16 AS builder WORKDIR /app COPY . . RUN go build -o myapp . FROM alpine:latest COPY --from=builder /app/myapp /myapp CMD ["/myapp"]
使用現(xiàn)有容器創(chuàng)建鏡像
通過 docker commit 可以將運(yùn)行中的容器保存為新鏡像。適用于調(diào)試或臨時(shí)修改后的保存:
docker commit <container-id> my-new-image
導(dǎo)入導(dǎo)出鏡像文件
鏡像可以保存為 .tar 文件便于遷移或分享:
docker save -o my-image.tar my-image:tag docker load -i my-image.tar
鏡像構(gòu)建的最佳實(shí)踐
保持鏡像精簡,選擇合適的基礎(chǔ)鏡像(如 Alpine Linux)。合并多個(gè) RUN 指令減少鏡像層數(shù)。使用 .dockerignore 文件排除不必要的文件。定期清理無用鏡像釋放空間:
docker image prune -a
Dockerfile 操作常用指令
FROM
指定基礎(chǔ)鏡像,所有Dockerfile必須以該指令開頭。例如:
FROM ubuntu:20.04
RUN
執(zhí)行命令并創(chuàng)建新的鏡像層,常用于安裝軟件包:
RUN apt-get update && apt-get install -y curl
COPY vs ADD
兩者均用于復(fù)制文件,但COPY更透明:
COPY ./app /usr/src/app
ADD支持自動解壓和URL下載(通常不推薦)。
WORKDIR
設(shè)置工作目錄,后續(xù)指令均在此路徑下執(zhí)行:
WORKDIR /app
ENV
設(shè)置環(huán)境變量,可被后續(xù)指令和容器運(yùn)行時(shí)引用:
ENV NODE_ENV=production
EXPOSE
聲明容器運(yùn)行時(shí)監(jiān)聽的端口(實(shí)際映射需通過-p參數(shù)):
EXPOSE 8080
CMD
指定容器啟動時(shí)的默認(rèn)命令(可被docker run覆蓋):
CMD ["python", "app.py"]
ENTRYPOINT
配置容器啟動時(shí)的入口命令(通常與CMD配合使用):
ENTRYPOINT ["nginx"] CMD ["-g", "daemon off;"]
VOLUME
創(chuàng)建掛載點(diǎn),用于持久化數(shù)據(jù):
VOLUME /data
USER
指定運(yùn)行指令的用戶身份:
USER node
小 結(jié)
Docker Compose編排
Docker Compose 是一個(gè)用于定義和運(yùn)行多容器 Docker 應(yīng)用程序的工具,通過 YAML 文件配置服務(wù)、網(wǎng)絡(luò)和卷,簡化容器化應(yīng)用的部署與管理。
基本結(jié)構(gòu)
Docker Compose 的核心是 docker-compose.yml 文件,其結(jié)構(gòu)通常包含以下部分:
version: "3.8" # 指定 Compose 文件版本
services: # 定義服務(wù)容器
web:
image: nginx:latest
ports:
- "80:80"
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
volumes: # 定義數(shù)據(jù)卷
db_data:
networks: # 定義網(wǎng)絡(luò)
app_network:
driver: bridge
常用命令
啟動服務(wù)(后臺運(yùn)行):
docker-compose up -d
停止服務(wù)并刪除容器:
docker-compose down
查看運(yùn)行狀態(tài):
docker-compose ps
查看服務(wù)日志:
docker-compose logs -f
高級配置技巧
環(huán)境變量支持:
services:
app:
environment:
- DEBUG=${DEBUG_LEVEL} # 從 .env 文件或主機(jī)環(huán)境讀取
依賴管理:
services:
web:
depends_on:
- db
- redis
資源限制:
services:
worker:
deploy:
resources:
limits:
cpus: "0.5"
memory: 512M
實(shí)際應(yīng)用示例
以下是一個(gè)典型 Web 應(yīng)用配置(包含前端、后端和數(shù)據(jù)庫):
version: "3.8"
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
volumes:
- ./frontend:/app
depends_on:
- api
api:
build: ./backend
ports:
- "5000:5000"
environment:
DB_URL: postgres://user:pass@db:5432/app
depends_on:
- db
db:
image: postgres:13
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
volumes:
db_data:
性能優(yōu)化建議
- 使用
docker-compose build --parallel加速多服務(wù)構(gòu)建 - 合理配置
restart策略(如restart: unless-stopped) - 對生產(chǎn)環(huán)境使用
docker-compose.prod.yml覆蓋開發(fā)配置 - 通過
docker-compose config驗(yàn)證配置文件語法
YAML文件格式及編寫注意事項(xiàng)
YAML(YAML Ain't Markup Language)是一種人類可讀的數(shù)據(jù)序列化格式,常用于配置文件、數(shù)據(jù)交換等場景。其核心特點(diǎn)包括:
- 使用縮進(jìn)表示層級關(guān)系(空格縮進(jìn),禁止用制表符)。
- 支持鍵值對、列表、標(biāo)量(字符串、數(shù)字等)等數(shù)據(jù)結(jié)構(gòu)。
- 注釋以
#開頭。
基本語法示例
# 鍵值對 key: value # 列表 fruits: - apple - banana # 嵌套結(jié)構(gòu) person: name: "Alice" age: 30
編寫注意事項(xiàng)
縮進(jìn)與空格
- 同一層級元素必須對齊,縮進(jìn)使用空格(通常2或4個(gè))。
- 冒號
:后需加空格(如key: value)。
字符串處理
避免常見錯誤
高級特性(謹(jǐn)慎使用)
驗(yàn)證與工具
示例:完整配置文件
- 普通字符串無需引號,但含特殊字符(如
:、#)時(shí)需用引號包裹:message: "Hello: World"
多行字符串可用
|(保留換行)或>(折疊換行):description: | This is a multi-line text.
數(shù)據(jù)類型明確
- 布爾值建議用
true/false,而非字符串"true"。 - 數(shù)字直接書寫(如
42),科學(xué)計(jì)數(shù)法需注意(如1e5)。 - 縮進(jìn)不一致導(dǎo)致解析失敗。
- 鍵名重復(fù)(部分解析器會覆蓋而非報(bào)錯)。
- 未轉(zhuǎn)義特殊字符(如
@、%可能被誤認(rèn)為特殊指令)。 - 錨點(diǎn)
&和別名*可復(fù)用代碼塊,但過度使用會降低可讀性。 - 合并鍵
<<需確保解析器支持。 - 使用在線工具(如 YAML Lint)驗(yàn)證語法。
- 編輯器中安裝插件(如 VSCode 的 YAML 擴(kuò)展)實(shí)時(shí)檢查。
# 數(shù)據(jù)庫配置
database:
host: "localhost"
port: 5432
credentials:
username: admin
password: "secure@123"
# 功能開關(guān)
features:
logging: true
analytics: false
# 白名單
allowed_ips:
- 192.168.1.1
- 10.0.0.1
Docker-Harbor私有倉庫部署與管理
環(huán)境準(zhǔn)備
確保已安裝 Docker 和 Docker Compose,操作系統(tǒng)建議使用 Linux(如 Ubuntu/CentOS)。Harbor 需要至少 4GB 內(nèi)存和 50GB 存儲空間。
下載 Harbor 安裝包
從 GitHub 下載最新版本的 Harbor 離線安裝包:
wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz tar -xzvf harbor-offline-installer-v2.7.0.tgz cd harbor
配置 Harbor
修改 harbor.yml 配置文件,設(shè)置主機(jī)名、端口、數(shù)據(jù)目錄等關(guān)鍵參數(shù):
hostname: registry.yourdomain.com http: port: 80 https: port: 443 certificate: /path/to/cert.pem private_key: /path/to/key.pem data_volume: /data/harbor
啟動 Harbor
執(zhí)行安裝腳本并啟動服務(wù):
./install.sh
安裝完成后,通過 docker-compose ps 檢查所有容器是否正常運(yùn)行。
訪問 Harbor 控制臺
瀏覽器訪問 http://<your-hostname>,默認(rèn)管理員賬號為 admin,密碼在 harbor.yml 中配置(默認(rèn)為 Harbor12345)。
推送鏡像到 Harbor
登錄 Docker 并推送鏡像:
docker login registry.yourdomain.com docker tag your-image:tag registry.yourdomain.com/project/your-image:tag docker push registry.yourdomain.com/project/your-image:tag
管理 Harbor
- 用戶與權(quán)限:通過控制臺創(chuàng)建用戶、項(xiàng)目并分配角色(如管理員、開發(fā)者)。
- 垃圾回收:定期執(zhí)行垃圾回收清理無用鏡像:
docker-compose exec -it harbor-registry registry garbage-collect /etc/registry/config.yml
- 備份與恢復(fù):使用官方工具備份數(shù)據(jù)目錄和數(shù)據(jù)庫。
高可用部署
生產(chǎn)環(huán)境建議配置:
- 使用外部數(shù)據(jù)庫(PostgreSQL)和 Redis
- 啟用 HTTPS 并配置負(fù)載均衡
- 設(shè)置多個(gè)實(shí)例通過共享存儲(如 NFS)實(shí)現(xiàn)數(shù)據(jù)同步
常見問題處理
- 證書錯誤:確??蛻舳诵湃?Harbor 的 CA 證書。
- 存儲不足:擴(kuò)展數(shù)據(jù)目錄或配置外部存儲(如 S3)。
- 性能優(yōu)化:調(diào)整
registry組件的緩存參數(shù)。
通過以上步驟,可以完成 Docker Harbor 私有倉庫的部署與日常管理。定期檢查日志和更新版本以確保安全性與穩(wěn)定性。
Harbor簡介
Harbor 是一個(gè)開源的容器鏡像倉庫管理工具,由 VMware 公司開發(fā)并貢獻(xiàn)給 Cloud Native Computing Foundation (CNCF)。它提供了企業(yè)級的鏡像存儲、安全掃描、權(quán)限管理和復(fù)制功能,適用于 Kubernetes 和 Docker 環(huán)境。
核心功能
鏡像管理
支持 Docker 鏡像的存儲、分發(fā)和管理,提供多版本控制和垃圾回收機(jī)制。
安全掃描
集成 Clair 等工具,支持鏡像漏洞掃描,確保鏡像安全性。
權(quán)限控制
基于角色的訪問控制(RBAC),支持多租戶管理,可細(xì)化到項(xiàng)目級別的權(quán)限分配。
復(fù)制功能
支持跨多個(gè) Harbor 實(shí)例的鏡像復(fù)制,適用于多數(shù)據(jù)中心或混合云場景。
架構(gòu)組成
核心組件
- Proxy(Nginx):處理外部請求的路由和負(fù)載均衡。
- Registry:存儲容器鏡像,基于 Docker Distribution 實(shí)現(xiàn)。
- Core:提供 API 服務(wù)、用戶認(rèn)證和項(xiàng)目管理。
- Database(PostgreSQL):存儲用戶、項(xiàng)目等元數(shù)據(jù)。
- Job Service:處理異步任務(wù)(如鏡像復(fù)制、垃圾回收)。
可選組件
- Chart Museum:管理 Helm Chart。
- Notary:提供鏡像簽名和驗(yàn)證功能。
部署方式
單機(jī)部署
通過 Docker Compose 快速啟動,適合測試或小規(guī)模環(huán)境。
高可用部署
支持 Kubernetes 集群部署,結(jié)合外部數(shù)據(jù)庫和存儲(如 S3、Ceph)實(shí)現(xiàn)高可用。
應(yīng)用場景
- CI/CD 流水線:作為鏡像倉庫與 Jenkins、GitLab CI 等工具集成。
- 混合云環(huán)境:通過鏡像復(fù)制實(shí)現(xiàn)跨云鏡像同步。
- 安全合規(guī):滿足企業(yè)級鏡像掃描和審計(jì)需求。
部署Harbor服務(wù)
安裝 Docker 和 Docker Compose
確保系統(tǒng)已安裝 Docker 和 Docker Compose。Docker 版本需不低于 17.06.0,Docker Compose 版本不低于 1.18.0。
安裝 Docker:
yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io systemctl enable docker systemctl start docker
安裝 Docker Compose:
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
下載 Harbor 離線安裝包
從 Harbor 官方 GitHub 下載最新版本的離線安裝包:
wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz tar xvf harbor-offline-installer-v2.5.0.tgz cd harbor
配置 Harbor
修改 harbor.yml 配置文件,主要調(diào)整以下參數(shù):
hostname: your.domain.com # 替換為實(shí)際域名或 IP http: port: 80 https: port: 443 certificate: /path/to/cert.pem private_key: /path/to/key.pem harbor_admin_password: Harbor12345 # 管理員初始密碼 database: password: root123 # 數(shù)據(jù)庫密碼 data_volume: /data # 數(shù)據(jù)存儲路徑
若使用 HTTP 協(xié)議,需注釋 HTTPS 相關(guān)配置并啟用 HTTP:
# https: # port: 443 # certificate: /path/to/cert.pem # private_key: /path/to/key.pem
安裝 Harbor
執(zhí)行安裝腳本:
./install.sh
安裝完成后,可通過瀏覽器訪問 http://your.domain.com,使用默認(rèn)用戶名 admin 和配置文件中設(shè)置的密碼登錄。
管理 Harbor 服務(wù)
停止 Harbor 服務(wù):
docker-compose down -v
重啟 Harbor 服務(wù):
docker-compose up -d
卸載 Harbor(保留數(shù)據(jù)):
./install.sh --uninstall
徹底卸載(刪除數(shù)據(jù)):
./install.sh --with-notary --with-trivy --with-chartmuseum --delete-data
配置 TLS 證書
若需啟用 HTTPS,將證書和私鑰文件放置到指定路徑,并在 harbor.yml 中配置正確路徑。證書可通過 Let's Encrypt 或自簽名生成。
總結(jié)
通過 Docker 鏡像構(gòu)建,應(yīng)用及其運(yùn)行環(huán)境被封裝為可移植的單元,確保開發(fā)、測試和生產(chǎn)環(huán)境的一致性。Docker Compose 以簡潔的 YAML 配置定義多容器應(yīng)用,實(shí)現(xiàn)服務(wù)依賴管理、網(wǎng)絡(luò)配置和資源分配的自動化。結(jié)合 Harbor 倉庫,團(tuán)隊(duì)能夠安全地存儲、分發(fā)鏡像,并通過訪問控制、漏洞掃描等功能增強(qiáng)供應(yīng)鏈安全。
掌握這三項(xiàng)技術(shù),不僅能優(yōu)化本地開發(fā)與測試流程,還能為大規(guī)模部署提供可靠基礎(chǔ)。未來可進(jìn)一步探索 Kubernetes 編排、CI/CD 流水線集成等進(jìn)階實(shí)踐,構(gòu)建更高效的云原生架構(gòu)。
到此這篇關(guān)于Docker鏡像構(gòu)建_Docker Compose編排實(shí)踐_Docker Harbor倉庫的集成的文章就介紹到這了,更多相關(guān)Docker與Docker Compose以及Docker Harbor內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker官方鏡像下載及使用Dockerfile創(chuàng)建鏡像的方法
這篇文章主要介紹了docker官方鏡像下載及使用Dockerfile創(chuàng)建鏡像的方法,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
Docker 容器內(nèi)存監(jiān)控原理及應(yīng)用
Docker+Nginx打包部署前后端分離步驟實(shí)現(xiàn)
docker?gitea?drone實(shí)現(xiàn)超輕量級CI?CD實(shí)戰(zhàn)詳解

