Bootstrap

Harbor仓库安装、配置、镜像制作和上传

Harbor仓库安装、配置、镜像制作和上传

      构建Docker仓库方式除了使用Registry之外,还可以使用Harbor,如下为Registry方式缺点:

  1. 缺少认证机制,任何人都可以随意拉取及上传镜像,安全性缺失;
  2. 缺乏镜像清理机制,镜像可以push却不能删除,日积月累,占用空间会越来越大;
  3. 缺乏相应的扩展机制;
  4. 鉴于以上缺点,我们通常在生产环境中,不会直接使用docker registry来实现提供镜像服务。

       Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。

        作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

        Harbor仓库部署两种方式,一种是off-line ,一种是on-line,即离线和在线安装,此处选择离线安装:

Harbor 仓库服务器IP:172.20.26.169
1)安装Docker-Compose快速编排工具

#安装Epel-release扩展源;

yum install epel-release -y
#安装Python pip工具;

yum install python-pip -y
#升级Python pip工具;

pip install --upgrade pip
#pip install docker-compose

#下载Docker compose脚本;

curl -L https://github.com/docker/compose/releases/download/1.18.0/run.sh > /usr/local/bin/docker-compose

#添加脚本x权限;

chmod +x /usr/local/bin/docker-compose

查看其版本信息;

docker-compose --version

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

2)下载Habor并且解压:(也可以将提前下载好的harbor-offline-installer-v1.7.0.tgz上传到服务器对应的目录)

wget -c https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.0.tgz
tar -xzf harbor-offline-installer-v1.7.0.tgz
cd harbor

3)修改Habor配置文件harbor.cfg,修改hostname为本机IP地址,如图所示:

[root@harbor ~]# vim harbor/harbor.cfg

4)安装Habor,命令如下:

cd harbor

./install.sh

5)登陆Habor WEB平台,默认用户名:admin,默认密码:Harbor12345,可以在habor.cnf自己设置密码;

创建项目,例如名称为harbor

8)修改Docker客户端仓库地址为:172.20.26.169,同时将tag修改为如下格式:

172.20.26.169/library/centos7-ssh
9)docker login输入创建的用户名和密码,登陆成功即可;
docker login 172.20.26.169
 

将centos7-ansible、nginx镜像文件上传到/data/Docker目录下

制作开启SSH连接服务的Dockerfile 文件

vim Dockerfile

#2021-6-8 15:18:49

FROM ansible/centos7-ansible:latest

MAINTAINER www.lqc.net 2021

WORKDIR /root/

RUN rm -rf /etc/yum.repos.d/*

COPY Centos-7-al.repo /etc/yum.repos.d/

RUN yum install -y openssh-server net-tools

RUN echo 1|passwd --stdin root

RUN ssh-keygen -A

ENTRYPOINT /usr/sbin/init

CMD /usr/sbin/sshd -D;/usr/sbin/init

docker build -t centos7-ssh:v1 .

docker tag centos7-ssh:v1 172.20.26.169/library/centos7-ssh:latest

Docker login 172.20.26.169 登录后在push 镜像到Harbor仓库,报错信息如下:

Error response from daemon: Get https://172.20.26.169/v2/: dial tcp 172.20.26.169: connect: connection

vim /usr/lib/systemd/system/docker.service

在ExecStart 一行 添加  --insecure-registry=172.20.26.169

保存退出

systemctl daemon-reload

systemctl restart docker

[root@harbor ~]# docker login 172.20.26.169   #重新登录harbor

[root@harbor ~]# docker push 172.20.26.169/library/centos7-ssh:latest

Web 登录Harbor提示:用户名或密码不正确

ssh 连接172.20.26.169 Harbor 服务器,docker login 172.20.26.169 报错

Error response from daemon: login attempt to http://172.20.26.169/v2/ failed with status: 502 Bad Gateway

vim harbor/harbor.cfg

修改harbor_admin_password = Harbor12345 为

harbor_admin_password = Harbor112345

[root@harbor ~]# systemctl daemon-reload           

[root@harbor ~]# systemctl restart docker

docker login 172.20.26.169  #直接登录成功

在Harbor的web界面然后用新密码(Harbor112345)却无法成功登录,依然提示用户名或密码不正确,但是用旧密码(Harbor12345)成功登录。

登录后将初始密码改为Harbor112345,退出后用新密码成功登录

如果还是不行,建议重启harbor
找到harbor目录,进入目录并执行以下commands

docker-compose down

docker-compose up -d

制作Nginx的Dockerfile 文件,并上传到Harbor仓库

mkdir -p /data/Docker/Nginx

cd /data/Docker/Nginx

vim Dockerfile

FROM ansible/centos7-ansible:latest

#作者信息

MAINTAINER  WWW.LQC.NET

#安装依赖工具&删除默认YUM源,使用YUM源为国内163 YUM源;

RUN rpm --rebuilddb;yum install make wget tar gzip passwd openssh-server gcc pcre-devel zlib-devel openssl-devel net-tools -y

RUN rm -rf /etc/yum.repos.d/*;wget -P /etc/yum.repos.d/ http://mirrors.163.com/.help/CentOS7-Base-163.repo

#配置SSHD&修改root密码为1qaz@WSX

RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''

RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''

RUN ssh-keygen -q -t ed25519 -f /etc/ssh/ssh_host_ED25519_key -N ''

RUN echo '1qaz@WSX' | passwd --stdin root

#Nginx官网下载Nginx最新版本软件;

RUN wget -P /tmp/ http://nginx.org/download/nginx-1.20.0.tar.gz

#解压Nginx软件包,隐藏WEB服务器版本号;

RUN cd /tmp/;tar xzf nginx-1.20.0.tar.gz;cd nginx-1.20.0;sed -i -e 's/1.20.0//g' -e 's/nginx\//WS/g' -e 's/"NGINX"/"WS"/g' src/core/nginx.h

#基于源码安装,创建配置文件;

RUN cd /tmp/nginx-1.20.0;./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-openssl=/root/openssl-1.1.1g;make;make install

#启动Nginx服务进程,对外暴露22和80端口;

EXPOSE  22

EXPOSE  80

CMD /usr/local/nginx/sbin/nginx;/usr/sbin/sshd -D

[root@harbor Nginx]# docker build -t centos7-nginx:v1 .

docker tag centos7-nginx:v1 172.20.26.169/library/centos7-nginx:latest

docker login 172.20.26.169  #登录harbor ,上传 nginx镜像到harbor仓库

admin

Harbor112345

[root@harbor ~]# docker push 172.20.26.169/library/centos7-nginx:latest

;