Nexus3 Docker 仓库

  • ubuntu 上安装 Docker
  • Docker 配置阿里云镜像

0. 创建 Network

docker network create dev-ops

1. Docker 安装 Nginx

Nginx 的妙用

Docker 安装 Nginx 时,要把容器中的文件挂载到本地目录,方便我们配置 Nginx,不用修改配置还要进入容器中;

  • 1.1 下载镜像

docker pull nginx

  • 1.2 先运行一次容器(为了拷贝配置文件 )

docker run -p 80:80 --name nginx --network dev-ops -v /opt/mount/nginx/html:/usr/share/nginx/html -v /opt/mount/nginx/logs:/var/log/nginx -d nginx

/opt/mount/nginx是本地目录(随便起名字),该目录下有两个子目录html logs

  • 1.3 拷贝配置

docker container cp nginx:/etc/nginx /opt/mount/nginx

  • 1.4 修改目录名字

mv /opt/mount/nginx/nginx /opt/mount/nginx/conf

  • 1.5 停止、删除容器
docker stop nginx
docker rm nginx

2. 使用 Docker 再次运行 Nginx

docker run -p 80:80 --name nginx --network dev-ops -v /opt/mount/nginx/html:/usr/share/nginx/html -v /opt/mount/nginx/logs:/var/log/nginx -v /opt/mount/nginx/conf:/etc/nginx -d nginx

3. Nexus3

  • Nexus3最佳实践系列:搭建Docker私有仓库
  • 利用 Docker sonatype/nexus3 镜像在阿里云(CentOS7)中搭建 Maven私服简介
  • 3.1 获取镜像

docker pull sonatype/nexus3

  • 3.2 创建挂载目录

docker volume create --name nexus3

  • 3.3 运行镜像

docker run -dti --name nexus3 --network dev-ops --network-alias devops-nexus3 --restart=always -p 8081:8081 -v nexus3:/nexus-data sonatype/nexus3

  • 3.4 配置 Nginx
touch nexus3.conf
vim nexus3.conf

server {
    listen       80;
    server_name  你自己的域名或者IP;

    location / {
        proxy_pass   http://devops-nexus3:8081;
        proxy_set_header Host $host;
    }
}
  • 3.5 重启 Nginx
docker restart nginx

Nexus Docker 配置

4. 配置 Nexus Docker

  • https://help.sonatype.com/repomanager3/formats/docker-registry

  • Nexus3最佳实践系列:搭建Docker私有仓库

  • 1.1 配置 Nginx

upstream nexus_docker_get {
    # devops-nexus3 是上面启动 nexus3 配置的 --network-alias;
    # 8082 是配置 Docker Group 仓库配置的端口
    server devops-nexus3:8082;
}

upstream nexus_docker_push {
    # devops-nexus3 是上面启动 nexus3 配置的 --network-alias;
    # 8082 是配置 Docker Hosted 仓库配置的端口
    server devops-nexus3:8083;
}
server {
    listen         80;
    server_name    域名;

    set $upstream "nexus_docker_push";
    if ( $request_method ~* 'GET' ) {
        set $upstream "nexus_docker_get";
    }
    # [解决Nexus Docker仓库搜索镜像返回500错误](https://zhangge.net/5144.html)
    if ( $request_uri ~ '/search' ) {
        # 这是上面文章提到的问题,但是我没有遇到
        # set $upstream "nexus_docker_push";
    }
    location / {
        proxy_pass http://$upstream;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

5. Jenkins

  • 下载镜像

docker pull jenkins/jenkins

  • 创建挂载目录

mkdir -p /opt/mount/jenkins
启动

docker run -itd --name jenkins --network dev-ops --network-alias devops-jenkins --restart=always -p 8080:8080 -p  50000:50000 -v /opt/mount/jenkins:/var/jenkins_home jenkins/jenkins

6. 问题 QA

  • 413 Request Entity Too Large

这是因为我中间使用 Nginx 做了代理,Nginx 对请求的body大小做了限制;需要在 nginx 配置文件 http 节点 下面加入或者修改;

# 该值可以加大点,毕竟 Docker image 动不动 几百兆
client_max_body_size 50M;
  • unauthorized: access to the requested resource is not authorized

通过 docker login 自己的Docker私服域名 登录成功后,推送镜像过程中出现的错误; 解决方式 点击进入;问题就是,我新建一个用于 Docker 仓库的 Docker 账号、角色;给角色设置的权限不对;

以上是使用 Docker Nginx Nexus3 搭建的 Docker 仓库在搭建过程中也是各种搜索、格式参考文档,如果你在搭建过程中遇到问题,欢迎留言交流。

你可能感兴趣的:(Nexus3 Docker 仓库)