Harbor仓库安装、配置、镜像制作和上传
构建Docker仓库方式除了使用Registry之外,还可以使用Harbor,如下为Registry方式缺点:
- 缺少认证机制,任何人都可以随意拉取及上传镜像,安全性缺失;
- 缺乏镜像清理机制,镜像可以push却不能删除,日积月累,占用空间会越来越大;
- 缺乏相应的扩展机制;
- 鉴于以上缺点,我们通常在生产环境中,不会直接使用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 yum install python-pip -y pip install --upgrade pip #下载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 |
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