registry(docker私有仓库)

buyfakett

registry

私有仓库

docker-compose.yml

version: "3"
services:
  registry:
    image: registry:2.8.3
    container_name: registry
    restart: always
    ports:
      - 5000:5000
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_PATH: /etc/docker/registry/htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
    volumes:
      - ./data/registry:/var/lib/registry
      - ./config:/etc/docker/registry
  registry-web:
    image: klausmeyer/docker-registry-browser
    container_name: registry-web
    ports:
      - 8083:8080
    environment:
      - DOCKER_REGISTRY_URL=https://xxx.top
      - PORT=8080
      - NO_SSL_VERIFICATION=false
      - PUBLIC_REGISTRY_URL=xxx.top
      - TOKEN_AUTH_USER=
      - TOKEN_AUTH_PASSWORD=
      - ENABLE_DELETE_IMAGES=true
      - SECRET_KEY_BASE=xxx

config/config.yaml

version: 0.1
log:
  fields:
  service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

TIP

SECRET_KEY_BASE参数使用openssl rand -hex 64获取

启动好以后,如果没有配过ssl证书,或者ssl证书链不完整(修复地址open in new window),需要在对应的服务器上在/etc/docker/daemon.json中增加"insecure-registries"配置

{
  "insecure-registries": [
      "http://xxx.com"
  ],
  "registry-mirrors": [
    "https://pee6w651.mirror.aliyuncs.com"
  ],
  "data-root": "/data/data-docker",
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "tcp://127.0.0.1:514",
    "tag": "docker/{{.Name}},"
   }
}

TIP

如果不需要密码去掉这三行

    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_PATH: /etc/docker/registry/htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm

TIP

如果有密码,则需要生成密码并配置

yum install -y httpd-tools

htpasswd -c -B -b htpasswd username password

TIP

最后在需要使用的机器上登录docker login xxx.com

代理仓库

registry-proxy.sh

#!/bin/bash

# 海外代理

docker rm -f registry
docker run -d \
--restart=always \
--name registry \
-p 5000:5000 \
-e REGISTRY_HTTP_ADDR=":5000" \
-e REGISTRY_HTTP_HEADERS_X-Content-Type-Options="[nosniff]" \
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
-e REGISTRY_STORAGE_MAINTENANCE="{\"readonly\":{\"enabled\":true},\"uploadpurging\":{\"enabled\":true,\"age\":\"8760h\",\"dryrun\":false,\"interval\":\"24h\"}}" \
-v ./data/registry:/var/lib/registry \
registry:2.8.3

TIP

然后在registry-mirrors中填上域名即可(原来填写镜像的地方)

readonly.enabled:这个选项将 Docker Registry 设置为只读模式。设置为 true 表示启用只读模式,在这种模式下,注册表中的内容不能被修改或删除,只能被读取。

uploadpurging.enabled:这个选项启用上传清理功能。设置为 true 表示启用此功能。

uploadpurging.age:这个选项指定了未完成的上传在被清理之前的最大年龄。8760h 表示 8760 小时,也就是一年。这意味着任何未完成的上传文件如果超过 8760 小时(1 年)将会被清理。

uploadpurging.dryrun:这个选项用于测试清理功能。设置为 false 表示实际执行清理操作,而不是仅进行模拟。

uploadpurging.interval:这个选项指定了执行清理操作的时间间隔。24h 表示每 24 小时执行一次清理操作。

Last Updated 7/7/2024, 12:33:50 PM