version: '3.2'
services:
  nexus3:
    container_name: nexus3
    hostname: nexus3
    image: sonatype/nexus3:3.14.0
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 512M
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /data/docker/nexus3/data:/nexus-data
    ports:
      - 8081:8081
      - 8082:8082
      - 8083:8083
    restart: always
    networks:
      - nexus

networks:
   nexus:
     driver: bridge

以上为nexus3的docker-compose.ymal

docker私有仓库

通过变量设置了时区,将数据盘映射到了本地,开放了8081,8082,8083三个端口,创建了名为nexus的桥接网络

为什么开放三个端口?

8081--web页面访问端口,也是maven依赖下载的端口

8082--docker私库的上传端口

8083--docker私有仓库的group端口

上图可以看到docker的私有仓库和maven的依赖仓库

创建专用的blob

为了仓库数据的独立性和安全性,我们可以给每一个repository创建一个独立的Blob块存储。

点击 Repository下面的 Blob Stores - Create blob store:

Name:填写一个易于辨认的名字

Path:会自动生成并补全。默认在Nexus安装目录下面的sonatype-work/nexus3/blobs/下,也可以修改到其它目录或磁盘,甚至可以是NFS或者cephfs的目录。
image

创建hosted类型的私有仓库

点击 Repository下面的 Repositories - Create repository - docker(hosted) :

配置后如图

这里http端口为8082,当我们需要上传镜像时就可以使用该端口

创建一个proxy类型的docker仓库

proxy类型仓库,可以帮助我们访问不能直接到达的网络,如另一个私有仓库,或者国外的公共仓库

配置如图

这里没有开放端口,因为proxy会集成到group中,当私有仓库中没有需要的镜像,就会去代理仓库下载,下载后会保存到私有仓库中

创建一个group类型的docker仓库

group类型的docker仓库,是一个聚合类型的仓库。它可以将前面我们创建的3个仓库聚合成一个URL对外提供服务,可以屏蔽后端的差异性,实现类似透明代理的功能。

配置如图

Group类型创建过程类似于上面的proxy类型。

group : 将左边可选的3个仓库,添加到右边的members下

启用了8083的监听端口

如何使用私有仓库

这是一个docker部署jar包的脚本

#!/bin/bash

# set -e
export BUILD_ID=dontkillme

\cp -f $WORKSPACE/target/xxxx.jar /data/docker/xxxx/jar && \

# 容器名称
CONTAINER="findhousewx"

# 服务名称
SERVICE_NAME="findhousewx_fbl-findhousewx-service"

# docker私有仓库的地址
REG_URL="xx.xx.xx.xx:8082/"

# 私有仓库账户密码
USER="admin"
PASSWD="xxxx"

# 登陆私有仓库
docker login -u $USER -p $PASSWD $REG_URL && \

# 镜像名称(以日期时间为镜像标签,防止重复)
IMAGE=$REG_URL$CONTAINER":"$(date -d "today" +"%Y%m%d_%H%M%S")

# dockerfile目录
cd /data/docker/findhousewx && \

# 创建新镜像
docker build -t $IMAGE . && \

# 上传镜像到私有仓库
docker push $IMAGE && \

echo "上传镜像完成" && \

# 定义删除未使用镜像和容器的函数
deletenotused(){
    # 删除未使用的pod
    docker container prune -f --filter "label=pod_category=fwx" --filter "until=48h"
    # 删除未使用的image(使用标签label来定位改服务的pod,防止删除其他服务的pod)
    docker image prune -a -f --filter "label=image_category=fwx" --filter "until=48h"
}

docker service ls | grep -i $CONTAINER
# 如果服务正在运行则滚动更新,如果没有就创建
if [ $? -eq 0 ];then
    # 滚动升级
    docker service update --image $IMAGE $SERVICE_NAME && \
    deletenotused
else
    # 删除 docker-compose.jenkins.yml 文件,防止使用相同镜像
    rm -rf docker-compose.jenkins.yml && \

    # 复制 docker-compose.src.yml 文件,防止污染原文件
    cp docker-compose.src.yml docker-compose.yml && \

    # 替换镜像名标志位为最新镜像
    sed -i s%IMAGE_LATEST%$IMAGE%g docker-compose.yml && \

    # 使用 docker stack 启动服务
    docker stack deploy --with-registry-auth -c docker-compose.yml $CONTAINER && \

    deletenotused
fi

这里我们自己创建的镜像push到私有仓库是通过8082端口
拉取镜像可以通过8083端口,当访问8083端口拉取私有仓库没有的镜像,则会由proxy仓库去远程拉取镜像,然后保存到本地。

maven私有仓库

maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar

maven-releases:私库发行版jar

maven-snapshots:私库快照(调试版本)jar

maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。

将nexus中maven-central地址配置到maven的setting.xml文件中就能使用

需要注意的

在nexus中创建完私服后,我们需要在docker中配置下,因为我们启用的是http端口,所以首先需要修改下docker的配置文件,执行以下命令:

