nexus搭建docker私仓 使用nexus创建docker私有仓库

简介: 本文介绍如何使用Nexus搭建Docker私有仓库,包括Nexus中启用Docker仓库、创建Blob存储、配置docker-hosted仓库及端口设置,并说明防火墙开放与Docker客户端配置insecure-registry的方法,实现镜像的推送与拉取。

使用nexus创建docker私有仓库

Nexus的安装请参考该文档:https://www.yuque.com/yzxb/jenkins/fgeqv69dg9o5bgic

Nexus配置Docker仓库步骤;

  1. nexus默认docker是失效的,需要 在security --> Realms,将docker配置成Active
  2. 在 Repository 的 Blob Store 中创建一个用于存放docker镜像的存储。内网没有S3的话,把Type配置为file就行。
    S3:Simple Storage Service,简单对象存储服务,即云存储。

  3. 在 Repository 的 Repositories 中创建一个新的资源库,类型为 docker-hosted。

创建的 docker-hosted资源库的相关配置:

  1. Name:指定该资源库的名称,例如就叫 docker-hosted
  2. Online:默认勾选即可
  3. HTTP:与下面的HTTPS,至少需要勾选其中一个选择框,并配置一个和nexus不同的端口号,例如 8881。将来docker客户端向镜像中心上传镜像时,需要向该端口号进行上传。
  4. HTTPS:如果服务器可以开启https服务,则也可以勾选HTTPS,然后配置一个端口号,接收docker客户端上传上来的镜像。
  5. Allow anonymous docker pull:允许匿名上传,默认不勾选
  6. Enable docker V1 API:是否启用 docker早期V1版本的API,默认不勾选,即只启用V2 API:http://xxx.xxx.xxx.xxx:8881/v2/
  7. Blob Store:选择上面创建的docker镜像的存储
  8. Deployment Policy:是否允许重复上传同一个资源,默认允许

配置好之后,修改防火墙设置,开启刚刚配置的8881 端口:

vim /etc/sysconfig/iptables

添加:

-A INPUT -p tcp -m tcp --dport 8881 -j ACCEPT

重启iptables:

service iptables restart

docker客户端的镜像导出和导入

镜像下载和导出:

下载镜像

docker pull mysql:8.0.28

将镜像导出成本地tar文件

docker save -o mysql-8.0.28.tar mysql:8.0.28

镜像的导入:

将本地文件导入到docker镜像中(docker会自动解析出文件中的tag,无需手动指定)

docker load < mysql-8.0.28.tar

docker 客户端向私仓上传镜像

配置docker允许接收http请求

docker默认只接收https请求,而我们的nexus私仓如果配置的是HTTP接口的话,docker直接连会报错:

server gave HTTP response to HTTPS client

需要配置docker允许连接我们私仓的http。

vim /usr/lib/systemd/system/docker.service

在其中的ExecStart 选项后面,添加 --insecure-registry {docker 私有镜像库 IP} --ipv6=false。

例如:

[Service]

前面的-H参数可能不同,不需要管,只需在最后面加上我们的私仓地址即可:--insecure-registry 192.168.x.xxx:8881 --ipv6=false

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --insecure-registry 192.168.x.xxx:8881 --ipv6=false

然后重启docker:

centos6 的命令

sudo chkconfig daemon-reload
sudo service docker restart

centos7 的命令

sudo systemctl daemon-reload
sudo systemctl restart docker

也可以在/etc/docker/daemon.json 中进行配置:

{
"insecure-reigstries":["192.168.xxx.xxx:8881"]
}

向私仓推送镜像

  1. 如果私仓不允许匿名上传镜像,则需要先进行登陆。(一般私仓都不允许匿名上传,nexus默认匿名上传也没有勾选)

    --username后面为nexus用户名,执行命令后会提示输入密码

    docker login --username=admin http://192.168.xxx.xxx:8881

    登录之后,会在 $HOME/.docker/config.json 中记录下登录的用户信息,之后便不需要再进行登陆操作

    如果要取消登录,则只需执行以下命令

    docker logout http://192.168.xxx.xxx:8881

  2. 将要上传的镜像重新设置Tag。
    docker按照镜像名称区分上传的资源库。
    例如:
    mysql:8.0.28会被上传到docker官方dockerhub;
    tengyer/helloworld:lasted会被上传到dockerhub的tengyer命名空间中;
    registry.cn-hangzhou.aliyuncs.com/命名空间/镜像名称:[镜像版本号] 会上传到阿里云指定命名空间中;
    ccr.ccs.tencentyun.com/命名空间/hello-world:会上传到腾讯云指定命名空间中;
    hub.c.163.com/命名空间/hello-world:会上传到网易数帆指定命名空间中;
    所以,我们如果要上传到我们的私仓,需要将Tag修改为xxx.xxx.xxx.xxx:8881/命名空间/mysql:5.0.27格式:

    将mysql:8.0.28复制出一个私仓格式的Tag

    该操作在 docker images中会多出一个复制出来的tag,但是ImageId和原始的相同

    加个official命名空间,方便区分这个镜像是从官方镜像下载下来的,不加命名空间也可以上传

    docker tag [ImageId] xxx.xxx.xxx.xxx:8881/official/mysql:8.0.28

  3. 将修改好Tag的镜像进行上传:
    docker push xxx.xxx.xxx.xxx:8881/official/mysql:8.0.28
    使用nexus创建docker私有仓库

