目录

简介

一、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;表示从…