前言:
使用 Docker 官方的 Registry 创建的仓库面临一些维护问题。比如某些镜像删除以后空间默认是不会回收的,需要一些命令去回收空间然后重启 Registry 程序。在企业中把内部的一些工具包放入 Nexus 中是比较常见的做法,最新版本 Nexus3.x
全面支持 Docker 的私有镜像。所以使用 Nexus3.x
一个软件来管理 Docker
, Maven
, Yum
, PyPI
等是一个明智的选择。
安装
1. 拉取当前最新版本
docker pull sonatype/nexus3:3.19.1
2.运行
docker run -d --name nexus3 --restart=always -p 8081:8081 -p 8082:8082 --mount src=nexus-data,target=/nexus-data sonatype/nexus3:3.19.1
3.访问登录 http://127.0.0.1:8081/
4.登录,然后修改密码
用户名:admin
密码:
# 进入容器,查看随机生成的密码
docker exec -it [containerId] /bin/bash
cat /nexus-data/admin.password
配置
创建一个私有仓库的方法: Repository->Repositories
点击右边菜单 Create repository
选择 docker (hosted)
- Name: 仓库的名称
- HTTP: 仓库单独的访问端口
- Enable Docker V1 API: 如果需要同时支持 V1 版本请勾选此项(不建议勾选)。
- Hosted -> Deployment pollcy: 请选择 Allow redeploy 否则无法上传 Docker 镜像。
其它的仓库创建方法请各位自己摸索,还可以创建一个 docker (proxy) 类型的仓库链接到 DockerHub 上。再创建一个 docker (group) 类型的仓库把刚才的 hosted 与 proxy 添加在一起。主机在访问的时候默认下载私有仓库中的镜像,如果没有将链接到 DockerHub 中下载并缓存到 Nexus 中。
- hosted : 本地存储,即同docker官方仓库一样提供本地私服功能
- proxy : 提供代理其他仓库的类型,如docker中央仓库
- group : 组类型,实质作用是组合多个仓库为一个地址
菜单 Security->Realms
把 Docker Bearer Token Realm 移到右边的框中保存。
# 添加私服地址,否则报错:Error response from daemon: Get https://192.168.2.6:8081/v2/: http: server gave HTTP response to HTTPS client
# 8082端口是启动容器时,就设定号的,然后在创建仓库的时候填写该端口
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://jleoj1vv.mirror.aliyuncs.com"],
"insecure-registries":["192.168.2.6:5000","192.168.2.6:8082"]
}
systemctl daemon-reload
systemctl restart docker