ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一篇文章帮你搞定Docker本地镜像仓库构建-harbor!

一篇文章帮你搞定Docker本地镜像仓库构建-harbor!

原创 Linux操作系统 作者:老男孩Linux 时间:2025-11-11 13:46:12 0 删除 编辑

  本文目录

  •   Docker 私有镜像仓库介绍
  •   Docker 私有仓库签发证书
  •   Docker 私有仓库环境准备
  •   Docker 私有仓库程序安装
  •   Docker 私有仓库界面操作

    1.1 Docker私有镜像仓库介绍

  Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

  官网地址:https://github.com/goharbor/harbor

  私有镜像仓库构建环境:

  1.2 Docker私有仓库签发证书

  私有镜像仓库在进行访问时,需要进行HTTPS访问,可以提供更加安全的外网访问,所以需要获取证书文件,课程讲解过程中使用自签发证书方式,进行HTTPS环境部署,实现最终测试环境访问。

  创建证书保存目录,并进入到此目录中:

[root@harbor-01 ~]# mkdir -p /data/ssl[root@harbor-01 ~]# cd /data/ssl/

  在指定证书目录中,生成证书文件信息:(CA证书文件)

# 在指定证书目录中,生成私钥文件信息:[root@harbor-01 ssl]# openssl genrsa -out ca.key 3072Generating RSA private key, 3072 bit long modulus........................................................................................................++e is 65537 (0x10001)# 在指定证书目录中,生成数字证书信息:[root@harbor-01 ssl]# openssl req -new -x509 -days 3650 -key ca.key -out ca.pemYou are about to be asked to enter information that will be incorporated
into your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blank
For some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CH  
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:Organizational Unit Name (eg, section) []:Common Name (eg, your name or your server's hostname) []:Email Address []:说明:以上命令中3650表示证书的有效时间是3年,-x509表示生成的证书格式标准

  在指定证书目录中,生成证书文件信息:(域名证书文件)

# 在指定证书目录中,生成私钥文件信息:[root@harbor-01 ssl]# openssl genrsa -out harbor.key 3072Generating RSA private key, 3072 bit long modulus................................................................++e is 65537 (0x10001)# 在指定证书目录中,生成证书请求文件:[root@harbor-01 ssl]# openssl req -new -key harbor.key -out harbor.csrYou are about to be asked to enter information that will be incorporated
into your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blank
For some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CH    
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:Organizational Unit Name (eg, section) []:Common Name (eg, your name or your server's hostname) []:harber
Email Address []:Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:An optional company name []:# 在指定证书目录中,生成签发证书文件:[root@harbor-01 ssl]# openssl x509 -req -in harbor.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out harbor.pem -days 3650Signature ok
subject=/C=CH/ST=BJ/L=BJ/O=Default Company Ltd/CN=harber
Getting CA Private Key
说明:至此证书签发生成完毕

  1.3 Docker私有仓库环境准备

   1. 进行容器程序安装部署

# 关闭防火墙服务程序# 关闭防火墙-firewalld[root@harbor-01 ~]# systemctl stop firewalld && systemctl disable firewalld# 关闭防火墙-iptables[root@harbor-01 ~]# yum install -y iptables-services   #安装iptables[root@harbor-01 ~]# service iptables stop && systemctl disable iptables# 清空防火墙规则[root@harbor-01 ~]# iptables -F# 关闭selinux安全程序[root@harbor-01 ~]# setenforce 0setenforce: SELinux is disabled[root@harbor-01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config说明:修改selinux配置文件之后,重启机器,selinux才能永 久生效# 配置时间同步[root@harbor-01 ~]# yum install -y ntp ntpdate [root@harbor-01 ~]# ntpdate cn.pool.ntp.org # 编写计划任务[root@harbor-01 ~]# crontab -l* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org# 重启crond服务使配置生效:[root@harbor-01 ~]# systemctl restart crond
    # 配置hosts文件[root@harbor-01 ~]# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain610.0.0.101  docker-0110.0.0.201  harbor# 安装基础软件包[root@harbor-01 ~]# yum install -y  wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack yum-utils# 安装docker-ce# 配置docker-ce国内yum源(阿里云)[root@harbor-01 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装docker依赖包[root@harbor-01 ~]# yum install -y device-mapper-persistent-data lvm2# 安装docker-ce[root@harbor-01 ~]# yum install docker-ce -y# 启动docker服务[root@harbor-01 ~]# systemctl start docker && systemctl enable docker[root@harbor-01 ~]# systemctl status docker● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-07-01 21:29:18 CST; 30s ago
     Docs: https://docs.docker.com
说明:通过查看docker服务状态信息,看到running,表示docker正常运行# 查看Docker 版本信息[root@harbor-01 ~]# docker versionClient: Docker Engine - Community
 Version:          20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:              Fri Jul 30 19:55:49 2021
 OS/Arch:          linux/amd64
 Context:           default
 Experimental:      true

  2.开启包转发功能和修改内核参数

  内核参数修改:br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发。

[root@harbor-01 ~]# modprobe br_netfilter[root@harbor-01 ~]# cat > /etc/sysctl.d/docker.conf #EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1EOF
You have new mail in /var/spool/mail/root[root@harbor-01 ~]# sysctl -p /etc/sysctl.d/docker.conf net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1说明:以上内核配置信息,是WARNING: bridge-nf-call-iptables is disabled 错误解决办法

  将Linux系统作为路由或者VPN服务就必须要开启IP转发功能。当linux主机有多个网卡时一个网卡收到的信息是否能够传递给其他的网卡,如果设置成1的话可以进行数据包转发,可以实现VxLAN等功能。不开启会导致docker部署应用无法访问。

  在docker环境主机上需要配置镜像加速器:

# 1. 安装/升级Docker客户端推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce# 2. 配置镜像加速器针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器[root@harbor-01 ~]# mkdir -p /etc/docker[root@harbor-01 ~]# tee /etc/docker/daemon.json {
   "registry-mirrors": ["https://y1edhblz.mirror.aliyuncs.com"] 根据自己阿里云加速器地址配置}EOF# 3. 查看镜像加速器配置文件信息[root@docker-01 ~]# cat /etc/docker/daemon.json{
  "registry-mirrors": ["https://y1edhblz.mirror.aliyuncs.com"]   单一加速器配置
  或者"registry-mirrors": ["https://y1edhblz.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
                                                       <- 多个加速器配置}

  内核信息配置和镜像加速器配置完毕后,需要重试docker服务程序。

[root@harbor-01 ~]# systemctl daemon-reload [root@harbor-01 ~]# systemctl restart docker

  1.4 Docker私有仓库程序安装

  创建私有仓库程序安装目录:

[root@harbor-01 ~]# mkdir /data/install -p[root@harbor-01 ~]# cd /data/install/

  将harbor的离线包程序包上传到这个目录,离线包下载地址为:

  https://github.com/goharbor/harbor/releases/tag/

  将上传好的离线包,进行解压:

[root@harbor-01 install]# lltotal 614492-rw-r--r-- 1 root root 629238614 Aug 25 18:52 harbor-offline-installer-v2.3.0-rc3.tgz[root@harbor-01 install]# tar zxvf harbor-offline-installer-v2.3.0-rc3.tgz harbor/harbor.v2.3.0.tar.gz
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl
You have new mail in /var/spool/mail/root[root@harbor-01 install]# lsharbor  harbor-offline-installer-v2.3.0-rc3.tgz[root@harbor-01 install]# ls harborcommon.sh  harbor.v2.3.0.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

  修改harbor程序的配置文件信息:

[root@harbor-01 harbor]# pwd/data/install/harbor[root@harbor-01 harbor]# cp harbor.yml.tmpl harbor.yml[root@harbor-01 harbor]# vim harbor.yml5 hostname: harbor-01                                    #修改主机名称和上面签发的证书域名保持一致17   certificate: /data/ssl/harbor.pem18   private_key: /data/ssl/harbor.key

  邮件和ldap不需要配置,在harbor的web界面可以配置,其他配置采用默认即可,修改之后保存退出。

  harbor默认的账号密码:admin/Harbor12345

  安装部署docker-compose程序软件包:

  docker-compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

  Docker-Compose的工程配置文件默认为docker-compose.yml,Docker-Compose运行目录下的必要有一个docker-compose.yml。

  docker-compose可以管理多个docker实例。

# 上传课件里的docker-compose-Linux-x86_64文件到harbor机器[root@harbor-01 install]# ll docker-compose-Linux-x86_64.64 -rw-r--r-- 1 root root 12254160 Aug 25 19:11 docker-compose-Linux-x86_64.64[root@harbor-01 install]# mv docker-compose-Linux-x86_64.64 /usr/bin/docker-compose[root@harbor-01 install]# chmod +x /usr/bin/docker-compose

  安装harbor需要的离线镜像包:

# 上传课件里的docker-harbor-2-3-0.tar.gz文件到docker机器[root@harbor-01 install]# docker load -i docker-harbor-2-3-0.tar.gz[root@harbor-01 install]# cd /data/install/harbor[root@harbor-01 harbor]# ./install.sh[Step 5]: starting Harbor ...Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating redis         ... done
Creating harbor-portal ... done
Creating registry      ... done
Creating registryctl   ... done
Creating harbor-db     ... done
Creating harbor-core   ... done
Creating harbor-jobservice ... done
Creating nginx             ... done
✔ ----Harbor has been installed and started successfully.----说明:看到以上内容信息,说明harbor安装部署成功

  修改系统主机host文件的域名解析:

  在hosts文件添加如下一行,然后保存即可

  192.168.40.181 harbor

  如何停止和运行harbor程序运行状态:

# 如何停掉harbor:[root@harbor-01 harbor]# cd /data/install/harbor[root@harbor-01 harbor]# docker-compose stop # 如何启动harbor:[root@harbor-01 harbor]# cd /data/install/harbor[root@harbor-01 harbor]# docker-compose start

  1.5 Docker私有仓库界面操作

  1.harbor网站页面访问过程:

  在浏览器输入:https://harbor;接收风险并继续,出现如下界面,说明访问正常

  账号:admin 密码:Harbor12345,输入账号密码出现如下:

  所有基础镜像都会放在library里面,这是一个公开的镜像仓库。

  2.harbor网站页面配置过程:

  新建项目->起个项目名字test(把访问级别公开那个选中,让项目才可以被公开使用)

  3.harbor网站仓库容器访问

  修改docker容器主机配置信息

[root@docker-01 ~]# vim /etc/docker/daemon.json {
   "registry-mirrors":["https://y1edhblz.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"],"insecure-registries": ["10.0.0.201","harbor"]}说明:添加的insecure-registries,表示内网访问harbor时走的是http,指定地址是安装harbor机器的ip

  修改docker配置之后重启服务:

