当前位置: 首页 > news >正文

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

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 1500inet 172.17.0.4  netmask 255.255.0.0  broadcast 172.17.255.255ether 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 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::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 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0root@9667bc48b298:/# 

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

4. 私有仓库优势和劣势

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

优势:

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

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

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

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

劣势:

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

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

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

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

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

5. 最后

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


http://www.mrgr.cn/news/54289.html

相关文章:

  • Netty入门基础:Netty架构设计模型介绍(主从Reactor多线程模型,Futrue-Listener模型)
  • 设计模式——装饰者模式(8)
  • idea2024启动Java项目报Error running CloudPlApplication. Command line is too long.
  • 光伏行业如何借助ERP领跑绿色经济?
  • python绝对值怎么表示
  • 新一代Linux防火墙已经来临(iptables面临淘汰)
  • 从人工智能到大模型的演变
  • 基于FPGA的信号发生器verilog实现,可以输出方波,脉冲波,m序列以及正弦波,可调整输出信号频率
  • 【海图界面上一些常见术语UTC、HDG、COG、SOG、LAT、LON的基本解释】
  • Java | Leetcode Java题解之第494题目标和
  • 测试主分支
  • 使用 Python 解析火狐浏览器的 SQLite3 数据库
  • 基于python+dj+mysql的音乐推荐系统网页设计
  • Python | Leetcode Python题解之第494题目标和
  • 基于模型设计的智能平衡移动机器人-基础实验eCAP
  • MySQL-21.多表设计-案例-关系分析-表结构
  • 【双指针算法】快乐数
  • java语法练习-题目
  • 【最优化方法】线搜索技术
  • 【C++】C++当中的复合类型——引用和指针
  • 【ARM】ARM中断系统详解——以Cortex-A7为例
  • 大模型涌现判定
  • 数据结构-5.11.补充:二叉树遍历算法的应用
  • 分布式搜索引擎03
  • 【AUTOSAR标准文档】服务类型介绍
  • 2023年ICPC亚洲合肥赛区赛 C. Cyclic Substrings