Docker本地镜像发布到Docker Registry私有仓库

news2024/11/28 6:36:15

1. 私有仓库

私有库可以部署在本地或私有云环境中,我们可以控制镜像的访问权限。相比公共仓库,私有库提供了更高的安全性和更快的访问速度。此外,私有库还支持自定义,你可以根据自己的需求来配置仓库。

私有仓库解决方案

  • Harbor:一个企业级的Docker Registry服务,提供安全、可信赖的镜像存储和管理功能。它支持RBAC权限控制、镜像复制、镜像签名、漏洞扫描等功能。
  • Docker Trusted Registry (DTR):由Docker官方推出的企业级Docker私有仓库服务,与Docker Engine紧密集成,支持高度的安全性和可靠性。
  • Portus:一个开源的Docker镜像管理和认证服务,提供用户管理、团队管理、镜像审核等功能,与Docker Registry兼容。
  • Nexus Repository Manager:虽然主要是用于构建和管理Java组件,但也可以用作Docker私有仓库。它具有强大的存储管理和权限控制功能。
  • GitLab Container Registry:GitLab集成了容器注册表功能,允许您存储、管理和分发Docker镜像。

本次我们介绍 Docker Registry,是官方提供的工具,可以用于构建私有镜像仓库。

2. 推送镜像

2.1 下载镜像Docker Registry

下来Registry命令

docker pull registry

 下载完成

[root@bogon /]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
1cc3d825d8b2: Pull complete 
85ab09421e5a: Pull complete 
40960af72c1c: Pull complete 
e7bb1dbb377e: Pull complete 
a538cc9b1ae3: Pull complete 
Digest: sha256:ac0192b549007e22998eb74e8d8488dcfe70f1489520c3b144a6047ac5efbe90
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

2.2 创建并运行私有库Registry容器

首先我们在宿主机创建一个Registry目录,与容器映射

[root@bogon /]# mkdir /home/myregistry

 创建容器

docker run -d -p 5000:5000  -v /home/myregistry/:/tmp/registry --privileged=true registry

2.3 创建新镜像

下载ubuntu镜像到本地

[root@bogon myregistry]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
ff65ddf9395b: Pull complete 
Digest: sha256:99c35190e22d294cdace2783ac55effc69d32896daaa265f0bbedbcde4fbe3e5
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

运行容器

[root@bogon /]# docker images
REPOSITORY                                         TAG       IMAGE ID       CREATED         SIZE
registry.cn-hangzhou.aliyuncs.com/wktime/myimage   1.1       2c525eae5b32   4 hours ago     233MB
ubuntu                                             latest    59ab366372d5   8 days ago      78.1MB
registry                                           latest    75ef5b734af4   12 months ago   25.4MB
[root@bogon /]# docker run -it 59ab366372d5 /bin/bash
root@b4a6e7f93df3:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

安装ifconfig命令并测试通过

root@b4a6e7f93df3:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]                                  
Get:2 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Get:3 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [13.7 kB]
Get:4 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:5 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [491 kB]
Get:6 http://archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
Get:7 http://archive.ubuntu.com/ubuntu noble/restricted amd64 Packages [117 kB]
Get:8 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages [19.3 MB]
Get:9 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [541 kB]     
Get:10 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [715 kB]
Get:11 http://archive.ubuntu.com/ubuntu noble/multiverse amd64 Packages [331 kB]                                               
Get:12 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages [1808 kB]                                                    
Get:13 http://archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Packages [491 kB]                                       
Get:14 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [759 kB]                                             
Get:15 http://archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Packages [18.2 kB]                                      
Get:16 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [915 kB]                                         
Get:17 http://archive.ubuntu.com/ubuntu noble-backports/universe amd64 Packages [11.8 kB]                                      
Fetched 26.2 MB in 9s (2912 kB/s)                                                                                              
Reading package lists... Done
root@b4a6e7f93df3:/# 
root@b4a6e7f93df3:/# apt-get install net-tools
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  net-tools
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 204 kB of archives.
After this operation, 811 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble/main amd64 net-tools amd64 2.10-0.1ubuntu4 [204 kB]
Fetched 204 kB in 2s (128 kB/s)     
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package net-tools.
(Reading database ... 4379 files and directories currently installed.)
Preparing to unpack .../net-tools_2.10-0.1ubuntu4_amd64.deb ...
Unpacking net-tools (2.10-0.1ubuntu4) ...
Setting up net-tools (2.10-0.1ubuntu4) ...
root@b4a6e7f93df3:/# 

测试是否安装完成

安装好ifconfig,依据这个容器创建新镜像