[root@docker-01 ~]# systemctl daemon-reload [root@docker-01 ~]# systemctl restart docker[root@docker-01 ~]# systemctl status docker● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-08-26 00:03:25 CST; 1min 14s ago
     Docs: https://docs.docker.com
说明:看到active信息,表示docker服务启动成功

  利用docker主机登录私有仓库:

# 配置docker主机本地hosts文件信息[root@docker-01 ~]# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain610.0.0.101  docker-0110.0.0.201  harbor# 进行登录访问harbor私有仓库[root@docker-01 ~]# docker login 10.0.0.201Username: admin
Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
说明:输入账号和密码之后看到以上信息,说明登录成功

  4.harbor私有仓库镜像上传

# 在docker主机上拉取测试镜像[root@docker-01 ~]# docker pull tomcat# 在docker主机上生成离线镜像包[root@docker-01 ~]# docker save -o tomcat.tar.gz tomcat# 在docker主机上加载离线镜像包[root@docker-01 ~]# docker load -i tomcat.tar.gz # 在docker主机上给要进行上传的镜像打标签[root@docker-01 ~]# docker tag tomcat:latest 10.0.0.201/test/tomcat:v1# 在docker主机上将指定打标的镜像进行上传到harbor私有仓库中[root@docker-01 ~]# docker push 10.0.0.201/test/tomcat:v1说明:执行上面命令就会把10.0.0.201/test/tomcat:v1上传到harbor里的test项目下

  5.harbor私有仓库查看镜像:

  6.harbor私有仓库下载镜像:

# 删除docker主机上已经存在的镜像[root@docker-01 ~]# docker rmi -f 10.0.0.201/test/tomcat:v1# 从harbor私有镜像仓库中拉取指定镜像[root@docker-01 ~]# docker pull 10.0.0.201/test/tomcat:v1v1: Pulling from test/tomcat
Digest: sha256:f03ed41f43d82dc8fd1d5fd5c7f6633eb62e4a0d7d3d83243f08d5acc5424c4d
Status: Downloaded newer image for 10.0.0.201/test/tomcat:v110.0.0.201/test/tomcat:v1[root@docker-01 ~]# docker imagesREPOSITORY          TAG       IMAGE ID       CREATED        SIZE10.0.0.201/test/tomcat    v1        266d1269bb29   6 days ago     668MB
说明:以上操作说明已经可以从harbor上进行私有镜像的拉取

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952968/viewspace-3100708/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
老男孩it教育——致力于帮助有志向的年轻人通过努力学习获得体面的工作和生活。专注于Linux云计算运维、Python全栈开发、网络安全、新媒体运营、容器云架构师、MySQL数据库、go语言的培训。学习可call:18710030740

注册时间:2019-11-06

  • 博文量
    397
  • 访问量
    1016617