Docker 管理 | 代理配置、内网共享和 Harbor 部署

唠唠闲话

在现代软件开发和运维中,容器技术已经成为构建、部署和管理应用程序的标准工具。然而,在实际操作中,我们常常需要面对一些常见的挑战,如容器访问外部资源的代理配置内网环境下的镜像共享以及企业级镜像管理

本教程将详细介绍三大关键内容,以便更高效地使用容器技术:

  1. 容器代理:在很多网络环境中,直接访问外部资源可能受到限制。我们将介绍如何进行配置,确保顺利访问互联网和外部镜像仓库。

  2. 默认注册表:为了在内网环境中共享镜像,我们可以搭建一个无需登录验证的简单注册表。通过这种方式,可以在团队内部方便地推送和拉取镜像,提高开发效率。

  3. Harbor 注册表:对于需要更高级别管理和安全功能的企业,Harbor 是一个理想的选择。我们将详细介绍如何安装和配置 Harbor,利用其丰富的功能,提升容器镜像管理的安全性和效率。

废话不多说,下边开始吧!

容器代理

在使用 Docker 时,有时需要配置代理以便访问互联网或镜像仓库。以下是配置 Docker 代理的方法:

Linux

  1. 创建或编辑 /etc/systemd/system/docker.service.d/http-proxy.conf 文件:

    sudo mkdir -p /etc/systemd/system/docker.service.d
    sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
    
  2. 在文件中添加以下内容,替换 http://proxy.example.com:8080http://proxy.example.com:8080 为代理地址:

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:8080"
    Environment="HTTPS_PROXY=http://proxy.example.com:8080"
    Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
    
  3. 重新加载系统守护进程并重启 Docker:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

Windows

  1. 在 PowerShell 中创建或编辑 C:\ProgramData\Docker\config\daemon.json 文件:

    notepad C:\ProgramData\Docker\config\daemon.json
    
  2. 在文件中添加代理配置:

    {"proxies": {"default": {"httpProxy": "http://proxy.example.com:8080","httpsProxy": "http://proxy.example.com:8080","noProxy": "localhost,127.0.0.1,docker-registry.somecorporation.com"}}
    }
    
  3. 重启 Docker 服务:

    Restart-Service docker
    

Dockerfile

如果是在构建阶段需要,可以直接在 Dockerfile 中添加环境变量,并在结尾 unset

ENV http_proxy http://proxy.example.com:8080
ENV https_proxy http://proxy.example.com:8080...RUN unset http_proxy https_proxy

默认注册表

在内网环境中共享镜像,可以搭建一个无需登录验证的简单注册表,并使用 HTTP 协议进行通信。

搭建方法

创建一个 docker-compose.yml 文件,并定义以下内容:

version: '3'services:registry:image: registry:2ports:- "5000:5000"volumes:- ./data:/var/lib/registryrestart: always

在这个配置中,我们定义了一个名为 registry 的服务,使用 Docker 官方提供的 registry:2 镜像。配置将本机的 5000 端口映射到容器的 5000 端口,通过数据卷 ./data 将注册表的数据保存到本地。restart: always 确保在容器意外停止后自动重启。

docker-compose.yml 文件所在的目录下,运行以下命令来启动服务:

docker-compose up -d

常用命令

启动服务后,可以通过以下命令管理和使用注册表。

给本地镜像添加标签

首先,需要给本地镜像添加标签,使其指向我们的注册表:

docker tag alpine localhost:5000/alpine
推送镜像

将标记的镜像推送到注册表:

docker push localhost:5000/alpine
拉取镜像

从注册表中拉取镜像:

docker pull localhost:5000/alpine
查看 Registry 中的镜像

使用 curl 命令查看注册表中已存储的镜像列表:

curl http://localhost:5000/v2/_catalog

镜像导入导出

除了通过注册表共享容器镜像,还可以选择直接传输镜像文件,这在某些情况下可能更为便捷。

导出镜像

使用 docker save 命令将镜像导出为一个 tar 文件:

docker save -o <filename>.tar <image>

