4 Setup private docker registry & docker_auth on `data-server`
张泊明518370910136 edited this page 2025-02-24 10:16:18 +08:00

We use focs.ji.sjtu.edu.cn:5000 for our private registry and focs.ji.sjtu.edu.cn:5001 for docker_auth to provide authentication. Port 5000 and 5001 on data-server are forwarded to focs.ji.sjtu.edu.cn and they are only accessible within the campus network.

docker_auth lets login admins have permission to push to the registry, and anyone to pull from it. We need to docker login focs.ji.sjtu.edu.cn on joj-dev since it pushes to the registry from gitea actions.

To run registry:

$ cat /opt/docker-configs/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
  tls:
    certificate: "/certs/live/focs.ji.sjtu.edu.cn/fullchain.pem"
    key: "/certs/live/focs.ji.sjtu.edu.cn/privkey.pem"
auth:
  token:
    realm: "https://focs.ji.sjtu.edu.cn:5001/auth"
    service: "Docker registry"
    issuer: "Acme auth server"
    rootcertbundle: "/certs/live/focs.ji.sjtu.edu.cn/fullchain.pem"
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
$ docker run -d   --restart=always   --name registry -v /etc/letsencrypt/:/certs   -v registry-data:/var/lib/registry -v /opt/docker-configs/registry/config.yml:/etc/docker/registry/config.yml   -p 5000:5000   registry:2.8.3

To run docker_auth:

$ cat /opt/docker-configs/docker_auth/auth_config.yml
# A simple example. See reference.yml for explanation of all options.
#
#  auth:
#    token:
#      realm: "https://127.0.0.1:5001/auth"
#      service: "Docker registry"
#      issuer: "Acme auth server"
#      rootcertbundle: "/path/to/server.pem"

server:
  addr: ":5001"
  certificate: "/certs/live/focs.ji.sjtu.edu.cn/fullchain.pem"
  key: "/certs/live/focs.ji.sjtu.edu.cn/privkey.pem"

token:
  issuer: "Acme auth server"  # Must match issuer in the Registry config.
  expiration: 900

users:
  # Password is specified as a BCrypt hash. Use `htpasswd -nB USERNAME` to generate.
  "admin":
    password: "$2y$12$DD6nNmOff6zIlc0tf6UIOOlU0ignzYpPS9vgaNTqbxfM0k5Ud6s4W"  # check .p file in this dir
  "": {}  # Allow anonymous (no "docker login") access.

acl:
  - match: { account: "admin" }
    actions: ["*"]
    comment: "Admin has full access to everything."
  - match: { account: "" }
    actions: ["pull"]
    comment: "Anonymous users can pull any image."
  # Access is denied by default.
$ docker run -d   --restart=always   --name docker_auth -v /etc/letsencrypt/:/certs -p 5001:5001     -v /opt/docker-configs/docker_auth:/config:ro     -v /var/log/docker_auth:/logs     cesanta/docker_auth:1 --v=2 --alsologtostderr /config/auth_config.yml