目前主流的Docker4种私有仓库
- docker-registry:docker hub 提供的一直私有仓库解决方案。没有图形化界面
- Harbor:带有图形化界面的工具,用户管理,及查看更加方便
- Nexus:一般我们Maven和Gradle用得比较多,管理jar包,也能存储docker镜像,由于一个版本一个版本的保存和叠加,所以清理起来比较麻烦。
- 云平台容器服务(如阿里云,常用于生产环境)
这里我主要介绍2种相对较友好的镜像私服,harbor和阿里云容器服务。
系统环境说明:
Centos 7
Docker Version: 20.10.14
Harbor
简介
Harbor Registry(又称 Harbor 云原生制品仓库或 Harbor 镜像仓库)由 VMware 公司中国研发中心云原生实验室原创,并于 2016 年 3 月开源。Harbor 在 Docker Distribution的基础上增加了企业用户必需的权限控制、镜像签名、安全漏洞扫描和远程复制等重要功能,还提供了图形管理界面及面向国内用户的中文支持,开源后迅速在中国开发者和用户社区流行,成为中国云原生用户的主流容器镜像仓库。
特性:
- 基于角色的访问控制 :用户与Docker镜像仓库通过“项目”进行组织管理,用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 镜像复制 : 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面 : 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
- AD/LDAP 支持 : Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
- 审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- 国际化 : 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
- RESTful API : RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
- 部署方便 : 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
下载安装包
Harbor 提供了多种途径来帮助用户快速搭建 Harbor 镜像仓库服务,包括:
- 离线安装包:通过docker-compose编排运行。安装包除了包含相关的安装脚本外,还包含了所有安装所需要的Harbor组件镜像,可以在离线环境下安装使用。
- 在线安装包:与离线安装包类似,唯一的区别就是不包含harbor组件镜像,安装时镜像需要从网络上的仓库服务拉取。
- 手动下载:官方源码戳我,找到最新Tag拉到底部进行下载,建议采用迅雷
- 采用wget下载(较慢):
wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
- 这里我们选择离线版。
安装docker-compose
Harbor由多个组件组成,其每个组件都是以Docker
容器的形式构建的,官方采用Docker Compose
来对它进行部署。用于部署Harbor
的Docker Compose
模板位于 harbor/docker-compose.yml
中,这个模板文件中有多个镜像定义,常见如:harbor-log,harbor-db,registry,harbor-core,nginx,harbor-portal,harbor-jobservice
等,版本不一样所依赖的容器熟练不一样。
所以我们需要提前安装好docker compose。
# 下载 http://github.com/docker/compose/releases 网络原因可能会失败
$ curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 也可以手动下载
https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64
# 重命名
$ mv docker-compose-linux-x86_64 docker-compose
# 授权
$ chmod +x /usr/local/bin/docker-compose
# 可定义全局变量或者软链接,方便执行:
$ ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证
$ docker-compose --version
Docker Compose version v2.5.0
# 注意如果运行docker-compose出现Segmentation fault错误,可以做如下操作
1. 重启docker服务
2. 删除docker-compose文件重新下载
生产HTTPS证书
由于我们是在本地或虚拟机,可以不用安装,大家也可以采用其他免费证书
# 官方下载地址
https://goharbor.io/docs/1.10/install-config/configure-https/
安装Harbor
解压配置
$ tar xvf harbor-offline-installer-v2.5.0.tgz -C /usr/local/ $ cd harbor/ # 编辑harbor.yml(老版本是harbor.cfg),修改hostname、https证书路径、admin密码(可选) # 先复制一份harbor.yml $ cp -f harbor.yml.tmpl harbor.yml $ vim harbor.yml -- 示例如下 # 用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名。例如 192.168.2.195 或 hub.it235.com。不要使用 localhost 或 127.0.0.1 为主机名。 hostname: 192.168.2.195 http: # port避免和nginx冲突,改成非80即可,本文改为9080 port: 8098 # 注意,如果不开启https,则需要把https节点的内容注释掉,否则安装会报错,在老版本中由enable属性控制 https: port: 443 # ssl证书地址 仅当协议设置为 https 时才应用。 certificate: /your/certificate/path private_key: /your/private/key/path # harbor默认用户名密码 harbor_admin_password: Harbor12345 # harborDB 用于db_auth 的MySQL数据库root 用户的密码。 database: password: root123 max_idle_conns: 100 max_open_conns: 900 # The default data volume data_volume: /data # 运行 $ sh /usr/local/harbor/install.sh 或进入到harbor目录执行 ./install.sh # 安装成功的结果 ✔ ----Harbor has been installed and started successfully.---- # 注意,如果失败,修改相关配置后再次执行./install.sh即可(一般失败原因大多是端口冲突)
重启
docker-compose
# 关闭 $ docker-compose down -v # 启动 $ docker-compose up -d # 如果出现以下错误,请启动docker,或重启docker $ docker-compose ps no configuration file provided: not found $ systemctl start docker $ systemctl restart docker
查看harbor安装情况
# 查看已经拉取的镜像 $ docker images # 查看所有容器 $ docker ps -a # 查看compose容器相关运行情况 $ docker-compose ps
清空所有容器和镜像
docker rm -f $(docker ps -aq) docker rmi -f $(docker images -aq)
- 访问
harbor
如果使用了https出现检查证书的情况,说明证书失效或配置存在问题,可点击继续访问
默认账号密码:
admin/Harbor12345
,可在harbor.yml
中修改作为开发人员,与harbor打交道最多的就是项目模块,其他模块可以暂时忽略
镜像推送
- 在
harbor
创建项目 找另外一台
Linux
机器- 安装
docker
环境 配置
docker
的镜像仓库为harbor的机器# 注意,这里不再是其他的国内镜像仓库,而是要使用我们的私服harbor $ cat /etc/docker/daemon.json { "registry-mirrors" : ["http://hub-mirror.c.163.com"], # 国内镜像代理 "insecure-registries" : ["192.168.2.195:8098"], # harbor私服 "live-restore": true # 重载docker守护进程而不重启容器 }
- 在我们另外另外一台机器上把harbor的密码存下来,写到一个文件中
使用命令行的方式登录到
harbor
# 在我们另外另外一台机器上把harbor的密码存下来,写到一个文件中 $ echo Harbor12345 > /etc/docker_passwd # 登录,因为harbor对密码有一定的要求,所以要采用这种方式 $ cat /etc/docker_passwd | docker login -u admin --password-stdin http://192.168.2.195:8098 Login Succeeded # 注意:如果出现了https问题,那么请检查daemon.json配置是否与我上面描述的一致
- 安装
随意从官方仓库下载一个镜像
$ docker pull nginx
给镜像打标签
# docker tag SOURCE_IMAGE[:TAG] 192.168.2.195:8098/it235/REPOSITORY[:TAG] $ docker tag redis:latest 192.168.2.195:8098/it235/nginx:v1
推送到harbor仓库
# docker push 192.168.2.195:8098/it235/REPOSITORY[:TAG] $ docker push 192.168.2.195:8098/it235/nginx:v1
- 进入ui页面查看
删除已存在的镜像,并从harbor拉取镜像
$ docker rmi nginx $ docker pull 192.168.2.195:8098/it235/nginx:v1
启动容器并验证
$ docker run -d -p 8888:80 192.168.2.195:8098/it235/nginx:v1 浏览器访问:http://192.168.2.194:8888 # 注意,如果是在云服务器上,需要在安全组中配置8888端口或使用nginx代理才可以在外网访问 # 本地如果有防火墙未直接暴露8888端口,则需要将8888端口加入到防火墙中
- IDEA容器插件自动推送
- 使用Maven或Gradle集成自动推送
- 使用
jenkins
打包构建推送
总结
Harbor是目前企业中应用较为广泛的镜像仓库,虽然各云厂商推出了私有镜像仓库,但是云下的应用场景Harbor有着不可撼动的地位