Nexus的安装请参考该文档:https://www.yuque.com/yzxb/jenkins/fgeqv69dg9o5bgic

Nexus配置Docker仓库步骤;

  1. nexus默认docker是失效的,需要 在security --> Realms,将docker配置成Active
  2. 在 Repository 的 Blob Store 中创建一个用于存放docker镜像的存储。内网没有S3的话,把Type配置为file就行。
    S3:Simple Storage Service,简单对象存储服务,即云存储。

  3. 在 Repository 的 Repositories 中创建一个新的资源库,类型为 docker-hosted。

创建的 docker-hosted资源库的相关配置:

  1. Name:指定该资源库的名称,例如就叫 docker-hosted
  2. Online:默认勾选即可
  3. HTTP:与下面的HTTPS,至少需要勾选其中一个选择框,并配置一个和nexus不同的端口号,例如 8881。将来docker客户端向镜像中心上传镜像时,需要向该端口号进行上传。
  4. HTTPS:如果服务器可以开启https服务,则也可以勾选HTTPS,然后配置一个端口号,接收docker客户端上传上来的镜像。
  5. Allow anonymous docker pull:允许匿名上传,默认不勾选
  6. Enable docker V1 API:是否启用 docker早期V1版本的API,默认不勾选,即只启用V2 API:http://xxx.xxx.xxx.xxx:8881/v2/
  7. Blob Store:选择上面创建的docker镜像的存储
  8. Deployment Policy:是否允许重复上传同一个资源,默认允许

配置好之后,修改防火墙设置,开启刚刚配置的8881 端口:

vim /etc/sysconfig/iptables

添加:

-A INPUT -p tcp -m tcp --dport 8881 -j ACCEPT

重启iptables:

service iptables restart

docker客户端的镜像导出和导入

镜像下载和导出:

下载镜像

docker pull mysql:8.0.28

将镜像导出成本地tar文件

docker save -o mysql-8.0.28.tar mysql:8.0.28

镜像的导入:

将本地文件导入到docker镜像中(docker会自动解析出文件中的tag,无需手动指定)

docker load < mysql-8.0.28.tar

docker 客户端向私仓上传镜像

配置docker允许接收http请求

docker默认只接收https请求,而我们的nexus私仓如果配置的是HTTP接口的话,docker直接连会报错:

server gave HTTP response to HTTPS client

需要配置docker允许连接我们私仓的http。

vim /usr/lib/systemd/system/docker.service

在其中的ExecStart 选项后面,添加 --insecure-registry {docker 私有镜像库 IP} --ipv6=false。

例如:

[Service]

前面的-H参数可能不同,不需要管,只需在最后面加上我们的私仓地址即可:--insecure-registry 192.168.x.xxx:8881 --ipv6=false

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --insecure-registry 192.168.x.xxx:8881 --ipv6=false

然后重启docker:

centos6 的命令

sudo chkconfig daemon-reload
sudo service docker restart

centos7 的命令

sudo systemctl daemon-reload
sudo systemctl restart docker

也可以在/etc/docker/daemon.json 中进行配置:

{
"insecure-reigstries":["192.168.xxx.xxx:8881"]
}