例如,将 alpine 镜像导出到 alpine.tar 文件:

docker save -o alpine.tar alpine
传输文件

使用 SCP、FTP 或其他网络文件传输方法将导出的 tar 文件从一台服务器传输到另一台服务器。例如,使用 SCP 命令:

scp alpine.tar user@destination_host:/path/to/destination
导入镜像

在目标服务器上使用 docker load 命令从 tar 文件中导入镜像:

docker load -i <filename>.tar

例如,从 alpine.tar 文件导入镜像:

docker load -i alpine.tar

这种方法可以有效地在不同服务器之间传输和共享 Docker 镜像,尤其适用于没有设置注册表或者网络条件不支持直接推送和拉取镜像的场景。

Harbor 注册表

方法概述

在选择容器注册表时,有多种选项可供选择,从简单到复杂的三种方案包括:

  1. Portus:一个轻量级的 Docker 镜像仓库管理工具,适合小型团队和简单的需求。它提供了基本的镜像管理功能和用户权限控制。

  2. Harbor:由 VMware 开发的开源企业级容器镜像仓库,提供了高级功能,如镜像复制、漏洞扫描、身份认证和角色管理,非常适合大中型企业的需求。

  3. Nexus:一个功能强大的仓库管理工具,支持多种格式的包管理(如 Maven、NPM 等),包括 Docker 镜像。它提供了丰富的企业级功能,但配置较为复杂。

教程选择 Harbor,其有以下优点:

  • 功能丰富:Harbor 提供了企业级所需的各类功能,包括镜像复制、漏洞扫描、内容签名和策略管理等。
  • 易于使用:相较于 Nexus,Harbor 的配置和管理更为简便,且有详细的文档支持。
  • 开源社区支持:Harbor 拥有活跃的开源社区和持续的更新维护,确保了其稳定性和安全性。

更多关于 Harbor 的信息和文档请参考 Harbor 官方文档。

下载安装包

从 Harbor 发行页 下载安装包,可以选择在线版或离线版。这里以 offline-installer 为例:

wget -c https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz
tar xvf harbor-offline-installer-v2.11.0.tgz

仓库还有一个 *.asc 签名文件,用于验证下载文件的完整性。

解压后的目录结构如下:

harbor
├── common.sh
├── harbor.v2.11.0.tar.gz
├── harbor.yml.tmpl
├── install.sh
├── LICENSE
└── prepare

在开始安装前,我们需要编辑 harbor.yml 文件以配置必要的参数。

编辑配置文件

Harbor 提供了模板文件 harbor.yml.tmpl。复制并修改该文件:

cp harbor.yml.tmpl harbor.yml

如果需要启用 HTTPS,需使用 certbot 生成域名证书, 具体可以参考:Let‘s Encrypt 域名证书增强网站安全。这里也可以选择注释掉 HTTPS 配置,在外部通过 Nginx 配置 SSL。

详细的参数说明请参考 Harbor 官方文档。

安装

Harbor 默认安装选项不包括 Trivy,这是由 Aqua Security 开发的开源漏洞扫描器。可通过以下命令安装 Harbor 并包含 Trivy:

sudo ./install.sh --with-trivy

安装完成后,会提示:

✔ ----Harbor has been installed and started successfully.----

此时目录下会生成一个 docker-compose.yml 文件,可以通过 docker-compose down/up -d 来停止或启动服务。

安装完成后,可以通过配置文件中指定的端口访问 Harbor。首次登录页面如下,默认用户名为 admin,密码参考 harbor.yml 配置。

20240608072647

Nginx 反向代理

为了更好地管理和访问 Harbor,可以使用 Nginx 作为反向代理。以下是一个参考配置,基于 Github Issue:

server{listen 80;server_name your.domain.com;rewrite ^.*$ https://$host$request_uri?;
}upstream harbor {server localhost:8041;
}server {listen 443 ssl;server_name your.domain.com;ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;location / {proxy_pass http://harbor/;proxy_set_header  Host              $http_host;proxy_set_header  X-Real-IP         $remote_addr;proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;proxy_set_header  X-Forwarded-Proto $scheme;proxy_buffering off;proxy_request_buffering off;}
}

基本使用

登录 Harbor 后,你可以创建自己的账号以便日常使用。

使用方式与 DockerHub 类似:

# 登录账号
docker login your.domain.com
# 推送镜像
docker tag myapp:latest your.domain.com/yourproject/myapp:latest
docker push your.domain.com/yourproject/myapp:latest
# 拉取镜像
docker pull your.domain.com/yourproject/myapp:latest

Web 页面提供了更多功能,可以通过探索界面进一步了解。

20240608074101


以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/24442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关键字、保留字、标识符

关键字 关键字是被 Java 赋予了特定含义的英文单词。 关键字的字母全部小写。 保留字 现有的 Java 版本尚未使用&#xff0c;但是以后版本可能会作为关键字使用。自己命名标识符时需要避免使用这些保留字。 保留字有&#xff1a;byValue, cast, future, generic, inner, op…

Spring Boot整合WebSocket和Redis实现直播间在线人数统计功能

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

高精度加法的实现

这是C算法基础-基础算法专栏的第七篇文章&#xff0c;专栏详情请见此处。 引入 在C语言中&#xff0c;int的可存储数据范围是-2147483648~2147483647&#xff0c;long long的可存储数据范围是-9223372036854775808~9223372036854775807&#xff0c;但是如果一些数据比long long…

Qt下调用Snap7库与西门子PLC通信

文章目录 前言一、Snap7源码下载二、Snap7的dll常用函数功能介绍三、Snap7Lib.pri模块的封装四、下载链接总结 前言 本文主要讲述了在Qt下调用Snap7库与西门子PLC进行通信&#xff0c;在这里将Snap7的源码与动态库整合在一起封装了一个自己的Snap7Lib.pri子模块&#xff0c;方…

【Python】读取文件夹中所有excel文件拼接成一个excel表格 的方法

我们平常会遇到下载了一些Excel文件放在一个文件夹下&#xff0c;而这些Excel文件的格式都一样&#xff0c;这时候需要批量这些文件合并成一个excel 文件里。 在Python中&#xff0c;我们可以使用pandas库来读取文件夹中的所有Excel文件&#xff0c;并将它们拼接成一个Excel表…

尝试使用blazor(一)吐槽blazor,未开始之前,先吐为敬

为什么要写一点关于blazor的文章呢?其实是没什么人看的&#xff0c;我知道blazor目前在国内使用的人数&#xff0c;恐怕一辆大巴车都坐不满。非常冷门&#xff0c;我刚用blazor遇到问题&#xff0c;花钱找人解决&#xff0c;找了国内几个著名的平台&#xff0c;几乎没人会blaz…

【docker】centos7配置docker镜像阿里云加速

国内从 DockerHub 拉取镜像有时会遇到困难&#xff0c;由于网络原因&#xff0c;下载一个Docker官方镜像可能会需要很长的时间&#xff0c;甚至下载失败。此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务。 测试了几次阿里云的加速是最快的。 …

Golang | Leetcode Golang题解之第131题分割回文串

题目&#xff1a; 题解&#xff1a; func partition(s string) (ans [][]string) {n : len(s)f : make([][]int8, n)for i : range f {f[i] make([]int8, n)}// 0 表示尚未搜索&#xff0c;1 表示是回文串&#xff0c;-1 表示不是回文串var isPalindrome func(i, j int) int8…

安装 JDK 8

安装包 百度网盘 提取码&#xff1a;6666 安装步骤 安装路径不要有中文或者特殊符号如空格等。 双击安装包开始安装。 更改安装路径&#xff1a; 跳出一个页面&#xff0c;安装公共 JRE&#xff1a; 配置环境变量&#xff1a; 配置成功&#xff1a; 去掉自动更新

AI数据分析:用deepseek根据Excel数据绘制分裂饼形图

工作任务&#xff1a;要绘制下面表格中月活用户占比的分裂饼形图 在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个Python脚本编写的任务&#xff0c;具体步骤如下&#xff1a; 读取Excel文件"F:\AI自媒体内容\AI行业数据分析\poetop5…

【LLM】度小满金融大模型技术创新与应用探索

note 从通用大模型到金融大模型金融大模型的训练技术创新金融大模型的评测方法创新金融大模型的应用实践创新总结&#xff1a;金融大模型迭代路径 一、轩辕大模型 二、垂直大模型训练 1. 数据准备 数据质量是模型效果的保障。首先数据要丰富&#xff0c;这是必备的条件。我们…

MeiliSearch-轻量级且美丽的搜索引擎

MeiliSearch-轻量级且美丽的搜索引擎 MeiliSearch 是一个功能强大、快速、开源、易于使用和部署的搜索引擎。它具有以下特点&#xff1a; 支持中文搜索&#xff1a;MeiliSearch 对中文有良好的支持&#xff0c;不需要额外的配置。高度可定制&#xff1a;搜索和索引都可以高度…

UML实现图-组件图

概述 组件图(ComponentDiagram)描述了软件的各种组件和它们之间的依赖关系。组件图中通常包含4种元素:组件、程序、包、任务&#xff0c;各个组件之间还可以相互依赖。 一、组件的表示法 组件是定义了良好接口的物理实现单元&#xff0c;是系统中可替换的物理部件。在一般情…

攻防世界---misc---小小的PDF

1、题目描述&#xff0c;下载附件是一个PDF&#xff0c;打开之后是这样&#xff0c;有两页PDF 2、用winhex分析&#xff0c;没有发现奇怪的地方 3、在kali中binwalk发现有多张照片 4、接着使用foremost将图片分离出来&#xff0c; 5、得到3张图片&#xff0c;打开第3张图片&am…

Android音频架构

Android音频架构 前面《Android音频API》介绍了Android系统提供的四个层面的音频API&#xff1a; Java层MediaRecorder&MediaPlayer系列&#xff1b;Java层AudioTrack&AudioRecorder系列&#xff1b;Jni层opensles&#xff1b;JNI层AAudio&#xff08;Android O引入&…

探索智慧林业系统的总体架构与应用

背景&#xff1a; 随着人们对森林资源保护和管理的重视&#xff0c;智慧林业系统作为一种新兴的林业管理手段&#xff0c;正在逐渐受到广泛关注和应用。智慧林业系统的总体架构设计与应用&#xff0c;将现代信息技术与林业管理相结合&#xff0c;为森林资源的保护、管理和利用…

注册自定义材质实现qgis里不同比例尺下材质不被拉升的效果

前景提要&#xff1a; 在QGIS里的显示效果&#xff0c;用的是示例的/img/textures/line-interval.png材质图片。 下载示例 git clone https://gitee.com/marsgis/mars3d-vue-example.git 相关效果 比如材质是5像素&#xff0c;在1:100000万比例尺下&#xff0c;线显示的长…

树的重心-java

主要通过深度优先搜索来完成树的重心&#xff0c;其中关于树的重心的定义可以结合文字多加理解。 文章目录 前言☀ 一、树的重心☀ 二、算法思路☀ 1.图用邻接表存储 2.图的遍历 3.算法思路 二、代码如下☀ 1.代码如下&#xff1a; 2.读入数据 3,代码运行结果 总结 前言☀ 主…

电机控制系列模块解析(28)—— 其他功能概述

其他功能概述 软件侧&#xff1a;观测器估计发散保护、时序异常检测 主电路侧&#xff1a;IGBT结温估算、直流母线电容容值估算 电机侧&#xff1a;电机温度估计、轴承异常估计、电机退磁检测 负载侧&#xff1a;负载不平衡检测、掉载检测、负载惯量自适应 上述各项功能&a…

新书推荐:2.2.4 第11练:消息循环

/*------------------------------------------------------------------------ 011 编程达人win32 API每日一练 第11个例子GetMessage.c&#xff1a;消息循环 MSG结构 GetMessage函数 TranslateMessage函数&#xff1a;将虚拟键消息转换为字符消息 DispatchMessage函数…