使用以下compose配置即可,joxit/docker-registry-ui容器可选择是否部署,仅用来查看已缓存的image
核心配置基本在环境变量以及配置文档内,部署完成以后通过端口转发等暴露到外部网络
Docker运行 docker run --rm --entrypoint htpasswd registry:2.8.2 -Bbn your_username your_password > auth/htpasswd
生成的 htpasswd文件需要放入容器内部的 /auth文件夹内,以供registry引用并启用账密验证
外部执行docker pull之前先通过登录验证 docker login registry.exam.com,账密为上述htpasswd命令执行填入的 your_username和 your_password,通过后就能 docker pull registry.exam.com:49998/hello-world自动通过 http://192.168.9.2:7893拉取镜像
Docker-compose.yaml
version: '3.3'
services:
registry:
image: registry:2.8.2
container_name: registry
restart: unless-stopped
ports:
- 49998:49998
volumes:
- /volume1/docker/registry/auth:/auth
- /volume1/docker/registry:/var/lib/registry
- /volume1/docker/registry/config.yml:/etc/docker/registry/config.yml
environment:
- TZ=Asia/Shanghai
- HTTPS_PROXY=http://192.168.9.2:7893 # 代理服务器, 自行解决
- HTTP_PROXY=http://192.168.9.2:7893 # 代理服务器, 自行解决
- "REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io" # 官方镜像仓库URL
- "REGISTRY_PROXY_USERNAME=docker_hub_user_name" # 官方HUB登录用户名
- "REGISTRY_PROXY_PASSWORD=docker_hub_user_password" # 官方HUB登录密码, 如果开启了2FA则改为Access Token
- REGISTRY_HTTP_ADDR=0.0.0.0:49998 # 监听地址, 后续外部访问时需要带上端口
- REGISTRY_STORAGE_DELETE_ENABLED:true
- "REGISTRY_AUTH=htpasswd" # 使用基本的htpasswd文件校验, 避免被公网滥用
- "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd #
network_mode: bridge
registry-ui:
image: joxit/docker-registry-ui:2
container_name: registry-ui
restart: unless-stopped
ports:
- 49999:80
environment:
- TZ=Asia/Shanghai
- SINGLE_REGISTRY=true
- REGISTRY_TITLE=Docker Registry UI
- DELETE_IMAGES=true
- SHOW_CONTENT_DIGEST=true
- NGINX_PROXY_PASS_URL=http://192.168.9.11:49998
- SHOW_CATALOG_NB_TAGS=true
- CATALOG_MIN_BRANCHES=1
- CATALOG_MAX_BRANCHES=1
- TAGLIST_PAGE_SIZE=100
- REGISTRY_SECURED=true
- CATALOG_ELEMENTS_LIMIT=1000
network_mode: bridge
networks:
bridge:
external: trueconfig.yml
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
delete:
enabled: true
maintenance:
uploadpurging:
enabled: true
age: 168h
dryrun: false
interval: 1m
http:
addr: 49998
headers:
X-Content-Type-Options: [nosniff]
Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']
Access-Control-Expose-Headers: ['Docker-Content-Digest']
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
proxy:
remoteurl: https://registry-1.docker.io
username: docker_hub_user_name # 官方HUB登录用户名
password: docker_hub_user_password # 官方HUB登录密码, 如果开启了2FA则改为Access Token