Harbor
  DcpJeOZ6VzTX 2023年11月13日 16 0

Harbor 是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞 扫描、镜像验真、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像 复制和中文支持等功能。

Docker私有镜像仓库

环境准备

主机

IP

角色

docker01

10.0.0.101

gitlab、jenkins

docker02

10.0.0.102

web

harbor

10.0.0.100

harbor私有仓库

安装部署

------安装docker、docker-compose-----------------
# 1.下载docker官方源
[root@harbor ~]# wget -O /etc/yum.repos.d/docker-ce.repo  https://download.docker.com/linux/centos/docker-ce.repo

# 2.安装docker和docker-compose
[root@harbor ~]# yum install -y docker-ce docker-ce-cli containerd.io docker-compose

# 3.创建一个docker配置文件存放目录
[root@harbor ~]# mkdir -p /etc/docker

# 4.编辑配置文件(给镜像加速)
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://exjugyyn.mirror.aliyuncs.com"]
}
EOF

# 5.加载配置文件
[root@harbor ~]# systemctl daemon-reload

# 6.启动docker服务
[root@harbor ~]# systemctl start docker
加入开机自启:
[root@harbor ~]# systemctl enable docker



-------安装harbor-----------------------------------
# 1.上传安装包
[root@harbor ~]# harbor-offline-installer-v1.10.0.tgz

# 2.解压harbor安装包
[root@harbor ~]# tar xf harbor-offline-installer-v1.10.0.tgz

# 3.进入harbor目录
[root@harbor ~]# cd harbor/

# 4.进入harbor.yml修改配置文件
[root@harbor harbor]# vim harbor.yml
1)改一下主机名(有域名就用域名)hostname: 10.0.0.100
2)修改harbor登陆密码 harbor_admin_password: Harbor12345
3)注释掉https

# 5.执行install.sh进行安装harbor
[root@harbor harbor]# ./install.sh 

# 6.浏览器访问

Harbor使用

登陆harbor

Harbor_Docker私有镜像仓库harbor

新建项目

Harbor_Docker私有镜像仓库harbor_02

Harbor_Docker私有镜像仓库harbor_03

Harbor_harbor推拉镜像_04

将harbor注册到docker

-----修改docker配置文件---------------------
# 修改的是要登陆harbor的docker端机器的配置文件
[root@docker01 ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://pgz00k39.mirror.aliyuncs.com"],  (注意逗号别忘记加)
  "insecure-registries": ["http://10.0.0.100"]    (配置文件加新这一条)
}

# 重启docker
[root@docker01 ~]# systemctl restart docker




-------登陆harbor-------------------------------
# docker端登陆harbor(这里harbor是单独一台机器装的)                 
[root@docker01 ~]# docker login 10.0.0.100   (docker login harbor的IP)
Username: admin
Password:  (密码是Harbor12345  在harbor配置文件harbor.yml里)
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-store

Login Succeeded  (表示登陆成功)
排错分析

1)登陆harbor时需要解决的问题

默认情况登陆的是hub:

Harbor_Docker私有镜像仓库harbor_05

加上IP后:

(docker默认使用的是443,需要安全证书认证登陆)

Harbor_Docker私有镜像仓库harbor_06

再次加上端口登陆

Harbor_harbor推拉镜像_07

注释掉harbor.yml配置文件里的 https

2)如果登陆harbor失败且报502,可能是harbor上的docker重启后,有的服务没能启动

[root@harbor harbor]# docker ps -a

Harbor_Docker私有镜像仓库harbor_08

# 解决:
[root@harbor ~]# cd /root/harbor/
# 1.停止所有容器
[root@harbor harbor]# docker-compose stop
# 2.删除所有容器
[root@harbor harbor]# docker rm -f $(docker ps -aq)
# 3.启动harbor
[root@harbor harbor]# docker-compose up -d
# 4.登录
[root@harbor harbor]# docker login 10.0.0.100
Username: 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-store
Login Succeeded

Docker推镜像到Harbor

先给镜像规范命名(域名/项目名称/镜像名:tag标签 <==> 10.0.0.100/wordpress/wp:v2)

# 先给镜像规范命名
[root@docker01 ~]# docker tag wp:v2 10.0.0.100/wordpress/wp:v2

# 在docker已经登陆harbor前提下
[root@docker01 ~]# docker push 10.0.0.100/wordpress/wp:v2

Harbor_harbor图形化_09

Docker从Harbor上拉镜像

