Docker Compose 与 Harbor 私有仓库详解

 更新时间:2025年06月28日 10:25:43   作者:FENG  
本文将探讨Docker Compose多容器编排工具与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 安全策略,确保容器化环境的稳定运行与高效管理。

到此这篇关于Docker Compose 与 Harbor 私有仓库详解的文章就介绍到这了,更多相关Docker Compose 私有仓库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker构建python Flask+ nginx+uwsgi容器

    Docker构建python Flask+ nginx+uwsgi容器

    这篇文章主要介绍了Docker构建python Flask+ nginx+uwsgi容器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • CentOS 7上安装Docker 1.8 的步骤详解

    CentOS 7上安装Docker 1.8 的步骤详解

    本文分步骤给大家介绍了CentOS 7上安装Docker 1.8 的步骤详解,需要的朋友可以参考下
    2018-11-11
  • 浅谈Docker 客户端和守护进程

    浅谈Docker 客户端和守护进程

    这篇文章主要介绍了浅谈Docker 客户端和守护进程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 迁移变更Docker默认数据存储目录的步骤详解

    迁移变更Docker默认数据存储目录的步骤详解

    Docker安装的默认数据目录为/var/lib/docker,但是如果/目录挂载的磁盘空间不够,就需要迁移docker数据到其他目录,接下来本就给大家介绍迁移变更Docker默认数据存储目录的操作步骤,需要的朋友可以参考下
    2023-12-12
  • docker 限制容器对CPU的使用

    docker 限制容器对CPU的使用

    本篇文章主要介绍了docker 限制容器对CPU的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Docker镜像+nginx 部署 vue 项目的方法

    Docker镜像+nginx 部署 vue 项目的方法

    这篇文章主要介绍了Docker镜像+nginx 部署 vue 项目的方法,帮助大家更好的使用docke镜像,感兴趣的朋友可以了解下
    2020-10-10
  • Docker无法登录与推送问题解决的详细教程

    Docker无法登录与推送问题解决的详细教程

    这篇文章主要介绍了如何使用阿里云容器镜像服务来解决国内访问Docker Hub速度慢的问题,并详细描述了如何设置阿里云镜像服务、配置Docker、操作镜像(包括pull和push)以及测试拉取镜像的过程,需要的朋友可以参考下
    2025-02-02
  • 教你如何从正在运行的容器创建 Docker 映像

    教你如何从正在运行的容器创建 Docker 映像

    这篇文章主要介绍了如何从正在运行的容器创建 Docker 映像,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Docker容器使用jenkins部署web项目(总结)

    Docker容器使用jenkins部署web项目(总结)

    这篇文章主要介绍了Docker容器使用jenkins部署web项目(总结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 解决docker搭建gitlab时容器不停重启的问题

    解决docker搭建gitlab时容器不停重启的问题

    这篇文章主要介绍了docker搭建gitlab时容器不停重启的问题,当用docker log 查看日志时,发现问题是在于配置文件没有权限创建的问题,本文给大家分享解决方案,感兴趣的朋友一起看看吧
    2022-05-05

最新评论