Docker运维教程(7)私有镜像仓库的部署与使用

TangLu 未命名 2019-03-11 6046 0

一、为什么要部署私有镜像仓库

虽然Docker官方提供了一个Docker Hub作为公共镜像仓库,使用方便,里面镜像也足够丰富。但是存在访问速度慢、镜像安全性无法确定的问题,可以通过搭建本地私有仓库的方式来解决这些问题。私有镜像仓库的部署方式可以通过registry或者harbor来实现,由于harbor还提供了丰富的web界面,管理更方便,所以也是现在主流的私有镜像仓库部署方式,其他方式作为了解即可。


二、如何部署Docker私有镜像仓库

1、docker-distribution方式(老版本也叫docker-registry)

· 安装 docker-distribution

#使用yum安装
yum install docker-distribution 
systemctl start docker-distribution 

#使用registry官方镜像安装 
docker run -d -p 5000:5000 -v /docker_registry:/var/lib/registry registry:2


· 配置 docker-distribution

如果是使用yum安装,Docker registry的主配置文件是/etc/docker-distribution/registry/config.yml,其中可以定义服务的名字(service),仓库的路径(rootdirectory)、端口(addr)


· 推送本地镜像到仓库

在进行push操作的时候要注意镜像的名字,镜像地址完整格式为[hostip]:[port]/[username]/xxx:tag如果省略了[hostip]:[port]部分,则是默认推送到官方Docker Hub中。所以需要先将之前的镜像重命名,然后push到私有仓库中。推送成功后在仓库目录中可以看到镜像文件

docker image ls  #先查询本地镜像
docker tag myweb:v1 node.linuxe.cn:5000/myweb:v1  #将本地镜像打标签,镜像名myweb前面没有带用户名代表是顶层仓库
docker push node02.linuxe.cn:5000/myweb:v1  #推送镜像到私有仓库
docker pull node02.linuxe.cn:5000/myweb:v1  #从私有仓库下载刚推送的镜像


· 信任镜像仓库

需要注意的是docker push命令默认是https客户端,而自建的仓库工作在http模式下,所以会出现http:server gave HTTP response to HTTPS clients的错误,所以需要在 Docker 客户端上信任该镜像仓库

vi /etc/docker/daemon.json
insecure-registries": ["node02.linuxe.cn:5000"]"  #增加一行配置,让docker客户端明确这个仓库是不安全的
systemctl restart docker


2、docker harbor方式

· 安装docker-compose

为了省去安装harbor繁琐的配置,官方将其做成了镜像,只不过需要单机编排工具compose来完成安装,所以在安装harbor实现web管理之前还要安装docker-compose

yum install docker-compose


· 下载Harbor

Harbor项目托管在Github上,在github.com/vmware/harbor可以看到Harbor的安装说明,包含离线安装还是在线安装、软硬件要求等。这里下载离线包为例进行安装,包比较大,500多M。

wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz


· Harbor配置文件

下载完成后解压可以看到install.sh脚本和harbor.cfg配置文件,首先编辑配置文件harbor.cfg

vi harbor.cfg
hostname = 域名或者IP
ui_url_protocol = http  #http协议,如果使用https协议的话hostname必须修改成证书对应域名
max_job_workers =  3  #处理用户上传下载的并发进程数
customize_crt = on  #是否使用自定义证书,会自动调用openssl来生成证书
ssl_cert = /data/cert/server.crt  #证书文件    
ssl_cert_key = /data/cert/server.key  #证书私钥
harbor_admin_password = Harbor12345  #默认管理密码
db_password = root123  #mysql初始密码


· 配置文件修改完成后运行install.sh以启动Harbor,该脚本会启动很多镜像,因为compose就是一个容器编排工具,使用以下命令可以查看具体compose具体做了什么

docker-compose ps


· install.sh脚本运行结束后会有443和80端口监听在本地用于访问到Harbor。这些端口可以通过修改docker-compose.yml中的ports部分实现自定义,前面的端口是宿主机监听的端口,后面是Docker中的端口。Harbor运行后的后续使用就是将本地镜像修改tag并push的过程。

docker push my.harbor.com/libray/mycentos  #将mycentos镜像上传到仓库的libray项目中


· 如果修改了Harbor配置的话只需要重启docker-compose即可,因为Harbor是基于Compose来管理的

docker-compose stop
docker-compose start


评论