# 前提是要拉取镜像的也已经登陆harbor
[root@docker02 ~]# docker pull 10.0.0.100/wordpress/wp:v2

Harbor_Docker私有镜像仓库harbor_10

Docker官方私有镜像仓库registry

# 1.拉register镜像
[root@docker02 ~]# docker pull registry

# 2.查看镜像详细信息
[root@docker02 ~]# docker inspect registry

# 3.启动镜像
[root@docker02 ~]# docker run -d -p 5000:5000 --restart=always --name registry -v
/opt/myregistry:/var/lib/registry registry

推送镜像到registry

registry地址/镜像名称:tag标签

# 1.修改镜像名(先规范命名)
[root@docker01 ~]# docker tag centos:7 10.0.0.102:5000/centos:7

# 2.修改配置文件
[root@docker01 ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://pgz00k39.mirror.aliyuncs.com"],
  "insecure-registries": ["http://10.0.0.102:5000"]
}
(如果两个私有仓库都想用就"insecure-registries": ["http://10.0.0.100","http://10.0.0.102:5000"])

# 3.重启docker
[root@docker01 ~]# systemctl restart docker

# 4.推送镜像
[root@docker01 ~]# docker push 10.0.0.102:5000/centos:7

# 5.查看镜像
[root@docker01 ~]# curl http://10.0.0.102:5000/v2/_catalog
{"repositories":["centos","wp"]}

# 6.查看json格式(要先装jq yum install -y jq)
[root@docker01 ~]# curl -s http://10.0.0.102:5000/v2/_catalog|jq
{
   "repositories": [
     "centos",
     "wp"
     ]
}

# 7.查看镜像及标签
[root@docker01 ~]# curl -s http://10.0.0.102:5000/v2/centos/tags/list
{"name":"centos","tags":["7"]}

[root@docker01 ~]# curl -s http://10.0.0.102:5000/v2/wp/tags/list
{"name":"wp","tags":["v4"]}

-#json格式
[root@docker01 ~]# curl -s http://10.0.0.102:5000/v2/wp/tags/list|jq
{
  "name": "wp",
  "tags": [
    "v1",
    "v2"
  ]
}


-----docker从registry拉镜像-------

删除镜像

----# 方法一:--------------------------------------------
1)进入docker registry 的容器中
[root@docker01 ~]# docker exec -it registry /bin/sh

2) 删除指定镜像目录文件
# rm -fr /var/lib/registry/docker/registry/v2/repositories/centos7
[root@master mnt]# curl http://192.168.91.8:5000/v2/_catalog
{"repositories":[]}

-#示例:
[root@docker02 ~]# docker exec -it registry /bin/sh
/ # cd /var/lib/registry/docker/registry/v2/repositories/
/var/lib/registry/docker/registry/v2/repositories # ls
wp
/var/lib/registry/docker/registry/v2/repositories # rm -fr wp
# 查看镜像进行验证
[root@docker02 ~]# curl http://10.0.0.102:5000/v2/_catalog
{"repositories":[]}



-----# 方法二:-----------------------------------
-#删除某个镜像是到映射目录下的/opt/myregistry/docker/registry/v2/repositories目录找到想要进行删除

[root@docker02 repositories]# rm -fr centos/

-# 删除镜像的某个版本是到映射目录下的镜像目录下的_manifests/tags目录下:例:/opt/myregistry/docker/registry/v2/repositories/wp/_manifests/tags

[root@docker02 tags]# rm -fr v1


# 查看镜像进行验证
[root@docker02 ~]# curl http://10.0.0.102:5000/v2/_catalog|jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    24  100    24    0     0   4310      0 --:--:-- --:--:-- --:--:--  4800
{
  "repositories": [
    "wp"
  ]
}
[root@docker02 ~]# curl http://10.0.0.102:5000/v2/wp/tags/list
{"name":"wp","tags":["v2"]}


拓展

传统代码上线流程

gitlab Jenkins
1)开发将代码上传到gitlab
2)使用Jenkins拉取代码
 - freestyle
 - maven
 - pipeline
3)使用sonarqube对代码进行质量检测
4)如果需要编译的代码,就编译构建(Java、C等)
5)使用金丝雀发布方式,发布单台服务器
6)对单台服务器进行测试(测试根据测试用例进行功能测试)
7)单台机器加入集群,发布其他机器
8)整套集群进行测试

基于Docker代码上线流程

**没有harbor **

Harbor_Docker私有镜像仓库harbor_11

**有harbor **

Harbor_Docker私有镜像仓库harbor_12

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论