修改配置文件
vim /etc/docker/daemon.json
{
            "registry-mirrors": ["https://registry.docker-cn.com"],
            "insecure-registries": ["x.x.x.x:8083","x.x.x.x:8082"],
            "disable-legacy-registry": true
}

配置客户端,和私有registry交互
这里的地址就是私有仓库的地址

systemctl daemon-reload
systemctl start docker

nexus3使用docker运行/创建docker私有仓库/maven私有仓库的更多相关文章

  1. 使用Docker Toolbox 创建Docker虚拟机的方法-注意正确使用本地文件 file:参数的路径名

    使用Docker Toolbox 创建v1.12.6版的Docker虚拟机的方法, 一定要注意正确使用本地文件 file:// 参数的路径名, 之前尝试创建过多次,一直都没有成功过, 无法使用 fil ...

  2. Docker运行 Mono

    Docker运行 Mono Docker 是最近相当热门的一个名词,它是一个基于 Linux Container 的轻量化的虚拟技术,而微软也相当积极与 Docker 合作,在 Azure 上支持这个 ...

  3. docker 创建docker用户组,应用用户加入用户组

    在Linux系统下使用docker,为了避免每次输入命令都需要sudo,可以把用户加入docker用户组 创建docker用户组 sudo groupadd docker 普通用户加入docker用户 ...

  4. Singer 学习五 docker 运行说明

    介绍过一个工具knots ,方便Singer 可视化开发的工具,但是默认这个工具包含的tap 以及target 比较少(可以自己扩展) 同时这个工具就是基于docker 运行的 docker 运行的几 ...

  5. docker 运行 sqlserver

    docker 运行 sqlserver docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=sa123456' -e 'MSSQL_PID=Deve ...

  6. Docker Architecture、Docker Usage

    目录 . 引言 - 为什么要有Docker技术 . Docker简介 . Docker安装.部署.使用 . Docker安全 . Docker底层实现 . Docker网络配置 . Dockerfil ...

  7. 3.docker学习之docker与虚拟化

    虚拟化技术是一个总称,是一系列实现虚拟技术的统称.从广义上来说,虚拟化技术包括了虚拟机技术和容器技术, 所谓虚拟化技术最大的特点就是将一个真实的机器进行虚拟地分割,然后分割出来的部分可以独立使用   ...

  8. Docker 三剑客之 Docker Swarm

    上一篇:Docker 三剑客之 Docker Compose 阅读目录: Docker Machine 创建 Docker 主机 Docker Swarm 配置集群节点 Docker Service ...

  9. Docker三剑客之Docker Machine

    一.什么是Docker Machine Docker Machine 是Docker官方编排项目之一,使用go语言编写的,使用不同引擎在多种平台上快速的安装Docker环境,开源地址:https:// ...

随机推荐

  1. [翻译] AJProgressPanel

    AJProgressPanel Animated progress panel 可做动画的进度条 No images needed, all CoreGraphics code 不需要图片,使用Cor ...

  2. 6、tornado

    3反射(reflect) tornado是一款异步非阻塞高效的web框架 自定制session.form.auth,以及第三方ORM框架sqlachme

  3. Bootstrap 4/3 页面基础模板 与 兼容旧版本浏览器

    Bootstrap 3 与 4 差别很大,目录文件结构.所引入的内容也不同,这里说说一下 Bootstrap 引入的文件.网页模板和兼容性问题.本网站刚刚搭建好,正好发一下文章原来测试网站. Boot ...

  4. ab 压测工具使用

    转自:http://www.cnblogs.com/lemtree/articles/1676641.html 就是APACHE自带的测试工具AB(apache benchmark).在APACHE的 ...

  5. 利用describe( )中的count来检查数据是否缺省

    #-*- coding: utf-8 -*- #在python的pandas库中,只需要读入数据,然后使用describe()函数就可以查看数据的基本情况 import pandas as pd in ...

  6. 编程算法 - 数字在排序数组中出现的次数 代码(C)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/36869869 数字在排序数组中出现的次数 代 ...

  7. 使用loader打包静态文件-样式2

    这篇我们了解下css-loader常用的配置项,要配置的话,use里面就不再是一个字符串了 // 打包模块不知道该怎么办,就去模块配置里面该怎么办 module: { // 规则 rules: [{ ...

  8. lazysizes-好用的延迟加载JS插件

    此插件可直接引入lazysizes即可 <script src="lazysizes.min.js"></script> 延迟加载(lazy load)是( ...

  9. docker-6-DockerFile解析

    1.是什么 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤: 1.编写Dockerfile文件 2.docker build 3.docker ...

  10. rand7生成rand10,rand1生成rand6,rand2生成rand5(包含了rand2生成rand3)

    这种题要分两步,第一步是“插空儿”,第二步是“筛” 1.rand7生成rand10 只要是10的倍数就好 int rand10() { int num; do{ num = (rand7() - ) ...