构建专属安全领地:高效部署Docker私有仓库的无穷魅力 ...

打印 上一主题 下一主题

主题 836|帖子 836|积分 2508


   

  •  作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢各人的关注
  •  座右铭:   云端筑梦,数据为翼,探索无穷可能,引领云计算新纪元
  •  个人主页:团儿.-CSDN博客
  目录
前言:
正文:
镜像仓库  
一.Docker Hub (公有仓库) 
二.Registry (私有仓库)
创建基于registry的私有仓库  
1)用docker容器运行registry私有仓库服务。 
2)运行私有仓库服务 
3) 镜像重命名(要上传的镜像名需要注明私仓的ip)
4)编辑docker配置文件(因为默认是拉取docker官方的镜像,需要重新指定)
//**上传镜像失败原因如下:**
#编辑docker的配置文件,指定私有仓库地址
#修改完成之后重新加载docker和重启
#再次上传测试
**当地dockerhost查看私有仓库镜像方法:进入到私有仓库的共享目录**

###### 查看仓库有哪些镜像
三.Harbor(企业级别私有仓库)
Harbor安装有3种方式: 
 **//这里选用离线安装的方式。** 
1、下载一个docker-compose工具。
#增加可执行权限
#查看版本号,并验证下令可用
#下载依靠包(docker情况已经安装)
2、harbor离线模式 
#将harbor包解压到/usr/local/下
3.修改配置文件
harbor使用 
1 .启动harbor  
2 .通过欣赏器访问 
docker client的设置
1、更改docker配置文件 
2、客户端登陆  
3、上传私有镜像  
4、切换用户zhangsan,下载上传验证


前言:

随着云计算和容器化技能的迅猛发展,Docker已经成为现代软件开辟和部署不可或缺的一部分。作为一种轻量级、可移植的软件打包技能,Docker为开辟人员和运维团队带来了前所未有的机动性和便捷性。然而,随着Docker镜像数量的快速增长,如何高效、安全地存储和管理这些镜像成为了摆在我们面前的紧张课题。
在这样的配景下,Docker私有仓库应运而生。作为企业内部或特定团队内部共享的镜像存储和管理平台,Docker私有仓库不仅提供了与Docker Hub雷同的镜像上传、下载和版本管理功能,更紧张的是,它允许用户根据自身的业务需求和安全要求,对镜像的存储、访问和分发进行精致化的控制。
本指南旨在资助用户深入了解Docker私有仓库的构建、配置和使用方法。我们将从Docker的基础知识入手,渐渐引导用户完成私有仓库的搭建、配置以及镜像的上传和下载操纵。同时,我们还将深入探讨Docker私有仓库在安全性、性能优化和团队协作等方面的最佳实践,资助用户充分发挥Docker私有仓库的潜力。
无论您是Docker的初学者,还是已经在使用Docker进行软件开辟和部署的资深用户,信赖本指南都能为您提供宝贵的参考和借鉴。让我们携手共进,共同探索Docker私有仓库的无穷可能,为企业的数字化转型和创新发展贡献力量。


正文:

镜像仓库  

一.Docker Hub (公有仓库) 

Docker Hub官网:https://hub.docker.com/ 
  如今 Docker 官方维护了一个公共仓库Docker Hub ,大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
  如果你以为拉取 Docker Hub 的镜像比较慢的话,我们可以配置一个镜像加速器,当然国内大部分云厂商都提供了相应的加速器,简单配置即可。 
  注册:你可以在 https://cloud.docker.com 免费注册一个 Docker 账号。
  登录:通过执行docker login 下令交互式的输入用户名及密码来完成在下令行界 面登录 Docker Hub。
  注销:你可以通过docker logout 退出登录。 
