老周

日常学习记录,以防忘记。

导航

本地(私有) Docker 镜像仓库搭建和使用

本地(私有) Docker 镜像仓库搭建和使用

有时候测试一些本地项目时,需要在局域网进行 Docker 项目调试,每次拉取代码进行构建也比较麻烦,所以需要一个私有仓库来进行这些项目的调试,故作以下记录。

前提条件

  • 已安装 Docker

安装 registry

registryDocker 官网出的用于管理镜像的工具,可以直接用 docker 拉起,配置简单,适合个人内部测试使用;

  • Synology DSM 7.2.x 为例,在系统中创建一个用于运行 registry 的目录,如:/volume1/docker/registry
  • 然后在 Container Manager 的项目中新增项目,填写名称,选择目录后,选择创建 docker-compose.yml,内容如下
    version: "3.3"
    services:
      registry:
        image: registry:3
        container_name: registry
        restart: always
    
        volumes:
          - ./data:/var/lib/registry  # 数据持久化
          - ./certs:/certs            # TLS证书
          - ./auth:/auth              # 认证文件
        environment:
          REGISTRY_HTTP_ADDR: 0.0.0.0:80
          REGISTRY_HTTP_SECRET: 1234567890
    
        networks:
          default:
            ipv4_address: 192.168.1.45
    
    networks:
      default:
        external:
          name: macvlan-net
    
  • 注:如果是其他版本的 docker compose 可使用以下配置:
    services:
      registry:
        image: registry:2
        container_name: registry
        restart: always
    
        volumes:
          - ./data:/var/lib/registry  # 数据持久化
          - ./certs:/certs            # TLS证书
          - ./auth:/auth              # 认证文件
        environment:
          REGISTRY_HTTP_ADDR: 0.0.0.0:80
        
        networks:
          default:
            ipv4_address: 192.168.1.45
            
    networks:
      default:
        name: macvlan-net
        external: true
    
  • 等待创建完成,需要保持网络畅通;
  • 完成后,可访问 http://192.168.1.45/v2/_catalog 看是否正常,如返回 {} 表示创建成功;
  • 此时默认没有使用 SSL 加密,一般用于内网;

使用仓库

在本地使用私有仓库之前,需要在本地的 Docker 上进行一些配置才可以正常使用;

  • 修改 /etc/docker/daemon.json 文件( Windows 直接在 Settings -> Docker Engine 配置上修改),增加以下内容:
    {
      "insecure-registries" : ["192.168.1.45:80"]
    }
    
  • 注意,一定要加上端口号,否则 Docker 会报错
  • 然后重启 Docker 服务;
  • 使用以下命令测试仓库是否可用:
    # 1. 构建测试镜像
    docker pull nginx:alpine
    docker tag nginx:alpine 192.168.1.45:80/mynginx
    
    # 2. 推送镜像到仓库
    docker push 192.168.1.45:80/mynginx
    
    # 3. 验证
    curl http://192.168.1.45:80/v2/_catalog
    # 应该返回 {"repositories":["mynginx"]}
    
  • 如果没有错误,表示仓库已正常使用;
  • 局域网内的设备都可在 compose.yaml 文件里使用 192.168.1.45:80 作为仓库源来拉取镜像

进阶

更高级的用法可以使用 sonatype/nexus3 ,具体可参考:
https://hub.docker.com/r/sonatype/nexus3/

posted on 2025-04-15 13:42  栽培者  阅读(126)  评论(0)    收藏  举报