向私仓推送镜像

  1. 如果私仓不允许匿名上传镜像,则需要先进行登陆。(一般私仓都不允许匿名上传,nexus默认匿名上传也没有勾选)

    --username后面为nexus用户名,执行命令后会提示输入密码

    docker login --username=admin http://192.168.xxx.xxx:8881

    登录之后,会在 $HOME/.docker/config.json 中记录下登录的用户信息,之后便不需要再进行登陆操作

    如果要取消登录,则只需执行以下命令

    docker logout http://192.168.xxx.xxx:8881

  2. 将要上传的镜像重新设置Tag。
    docker按照镜像名称区分上传的资源库。
    例如:
    mysql:8.0.28会被上传到docker官方dockerhub;
    tengyer/helloworld:lasted会被上传到dockerhub的tengyer命名空间中;
    registry.cn-hangzhou.aliyuncs.com/命名空间/镜像名称:[镜像版本号] 会上传到阿里云指定命名空间中;
    ccr.ccs.tencentyun.com/命名空间/hello-world:会上传到腾讯云指定命名空间中;
    hub.c.163.com/命名空间/hello-world:会上传到网易数帆指定命名空间中;
    所以,我们如果要上传到我们的私仓,需要将Tag修改为xxx.xxx.xxx.xxx:8881/命名空间/mysql:5.0.27格式:

    将mysql:8.0.28复制出一个私仓格式的Tag

    该操作在 docker images中会多出一个复制出来的tag,但是ImageId和原始的相同

    加个official命名空间,方便区分这个镜像是从官方镜像下载下来的,不加命名空间也可以上传

    docker tag [ImageId] xxx.xxx.xxx.xxx:8881/official/mysql:8.0.28

  3. 将修改好Tag的镜像进行上传:
    docker push xxx.xxx.xxx.xxx:8881/official/mysql:8.0.28

目录
相关文章
|
2月前
|
Docker 容器
nexus3 docker compose部署
本配置使用 Docker Compose 快速部署 Nexus Repository Manager 3.87.2。通过映射端口 8081、挂载持久化数据卷(nexus-data),并设置正确权限(UID/GID 200),确保服务稳定运行,支持制品仓库管理。
208 3
|
API
禅道----禅道和Gitlab对接
禅道----禅道和Gitlab对接
4060 0
禅道----禅道和Gitlab对接
|
数据安全/隐私保护 Docker 容器
分分钟搞定阿里云私有Docke镜像仓库的搭建
分分钟搞定阿里云私有Docke镜像仓库的搭建
6054 0
|
4月前
|
负载均衡 测试技术 Kubernetes
【k8s-1.34.2安装部署】十一.metallb-v0.15.2安装
本章介绍Metallb v0.15.2的安装与配置,适用于测试环境或小流量场景。通过下载YAML文件、修改镜像地址并应用即可完成安装,再配置IP地址池,实现LoadBalancer服务类型对外暴露。简单易用,但大流量时性能受限。
415 3
|
4月前
|
Kubernetes 监控 网络协议
【k8s-1.34.2安装部署】六.企业级部署cilium-1.18.4网络插件
本章详解K8s集群中CNI网络插件Cilium 1.18.4的安装配置,涵盖Helm部署、核心参数解析及状态验证。支持eBPF、Hubble可视化、带宽管理等功能,并提供镜像加速地址与常见问题处理方案。
2358 7
|
5月前
|
关系型数据库 数据库 数据安全/隐私保护
使用Docker和docker-compose部署SonarQube的流程
使用Docker和docker-compose部署SonarQube提供了一种快速启动并运行代码质量分析工具的方法。它易于管理,对系统的配置依赖小,而且可以很容易地进行微服务架构的整合。通过上述步骤,您可以确保一个SonarQube的稳定、可重复的部署流程,其可以轻松地搬移到其他环境,以实现开发、测试和生产的一致性。
575 13
|
运维 Linux Docker
安装Harbor镜像仓库
本文介绍了如何在Linux系统上安装和配置Harbor镜像仓库。首先通过阿里云镜像源安装Docker,然后下载并解压Harbor离线安装包。配置Harbor服务的相关参数。最后,通过运行安装脚本完成Harbor的安装,并进行基本的测试,包括登录、构建和推送Docker镜像。文章还提供了相关资源链接,方便读者进一步了解和学习。
1992 2
|
Kubernetes 容器
k8s更换IP
k8s更换IP
651 0
|
Prometheus 运维 监控
基于 Prometheus + Grafana 实现 Nexus 监控观测
前言 Nexus 是开源的 Maven 私服仓库,同时 Nexus 还支持 Npm 、 .Net、Golang 、Python 等开发语言的包管理。Nexus 也是我们重度使用的一个应用,Nexus 保存着 Tap 各开发组的代码构建产物。Nexus 出现问题会导致项目 CI 、CD 流程阻断。本文旨在通过 Prometheus + Grafana 实现 Nexus 运行时监控观测,帮助运维人员更加了解 Nexus ,轻松从容应对线上各种疑难杂症。
|
JavaScript Java 测试技术
从零开始:Nexus私服搭建与Maven仓库配置的完全指南
从零开始:Nexus私服搭建与Maven仓库配置的完全指南
24391 7

热门文章

最新文章

下一篇
开通oss服务