Docker Registry
Distribution implementation for storing and distributing of Docker container images and artifacts.
Configuration
services:
registry:
image: registry:3
restart: unless-stopped
environment:
- USERNAME=${USERNAME}
- PASSWORD=${PASSWORD}
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password
- REGISTRY_HTTP_RELATIVEURLS=true
entrypoint: ["sh", "/entrypoint.sh"]
volumes:
- registry-data:/var/lib/registry
- type: bind
source: ../files/entrypoint.sh
target: /entrypoint.sh
- type: bind
source: ../files/config.yml
target: /etc/docker/registry/config.yml
expose:
- 5000
healthcheck:
test:
- CMD
- wget
- "-q"
- "--spider"
- "http://localhost:5000/"
interval: 5s
timeout: 20s
retries: 10
volumes:
registry-data:[variables]
main_domain = "${domain}"
username = "${username}"
password = "${password:32}"
[[config.domains]]
serviceName = "registry"
port = 5_000
host = "${main_domain}"
[config.env]
USERNAME = "${username}"
PASSWORD = "${password}"
[[config.mounts]]
filePath = "./config.yml"
content = """
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]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
"""
[[config.mounts]]
filePath = "./entrypoint.sh"
content = """
#!/usr/bin/env sh
set -e
if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
echo "Error: USERNAME and PASSWORD environment variables must be set"
exit 1
fi
apk add --no-cache apache2-utils
mkdir -p "$(dirname "$REGISTRY_AUTH_HTPASSWD_PATH")"
chmod 755 "$(dirname "$REGISTRY_AUTH_HTPASSWD_PATH")"
htpasswd -Bbc "$REGISTRY_AUTH_HTPASSWD_PATH" "$USERNAME" "$PASSWORD"
registry serve /etc/docker/registry/config.yml
"""Base64
To import this template in Dokploy: create a Compose service → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogInNlcnZpY2VzOlxuICByZWdpc3RyeTpcbiAgICBpbWFnZTogcmVnaXN0cnk6M1xuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIFVTRVJOQU1FPSR7VVNFUk5BTUV9XG4gICAgICAtIFBBU1NXT1JEPSR7UEFTU1dPUkR9XG4gICAgICAtIFJFR0lTVFJZX0FVVEg9aHRwYXNzd2RcbiAgICAgIC0gUkVHSVNUUllfQVVUSF9IVFBBU1NXRF9SRUFMTT1SZWdpc3RyeSBSZWFsbVxuICAgICAgLSBSRUdJU1RSWV9BVVRIX0hUUEFTU1dEX1BBVEg9L2F1dGgvcmVnaXN0cnkucGFzc3dvcmRcbiAgICAgIC0gUkVHSVNUUllfSFRUUF9SRUxBVElWRVVSTFM9dHJ1ZVxuICAgIGVudHJ5cG9pbnQ6IFtcInNoXCIsIFwiL2VudHJ5cG9pbnQuc2hcIl1cbiAgICB2b2x1bWVzOlxuICAgICAgLSByZWdpc3RyeS1kYXRhOi92YXIvbGliL3JlZ2lzdHJ5XG4gICAgICAtIHR5cGU6IGJpbmRcbiAgICAgICAgc291cmNlOiAuLi9maWxlcy9lbnRyeXBvaW50LnNoXG4gICAgICAgIHRhcmdldDogL2VudHJ5cG9pbnQuc2hcbiAgICAgIC0gdHlwZTogYmluZFxuICAgICAgICBzb3VyY2U6IC4uL2ZpbGVzL2NvbmZpZy55bWxcbiAgICAgICAgdGFyZ2V0OiAvZXRjL2RvY2tlci9yZWdpc3RyeS9jb25maWcueW1sXG4gICAgZXhwb3NlOlxuICAgICAgLSA1MDAwXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICAtIENNRFxuICAgICAgICAtIHdnZXRcbiAgICAgICAgLSBcIi1xXCJcbiAgICAgICAgLSBcIi0tc3BpZGVyXCIgICAgIFxuICAgICAgICAtIFwiaHR0cDovL2xvY2FsaG9zdDo1MDAwL1wiICBcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgdGltZW91dDogMjBzXG4gICAgICByZXRyaWVzOiAxMFxuXG52b2x1bWVzOlxuICByZWdpc3RyeS1kYXRhOlxuIiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbnVzZXJuYW1lID0gXCIke3VzZXJuYW1lfVwiXG5wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJyZWdpc3RyeVwiXG5wb3J0ID0gNV8wMDBcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcblxuW2NvbmZpZy5lbnZdXG5VU0VSTkFNRSA9IFwiJHt1c2VybmFtZX1cIlxuUEFTU1dPUkQgPSBcIiR7cGFzc3dvcmR9XCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIuL2NvbmZpZy55bWxcIlxuY29udGVudCA9IFwiXCJcIlxudmVyc2lvbjogMC4xXG5cbmxvZzpcbiAgZmllbGRzOlxuICAgIHNlcnZpY2U6IHJlZ2lzdHJ5XG5zdG9yYWdlOlxuICBjYWNoZTpcbiAgICBibG9iZGVzY3JpcHRvcjogaW5tZW1vcnlcbiAgZmlsZXN5c3RlbTpcbiAgICByb290ZGlyZWN0b3J5OiAvdmFyL2xpYi9yZWdpc3RyeVxuaHR0cDpcbiAgYWRkcjogOjUwMDBcbiAgaGVhZGVyczpcbiAgICBYLUNvbnRlbnQtVHlwZS1PcHRpb25zOiBbbm9zbmlmZl1cbmhlYWx0aDpcbiAgc3RvcmFnZWRyaXZlcjpcbiAgICBlbmFibGVkOiB0cnVlXG4gICAgaW50ZXJ2YWw6IDEwc1xuICAgIHRocmVzaG9sZDogM1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiLi9lbnRyeXBvaW50LnNoXCJcbmNvbnRlbnQgPSBcIlwiXCJcbiMhL3Vzci9iaW4vZW52IHNoXG5cbnNldCAtZSBcblxuaWYgWyAteiBcIiRVU0VSTkFNRVwiIF0gfHwgWyAteiBcIiRQQVNTV09SRFwiIF07IHRoZW5cbiAgICBlY2hvIFwiRXJyb3I6IFVTRVJOQU1FIGFuZCBQQVNTV09SRCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbXVzdCBiZSBzZXRcIlxuICAgIGV4aXQgMVxuZmlcblxuYXBrIGFkZCAtLW5vLWNhY2hlIGFwYWNoZTItdXRpbHNcbm1rZGlyIC1wIFwiJChkaXJuYW1lIFwiJFJFR0lTVFJZX0FVVEhfSFRQQVNTV0RfUEFUSFwiKVwiXG5jaG1vZCA3NTUgXCIkKGRpcm5hbWUgXCIkUkVHSVNUUllfQVVUSF9IVFBBU1NXRF9QQVRIXCIpXCJcbmh0cGFzc3dkIC1CYmMgXCIkUkVHSVNUUllfQVVUSF9IVFBBU1NXRF9QQVRIXCIgXCIkVVNFUk5BTUVcIiBcIiRQQVNTV09SRFwiXG5yZWdpc3RyeSBzZXJ2ZSAvZXRjL2RvY2tlci9yZWdpc3RyeS9jb25maWcueW1sXG5cIlwiXCJcbiIKfQ==Links
Tags
registry, docker, self-hosted
Version: 2