Docker Compose 与 Harbor 私有仓库

发布于:2025-06-26 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

简介

一、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 安全策略,确保容器化环境的稳定运行与高效管理。


网站公告

今日签到

点亮在社区的每一天
去签到