二.Registry (私有仓库)

  公司服务器大部分都是私网,为了安全和方便可以搭建私有仓库,而不消完全手动的去导入导出镜像,因为是局域网拉取速度非常快,可以节省带宽和大量时间。
  构建私有的镜像仓库的原由:
  有时间使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个当地仓库供私家使用。
  docker-registry是官方提供的工具,可以用于构建私有的镜像仓库。
  一样平常情况下,岂论是通过commit容器得到的镜像,或者是用dockerfile 制作的镜像,如果需要将镜像保存,可以使用我们之条件到的导出导入下令(save -o ;  load -i)。导出的包,然后再传给其他dockerHost,这种方法也是可行的。
 
  但往往在公司会有大量的镜像,而且不仅仅是单台的dockerHost。我们迫切需要有一个当地的共用的仓库,来实现多台dockerHost直接拉取镜像而不消手动的将镜像传来传去,之前的DockerHub可以资助我们解决这个问题,当然条件需要申请一个DockerHub的账号,创建一个仓库。但这种方法需要斲丧我们的带宽,因为是通过网络传输,既然是网络传输,就需要斲丧肯定的时间。
  
  Registry仓库,是通过一个容器给我们提供的服务,是比较简易的私有仓库,以后在企业中还会有功能更加完善的Harbor仓库。
  registry是官方提供的工具,可以用于构建私有的镜像仓库。你可以通过获取官方 registry 镜像来运行。 

创建基于registry的私有仓库  


1)用docker容器运行registry私有仓库服务。 

注:registry是官方打包好的服务,端口为5000,就像其他捏造出来的web服务一样
注意,这里我们使用的是registry:2版本,还有一个registry镜像,这两个没有什么大的区别。**registry: 是用Python语言写的,registry:2使用Go 语言写的**,理论上来说,registry:2这个版本运行更快些。**
下令:
  1. docker pull registry:2
复制代码
2)运行私有仓库服务 

下令:
  1. docker run -itd --name registry --restart=always -p 5000:5000 -v /registry:/var/lib/registry registry:2
复制代码
     -v:  挂载目录。  宿主机的目录(如果没有此目录会自动创建):容器内的目录。(数据卷:实现容器与宿主机之间的共享,通过一个目录"卷")
    --restart=always:随着docker服务的启动而启动此容器
3) 镜像重命名(要上传的镜像名需要注明私仓的ip)

因为我们使用的私有镜像,在上传或下载的时间,都需要我们将镜像的名称直接重命名,要注明它私有仓库的IP地址:暴露端口。切记是必须,否则将辨认不到仓库而上传或下载失败。
格式为:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG] 
下令:
  1. docker tag nginx:latest 192.168.8.20:5000/nginx
复制代码

4)编辑docker配置文件(因为默认是拉取docker官方的镜像,需要重新指定)


#初次上传下令:
docker push 192.168.8.20:5000/nginx  #上传私有仓库会报错
#以下是报错:
#The push refers to repository [192.168.8.10:5000/nginx]
#Get https://192.168.8.10:5000/v2/: http: server gave HTTP response to HTTPS client

//**上传镜像失败原因如下:**

因为docker默认是从dockehub上下载镜像的,需要在当地指定一下私有仓库的IP加端口,这是因为 Docker默认不允许非HTTPS 方式推送镜像。 如果没做这一步,会报HTTPS的错。
#编辑docker的配置文件,指定私有仓库地址

  1. vim /etc/docker/daemon.json
复制代码
  1. "insecure-registries": ["192.168.8.20:5000"]
复制代码


#修改完成之后重新加载docker和重启


  1. systemctl reload docker
复制代码
#再次上传测试

  1. docker push 192.168.8.20:5000/nginx   
复制代码

**当地dockerhost查看私有仓库镜像方法:进入到私有仓库的共享目录**


  1. cd /registry/docker/registry/v2/repositories/
复制代码



###### 查看仓库有哪些镜像

  1. http://192.168.8.20:5000/v2/_catalog
复制代码

  -X/--request  指定什么下令
  -G/--get 以get的方式来发送数据
  -E/--cert cert[:passwd] 客户端证书文件和密码 (SSL)
  -T/--upload-file  上传文件
curl http://localhost:5000/v2/_catalog      #查看当地私有仓库镜像
  1. http://192.168.8.20:5000/v2/nginx/tags/list
复制代码
{"name":"nginx","tags":["latest"]} //并看到详细的自界说 版本号


