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
-----修改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:
加上IP后:
(docker默认使用的是443,需要安全证书认证登陆)
再次加上端口登陆
注释掉harbor.yml配置文件里的 https
2)如果登陆harbor失败且报502,可能是harbor上的docker重启后,有的服务没能启动
[root@harbor harbor]# docker ps -a
# 解决:
[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
Docker从Harbor上拉镜像
# 前提是要拉取镜像的也已经登陆harbor
[root@docker02 ~]# docker pull 10.0.0.100/wordpress/wp:v2
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 **