【docker基础】使用Harbor搭建私有仓库-docker-compose使用示例--第二周作业

一、搭建配置harbor私有仓库

由于harbor的环境依赖docker和docker-compose工具,所以在搭建harbor私有仓库之前需先安装docker和docker-compose

1.使用yum安装docker-ce:

sudo  yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
安装docker-ce
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 2.安装docker-compose:

先安装python3-pip

更新pip

使用pip安装docker-compose

docker-compose安装成功

解压harbor安装包到的harbor目录,进入harbor目录,修改harbor的配置文件harbor.yml,修改如下配置

 运行install脚本,附加扫描器功能

运行成功 

 在本地hosts文件中添加域名解析后,就可以通过浏览器访问harbor的页面

测试docker push镜像

要想是docker能push到该私有registry上镜像,需要先登录,并且接受不安全的harbor站点地址,

在/etc/docker/daemon.json文件中添加insecure-registries选项,将harbor的地址写进去:

修改后,重启docker

docker info中能看到添加的insecure-registries

 docker登录该私有仓库,用户名密码与登录web的相同

 给本地镜像打私有仓库的tag:

push镜像

成功后可以通过web查看push成功的镜像

 从另外一台机器上测试docker pull镜像

配置harbor的https

创建自签证书

在配置文件/usr/local/src/harbor/harbor.yml里打开https协议、端口、证书、key的参数(每行缩进格式要对齐,否则运行install.sh脚本时会报错)

二、配置harbor仓库之间的复制规则及高可用

      首先搭建两个harbor镜像仓库(harbor1和harbor2,搭建步骤如上文),在两个harbor仓库之上使用haproxy代理实现负载均衡,搭配harbor自带的复制功能保证两边的数据同步;

在Harbor1上添加目标仓库harbor2(仓库管理--新建目标,这里有个坑,目标仓库地址最好使用IP地址的url,使用域名的url怎么也连不上):

关于通过域名url连不上的问题原因:做实验时在节点上的/etc/hosts文件里添加了域名解析,但运行harbor的harbor-jobserver容器查不到这个解析,他是递归查询容器自己的/etc/hosts文件-->宿主机的nameserver,不会查询宿主机的/etc/hosts文件。最好的解决方法是将域名解析写到nameserver里。

在Harbor1上新建复制规则,一般选择Push-based,本地有新镜像了自动推到目标仓库,资源过滤器表示可以过滤一些tag、标签,目标仓库就是上面添加的目标仓库,目标名称空间不写默认推到本地仓库的相同名称空间,仓库扁平化指镜像复制后harbor会对应的修改镜像的拉取地址,替换级别如下图,触发模式有手动、定时和时间驱动,一般选事件驱动;

 

 保存后,可先指定push到harbor1上,测试一下能否成功触发自动复制,复制规则下可以看到复制任务的状态、日志等

 测试没问题后,同样的步骤在Harbor2上添加目标仓库harbor1,新建复制规则,双向复制测试成功,就表示双仓库的同步配置完成。

从另外一台虚机上部署haproxy,代理两台harbor,实现负载均衡,即使调度到不同harbor上,也能保证数据同步;

安装haproxy,可以使用yum、可使用源码编译安装,这里不详述;

配置文件/etc/haproxy/haproxy.cfg

添加listen bind mode balance server 参数,之后启动haproxy

在docker虚机上添加对haproxy IP的域名解析,就可以通过haproxy的域名访问后端的两台harbor机器;

同样的将haproxy的访问地址添加到docker虚机的insecure-registries里,然后docker login https://haproxy就可以测试镜像的push/pull

三、docker网络

1.通过自定义容器别名互联

  在同一个宿主机上容器之间可以通过自定义容器名称/别名相互访问,由于容器在启动的时候其内部IP地址是HDCP分配的,IP地址不容易固定,使用自定义容器名称相对比较固定,此方式最少需要两个容器之间操作;

#docker run -d --name 新容器名称 --link 目标容器名称:自定义容器别名 -p 本地端口:容器端口 镜像名称 

其中目标容器名称可以变,只要自定义容器别名不变,新容器里/etc/hosts文件里始终会保存目标容器IP 目标容器名称 自定义容器别名的对应关系,新容器可以通过自定义容器别名访问新的目标容器;

2.docker网络模型

Bridge模式

     使用参数--net=bridge指定,docker网络默认就是bridge模式

Host模式

     使用参数--net=host指定,新建容器时不会创建容器自己的虚拟网卡,容器直接使用宿主机的网络信息,在容器里查看到的IP信息与宿主机的IP信息是一致的,访问容器时直接访问宿主机的IP+端口,此模式网络性能最高,但各容器之间端口不能相同,适用于运行容器端口比较固定的业务,此模式不支持端口映射,运行容器时不能用-p参数指定端口映射;

None模式

     使用参数--net=none指定,使用none模式的容器没有虚拟网卡,没有IP,没有路由,因此默认无法与外界通信,适用于单独跑一些数据分析、数据计算等应用;

Container模式

     使用参数--net=container:容器名称或容器ID指定,此模式的容器需指定和一个已经存在的容器共享网络,共享指定容器的IP和端口范围,因此这个容器的端口不能与被指定容器的端口冲突,两个容器可以通过lo网卡进行通信;

四、安装docker-compose并利用它组装一个多容器的服务

     docker-compose安装如上文安装harbor的过程;

     使用docker-compose启动一个或多个容器

     通过docker-compose.yaml文件定义容器的service、container参数,与k8s的yaml文件格式类似;

     必须在docker-compose.yaml文件所在的目录下执行

     #docker-compose up -d  #根据docker-compose.yaml文件定义的参数启动容器 -d表示后台运行容器

     #docker-compose stop   #停止当前docker-compose.yaml文件里的所有service、container

     #docker-compse start     #启动当前docker-compose.yaml文件里的所有service、container

     #docker-compose ps --service   #查看当前docker-compose.yaml文件里的所有service名称

示例:

1.准备haproxy、nginx、tomcat镜像,并push到自己搭建的harbor上;

2.准备haproxy、nginx的配置文件和nginx、tomcat的网页文件,实现通过nginx可以访问静态页面,通过tomcat访问动态页面

haproxy.cfg文件

nginx.conf文件

3.准备docker-compose.yml文件,haproxy代理nginx、tomcat的应用

 4.在docker-compose.yml文件所在目录执行docker-compose up -d部署该示例

 5.测试效果

通过宿主机8082端口默认能访问到nginx容器下的静态页面

t

通过宿主机的8082/app路径能访问到tomcat容器下的动态页面,并能根据nginx.conf配置的负载均衡策略进行轮询

通过宿主机的9999/haproxy_status路径可看到haproxy代理应用的状态

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值