三.Harbor(企业级别私有仓库)


  Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装。
  它除了提供友好的Web UI界面,脚色和用户权限管理,用户操纵审计(用户都做了哪些操纵)等功能外,它还整合了K8s(谷歌的产品)的插件(Add-ons)仓库。
  即 Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum可以提供存储chart数据的仓库.【注:helm就相当于k8s的yum】。
  另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair。Notary雷同于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的CVE毛病 
  库来获取最新毛病信息,并扫描用户上传的容器是否存在已知的毛病信息,这两个安全功能对于企业级私有仓库来说是非常具故意义的。 
Harbor安装有3种方式: 

    在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小 
    离线安装:安装包包含部署的相关镜像,因此安装包比较大 
    OVA安装步伐:当用户具有vCenter情况时,使用此安装步伐,在部署OVA后启动Harbor本文记载通过离线安装的方式部署。 
 **//这里选用离线安装的方式。** 

1、下载一个docker-compose工具。

     docker-compose工具的作用是编排镜像,可以像脚本一样把要做的事先规划好,比方要启动的镜像丶镜像名字丶运行机制丶数据卷,实现更加便捷,快速。
    1.7.4版本的harbor安装好之后会有一个docker-compose.yml文件,安装docker-compse工具就是为了支持这个功能从github上下载docker-compse工具
  1.  curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose   
复制代码
#下载完成之后查看/usr/local/bin/目录(直接下载到情况变量目录)
#增加可执行权限

  1. chmod +x /usr/local/bin/docker-compose
复制代码
#查看版本号,并验证下令可用

  1. docker-compose -v
复制代码
#下载依靠包(docker情况已经安装)

  1. yum -y install yum-utils device-mapper-persistent-data lvm2
复制代码

2、harbor离线模式 


直接在百度搜 harbor进官网 harbor的部署方式,**有在线和离线两种方式,思量到网速原因,
这里我们接纳离线下载方式。
  1. wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.4.tgz  
复制代码
#将harbor包解压到/usr/local/下

  1. tar xf harbor-offline-installer-v1.7.4.tgz -C /usr/local/
复制代码
3.修改配置文件

[root@docker bin]# cd /usr/local/harbor/   #进入harbor目录
[root@docker harbor]# vim harbor.cfg 
hostname = 192.168.8.20    
#指定harbor主机,可以改成我们的ip或者域名,使用域名的话在Windows访问harbor要指定hosts文件
ui_url_protocol = http
#访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
max_job_workers = 10
#最大连接数
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA
#是否生成证书
log_rotate_count = 50
#关于日志切割选项
log_rotate_size = 200M
#关于日志切割的巨细,可以是KB、MB、GB
http_proxy =
https_proxy =
no_proxy = 127.0.0.1,localhost,core,registry
#是否启用代理访问
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false
#邮件设置,发送重置密码邮件时使用
harbor_admin_password = Harbor12345
#启动Harbor后,管理员admin,UI登录的密码,默认是Harbor12345
auth_mode = db_auth
#认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
self_registration = on
#是否开启自注册
token_expiration = 30
#token有用时间,默认30分钟
project_creation_restriction = everyone
#用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)

修改完配置文件后,在当前目录执行./install.sh,Harbor服务就会根据当前目录下的docker-compose.yml开始下载依靠的镜像,检测并按照次序依次启动,并且注意,harbor默认使用的是80端口,最好确认是否有辩说,或者也可以在docker-compose.yml中修改对应的端口  
[root@docker harbor]#  ./install.sh 