docker commit -m="描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
[root@bogon ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED              STATUS              PORTS                                       NAMES
16a75349fb07   59ab366372d5   "/bin/bash"               About a minute ago   Up About a minute                                               youthful_villani
6bb88cfa5eb7   registry       "/entrypoint.sh /etc…"   22 minutes ago       Up 22 minutes       0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   vigorous_wright
[root@bogon ~]# docker commit -m="add ifconfig" -a="wktime" 59ab366372d5 myubuntu:1.2
Error response from daemon: No such container: 59ab366372d5
[root@bogon ~]# docker commit -m="add ifconfig" -a="wktime" 16a75349fb07 myubuntu:1.2
sha256:d8ca41962fec695a8a7245077150e874b362843f1ebc97467fa8694e947fbfb4
[root@bogon ~]# docker images
REPOSITORY                                         TAG       IMAGE ID       CREATED          SIZE
myubuntu                                           1.2       d8ca41962fec   49 seconds ago   122MB
192.168.0.15:5000/myubuntu                         1.1       93dc86f24d47   43 minutes ago   25.4MB
registry.cn-hangzhou.aliyuncs.com/wktime/myimage   1.1       2c525eae5b32   5 hours ago      233MB
ubuntu                                             latest    59ab366372d5   8 days ago       78.1MB
registry                                           latest    75ef5b734af4   12 months ago    25.4MB
[root@bogon ~]# 

2.4 标签镜像

将新镜像修改符合私服规范的Tag标签

docker tag 镜像:Tag Host:Port/Repository:Tag

Host:自己的主机地址

Port:默认5000

[root@bogon /]# docker tag myubuntu:1.2  192.168.0.15:5000/myubuntu:1.2
[root@bogon /]# docker images
REPOSITORY                                         TAG       IMAGE ID       CREATED          SIZE
192.168.0.15:5000/myubuntu                         1.2       d8ca41962fec   2 minutes ago    122MB
myubuntu                                           1.2       d8ca41962fec   2 minutes ago    122MB
192.168.0.15:5000/myubuntu                         1.1       93dc86f24d47   46 minutes ago   25.4MB
registry.cn-hangzhou.aliyuncs.com/wktime/myimage   1.1       2c525eae5b32   5 hours ago      233MB
ubuntu                                             latest    59ab366372d5   8 days ago       78.1MB
registry                                           latest    75ef5b734af4   12 months ago    25.4MB

2.5 配置支持http

docker默认不允许http方式推送镜像,通过配置选项来取消这个限制,修改完后如果不生效重启docker。

配置registry-mirrors,增加本地仓库地址:192.168.0.15:5000

{
  "registry-mirrors": ["https://docker-proxy.741001.xyz","https://registry.docker-cn.com"],
  "insecure-registries": ["192.168.0.15:5000"]
}

具体配置

2.6 推送到私有仓库

[root@bogon /]# docker push 192.168.0.15:5000/myubuntu:1.2
The push refers to repository [192.168.0.15:5000/myubuntu]
467b84e31abb: Pushed 
a46a5fb872b5: Pushed 
1.2: digest: sha256:a73a3f67439f2d13d0bc167213d9b1feffa94b8d963ad4b76f8f0d80d70b8ed7 size: 741
[root@bogon /]# 

 

2.7 curl验证查询是否推送成功

使用下面的命令,看看是否存在镜像

curl -XGET http://192.168.0.15:5000/v2/_catalog

首先我们新建的仓库是空的

推送后验证,私有仓库已经有我们制作的镜像了。

[root@bogon /]# curl -XGET http://192.168.0.15:5000/v2/_catalog
{"repositories":["myubuntu"]}
[root@bogon /]# 

3.下拉镜像并验证

推送成功后,我们从私有仓库下拉镜像,然后运行,看看是否有新安装的ifconfig命令

3.1 下拉镜像

[root@bogon /]# docker images
REPOSITORY                                         TAG       IMAGE ID       CREATED         SIZE
registry.cn-hangzhou.aliyuncs.com/wktime/myimage   1.1       2c525eae5b32   5 hours ago     233MB
ubuntu                                             latest    59ab366372d5   8 days ago      78.1MB
registry                                           latest    75ef5b734af4   12 months ago   25.4MB
[root@bogon /]# docker pull 192.168.0.15:5000/myubuntu:1.2
1.2: Pulling from myubuntu
802008e7f761: Already exists 
5592aff2474e: Pull complete 
Digest: sha256:a73a3f67439f2d13d0bc167213d9b1feffa94b8d963ad4b76f8f0d80d70b8ed7
Status: Downloaded newer image for 192.168.0.15:5000/myubuntu:1.2
192.168.0.15:5000/myubuntu:1.2
[root@bogon /]# docker images
REPOSITORY                                         TAG       IMAGE ID       CREATED          SIZE
192.168.0.15:5000/myubuntu                         1.2       d8ca41962fec   10 minutes ago   122MB
registry.cn-hangzhou.aliyuncs.com/wktime/myimage   1.1       2c525eae5b32   5 hours ago      233MB
ubuntu                                             latest    59ab366372d5   8 days ago       78.1MB
registry                                           latest    75ef5b734af4   12 months ago    25.4MB
[root@bogon /]# 

3.2 运行容器

docker run -it d8ca41962fec /bin/bash
[root@bogon /]# docker run -it d8ca41962fec /bin/bash
root@9667bc48b298:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.4  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:04  txqueuelen 0  (Ethernet)
        RX packets 7  bytes 586 (586.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@9667bc48b298:/# 

运行后,可以看到这个镜像包含我们安装的ifconfig命令,没有报错就说明已经部署成功了。

4. 私有仓库优势和劣势

私有Docker仓库与公共仓库相比,有其独特的优势和劣势:

优势:

  • 安全性:私有仓库因为部署在内网或私有云中,可以更好地控制访问权限,减少数据泄露的风险。例如,通过配置TLS/SSL加密通信,确保数据传输的安全。

  • 定制化:私有仓库可以根据自己的需求进行定制和扩展,比如集成企业内部的认证系统,提供更符合企业需求的服务。

  • 性能:私有仓库通常部署在离开发和生产环境更近的网络中,这可以减少访问延迟,提高镜像的拉取和推送速度。

  • 控制权:企业可以完全控制镜像的存储、分发和管理,不受公共仓库提供商的服务条款或价格变动的影响。

劣势:

  1. 搭建和维护成本:企业需要投入资源来搭建、维护和升级私有仓库,包括硬件、网络、存储以及专业人才的培训和工资。

  2. 技术复杂性:私有仓库的搭建和维护涉及到更多的技术细节,如镜像的安全扫描、漏洞修复、网络配置等,需要专业的技术人员来操作。

  3. 更新和同步:如果私有仓库中的镜像需要经常更新,那么保证镜像的一致性和同步可能会成为一个挑战。

  4. 资源占用:私有仓库需要占用企业的服务器资源,对于资源有限的中小企业来说,可能会是一个负担。

总的来说,私有仓库适合对安全性、定制化和性能有较高要求的企业环境,但也需要企业投入相应的资源和精力来维护。而公共仓库则适合个人开发者和小团队,可以快速开始工作,但可能在安全性和性能上有所妥协。企业在选择时应根据自身的需求和资源进行权衡。

5. 最后

感谢大家,请大家多多支持!

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

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

相关文章

递归神经网络解释(RNN)

Recurrent Neural Network (RNN) 如今,不同的机器学习技术用于处理不同类型的数据。最难处理和预测的数据类型之一是顺序数据。顺序数据与其他类型的数据不同,因为虽然可以假设典型数据集的所有特征都是与顺序无关的,但不能假设顺序数据集是无关的。为了处理这种类型的数据…

018_基于python+django荣誉证书管理系统2024_jytq9489

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

【服务器部署】Docker部署小程序

一、下载Docker 安装之前&#xff0c;一定查看是否安装docker&#xff0c;如果有&#xff0c;卸载老版本 我是虚拟机装的Centos7&#xff0c;linux 3.10 内核&#xff0c;docker官方说至少3.8以上&#xff0c;建议3.10以上&#xff08;ubuntu下要linux内核3.8以上&#xff0c…

如何修改网络ip地址:一步步指南‌

在当今这个数字化时代&#xff0c;网络已成为我们日常生活与工作中不可或缺的一部分。无论是浏览网页、在线办公还是享受流媒体服务&#xff0c;稳定的网络连接和适当的IP地址管理都是确保良好体验的关键。然而&#xff0c;出于隐私保护、绕过地理限制或测试网络环境等需要&…

ssm基于java的招聘系统设计与开发+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 1 第2章 开发环境与技术 3 2.1 Java语言…

Java | Leetcode Java题解之第495题提莫攻击

题目&#xff1a; 题解&#xff1a; class Solution {public int findPoisonedDuration(int[] timeSeries, int duration) {int ans 0;int expired 0;for (int i 0; i < timeSeries.length; i) {if (timeSeries[i] > expired) {ans duration;} else {ans timeSerie…

2011年国赛高教杯数学建模B题交巡警服务平台的设置与调度解题全过程文档及程序

2011年国赛高教杯数学建模 B题 交巡警服务平台的设置与调度 有困难找警察”&#xff0c;是家喻户晓的一句流行语。警察肩负着刑事执法、治安管理、交通管理、服务群众四大职能。为了更有效地贯彻实施这些职能&#xff0c;需要在市区的一些交通要道和重要部位设置交巡警服务平台…

【PFGA】二选一数选器

文章目录 前言一、实验原理二、实验过程三、实验结果参考文献 前言 进行 verilog FPGA 实验 一、实验原理 二、实验过程 三、实验结果 代码 module mux21(input s,input a,input b,output reg y); always(s or a or b) beginif (~s) beginy<a;end else beginy<…

触想工业一体机赋能BMS楼宇管理,让建筑活起来

一、行业发展背景 城市化进程的飞速发展&#xff0c;持续刷新着人们对于现代建筑在舒适度、节能安全、自动化方面的期待。在此趋势下&#xff0c;诸如暖通空调、用电照明、门禁消防等建筑配套子系统不断扩充完善&#xff0c;建筑物从简单的物理结构膨胀为庞大的楼宇生态系统&am…

go jwt 用户登录和返回用户信息 token ----important!!!

1.每一行代码都有详细注释&#xff0c;解释了其功能和作用。这些注释可以帮助你理解代码如何工作&#xff0c;特别是在处理用户登录、生成 JWT、验证 JWT 和返回用户信息的过程中。 package main // 指定这个文件是一个可执行程序import ("fmt" …

深度学习面经总结

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【动态规划 数学归纳法 二项式定理】C++ 算法458:可怜的小猪

作者推荐 视频算法专题 本文涉及知识点 数学归纳法 二项式定理 动态规划汇总 数学 力扣458:可怜的小猪 有 buckets 桶液体&#xff0c;其中 正好有一桶 含有毒药&#xff0c;其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药&#xff0c;你可以喂一些…

linux线程 | 全面理解同步与互斥 | 同步

前言&#xff1a;本节内容主要讲解linux下的同步问题。 同步问题是保证数据安全的情况下&#xff0c;让我们的线程访问具有一定的顺序性。 线程安全就规定了它必须是在加锁的场景下的&#xff01;&#xff01;那么&#xff0c; 具体什么是同步问题&#xff0c; 我们加下来看看吧…

基于Matlab车牌识别课程设计报告模板(附源代码)

目 录 一&#xff0e;课程设计目的……………………………………………3 二&#xff0e;设计原理…………………………………………………3 三&#xff0e;详细设计步骤……………………………………………3 四. 设计结果及分析…………………………………………18 五. …

NC 单据模板自定义项 设置参照(自定义参照)

NC 单据模板自定义项 设置参照&#xff08;自定义参照&#xff09; 如图下图&#xff0c;NC 单据模板自定义项 设置参照&#xff1a; 1、选择需要设置参照的自定义字段&#xff0c;选择高级属性页签&#xff0c;在类型设置中&#xff0c;数据类型选择参照信息&#xff0c;即bd…

DART: Implicit Doppler Tomography for Radar Novel View Synthesis 笔记

Link&#xff1a;https://wiselabcmu.github.io/dart/ Publish&#xff1a; 2024CVPR Abstract DART主要任务就是用来合成雷达距离多普勒图像range-droppler&#xff0c;可用于生成高质量的断层扫描图像。 Related Work 1 Radar Simulation 基于模型的方法 任务&#xff…

通信工程学习:什么是VPN虚拟私人网络

VPN&#xff1a;虚拟私人网络 VPN&#xff0c;即虚拟私人网络&#xff08;Virtual Private Network&#xff09;&#xff0c;是一种通过公共网络&#xff08;如互联网&#xff09;建立的加密连接&#xff0c;用于保护用户的网络连接和数据传输的安全与隐私。以下是关于VPN的详细…

【数学二】一元函数积分学-定积分的应用-平面图形面积、旋转体体积、函数的平均值、平面曲线的弧长、旋转曲面面积

考试要求 1、理解原函数的概念&#xff0c;理解不定积分和定积分的概念. 2、掌握不定积分的基本公式&#xff0c;掌握不定积分和定积分的性质及定积分中值定理&#xff0c;掌握换元积分法与分部积分法. 3、会求有理函数、三角函数有理式和简单无理函数的积分. 4、理解积分上限…

动态内存管理 (上)

目录 1. 为什么要有动态内存分配 2. malloc和free 2.1 malloc 2.1 1 malloc 申请空间和数组的空间有什么区别呢&#xff1f; 2.2 free 3. calloc和realloc 3.1 calloc 3.2 realloc 4. 常⻅的动态内存的错误 4.1 对NULL指针的解引⽤操作 4.2 对动态开辟空间的越界访问 4…

CSS面试真题 part2

CSS面试真题 part2 11、css3新增了哪些新特性&#xff1f;12、css3动画有哪些&#xff1f;13、介绍一下grid网格布局14、说说flexbox&#xff08;弹性盒布局模型&#xff09;&#xff0c;以及使用场景&#xff1f;15、说说设备像素、css像素、设备独立像素、dpr、ppi之间的区别…