**终极harbor还是由一个个镜像组成一个架构,实现私有仓库的功能**
[root@docker harbor]# docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS                      PORTS                                                              NAMES
d14144b4cb96        goharbor/harbor-jobservice:v1.7.4        "/harbor/start.sh"       19 minutes ago      Up 19 minutes                                                                                  harbor-jobservice
225a92534326        goharbor/nginx-photon:v1.7.4             "nginx -g 'daemon of…"   19 minutes ago      Up 19 minutes (healthy)     0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp   nginx
7f2a9029daaa        goharbor/harbor-portal:v1.7.4            "nginx -g 'daemon of…"   19 minutes ago      Up 19 minutes (healthy)     80/tcp                                                             harbor-portal
f8300fc73e5b        goharbor/harbor-core:v1.7.4              "/harbor/start.sh"       19 minutes ago      Up 19 minutes (healthy)                                                                        harbor-core
db1a750cbb23        goharbor/redis-photon:v1.7.4             "docker-entrypoint.s…"   19 minutes ago      Up 19 minutes               6379/tcp                                                           redis
987e23d2b823        goharbor/registry-photon:v2.6.2-v1.7.4   "/entrypoint.sh /etc…"   19 minutes ago      Up 19 minutes (healthy)     5000/tcp                                                           registry
cdb12eb42239        goharbor/harbor-adminserver:v1.7.4       "/harbor/start.sh"       19 minutes ago      Up 19 minutes (healthy)                                                                        harbor-adminserver
ee4da2c5f86f        goharbor/harbor-registryctl:v1.7.4       "/harbor/start.sh"       19 minutes ago      Up 19 minutes (healthy)                                                                        registryctl
c3c9076df1dd        goharbor/harbor-db:v1.7.4                "/entrypoint.sh post…"   19 minutes ago      Up 19 minutes (healthy)     5432/tcp                                                           harbor-db
f60346774830        goharbor/harbor-log:v1.7.4               "/bin/sh -c /usr/loc…"   19 minutes ago      Up 19 minutes (unhealthy)   127.0.0.1:1514->10514/tcp                                          harbor-log

docker-compose这个下令可以管理harbor服务,不外需要注意的是想使 用以下下令,必须是和docker-compose.yml这个文件在同一个目录下,其实就是通过管理这个文件而管理harbor仓库的。 
启动harbor: docker-compose start 
停止harbor: docker-compose stop 
重启harbor: docker-compose restart 

harbor使用 


1 .启动harbor  

[root@docker harbor]# docker-compose start
Starting log         ... done
Starting postgresql  ... done
Starting redis       ... done
Starting adminserver ... done
Starting registry    ... done
Starting core        ... done
Starting jobservice  ... done
Starting portal      ... done
Starting proxy       ... done
Starting registryctl ... done
#以下是harbor的架构(是由容器捏造出来的)
Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI,token等服务。
db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
UI:提供图形化界面,资助用户管理registry上的镜像, 并对用户进行授权。
jobsevice:jobsevice是负责镜像复制工作的,他和registry通讯,从一个registry pull镜像然后push到另一个registry,并记载job_log。
Adminserver:是体系的配置管理中心附带检查存储用量,ui和jobserver启动时间回需要加载adminserver的配置。
Registry:镜像仓库,负责存储镜像文件。
Log:为了资助监控Harbor运行,负责网络其他组件的log,供日后进行分析。

2 .通过欣赏器访问 


http://192.168.8.20/harbor 
用户:admin
密码:Harbor12345
已有仓库 library
可以新建项目仓库:
web1  公开
web2  私有
可以新建用户,密码为12345coM:
lisi  加入到web1
zhangsan 加入到web2
在项目中添加用户并赋予权限:
    项目管理员   
    开辟人员  
    访客
    
docker client的设置

1、更改docker配置文件 

  1. vim /etc/docker/daemon.json 
复制代码
  1.   "registry-mirrors": ["https://ej1qowsr.mirror.aliyuncs.com"],"insecure-registries": ["192.168.8.20"]
复制代码
保存退出
  1. systemctl reload docker 
复制代码
  1. docker login -uadmin -p Harbor12345
复制代码
192.168.8.20管理员登录
2、客户端登陆  

  1. docker login -u lisi -p 12345coM 192.168.8.20
  2. docker pull 192.168.8.20/web2/mysql:5.7
复制代码
docker login out退出登录
3、上传私有镜像  

镜像名称要修改成:私有仓库ip/项目名称/镜像名称`
  1. docker tag nginx:latest 192.168.8.20/web1/nginx:latest
  2. docker push 192.168.8.20/web1/nginx:latest  
复制代码
4、切换用户zhangsan,下载上传验证


期待您的关注~
 

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

缠丝猫

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表