Skip to content

Docker Registry đŸ“Ļ ​

āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜāϗ⧁āϞ⧋ āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻžāϰ āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāύ⧇āϜ āĻ•āϰāĻžāϰ āϜāĻžā§ŸāĻ—āĻžāχ āĻšāϞ⧋ Docker RegistryāĨ¤ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ (Docker Hub) āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻĒāĻžāĻŦāϞāĻŋāĻ• āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ…āύ⧇āĻ• āϏāĻŽā§Ÿ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻŦāĻž āĻĒā§āϰāĻžāχāϭ⧇āϏāĻŋ āĻ•āĻžāϰāϪ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāĻœā§‡āĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšā§ŸāĨ¤


ā§§. āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻ•āĻŋ? ​

āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻāĻŦāĻ‚ āĻĄāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāĻŦāĻŋāωāĻļāύ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϝāĻž āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜāϗ⧁āϞ⧋āϕ⧇ āĻšā§‹āĻ¸ā§āϟ āĻ•āϰ⧇āĨ¤ āφāĻĒāύāĻŋ āĻāĻ–āĻžāύ āĻĨ⧇āϕ⧇ āχāĻŽā§‡āϜ push āĻŦāĻž pull āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

  • Public Registry: āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ (Docker Hub), āĻ•ā§‹ā§ŸāĻžāχ (Quay.io)āĨ¤
  • Private Registry: āύāĻŋāĻœā§‡āϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻšā§‹āĻ¸ā§āϟ āĻ•āϰāĻž āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŦāĻž āĻ•ā§āϞāĻžāωāĻĄ āĻĒā§āϰāĻ­āĻžāχāĻĄāĻžāϰāĻĻ⧇āϰ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ (AWS ECR, Google Artifact Registry)āĨ¤

⧍. āĻĒā§āϰāĻžāχāϭ⧇āϟ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āϏ⧇āϟāφāĻĒ (Setup) ​

āĻĄāĻ•āĻžāϰ āύāĻŋāĻœā§‡āχ āĻāĻ•āϟāĻŋ āĻ…āĻĢāĻŋāϏāĻŋ⧟āĻžāϞ āχāĻŽā§‡āϜ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇ āϝāĻžāϰ āύāĻžāĻŽ registry:2āĨ¤ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϖ⧁āĻŦ āϏāĻšāĻœā§‡āχ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻžāχāϭ⧇āϟ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŦāĻžāύāĻžāύ⧋ āϝāĻžā§ŸāĨ¤

bash
# āϞ⧋āĻ•āĻžāϞ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āϰāĻžāύ āĻ•āϰāĻž (Port 5000 āĻ)
docker run -d -p 5000:5000 --name my-registry registry:2

āĻāĻ–āύ āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āχāĻŽā§‡āϜāϟāĻŋāϕ⧇ āĻŸā§āϝāĻžāĻ— āĻ•āϰ⧇ āĻāχ āĻ˛ā§āϝ⧋āĻ•āĻžāϞ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āĻĒ⧁āĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ:

bash
docker tag my-image:latest localhost:5000/my-image:latest
docker push localhost:5000/my-image:latest

ā§Š. āĻ…āĻĨ⧇āĻ¨ā§āϟāĻŋāϕ⧇āĻļāύ (Authentication) ​

āĻĄāĻŋāĻĢāĻ˛ā§āϟāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻžāχāϭ⧇āϟ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āϕ⧋āύ⧋ āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻ›āĻžā§œāĻžāχ āϰāĻžāύ āĻ•āϰ⧇, āϝāĻž āϏāĻŋāĻ•āĻŋāωāϰ āύ⧟āĨ¤ āφāĻĒāύāĻŋ htpasswd āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦ⧇āϏāĻŋāĻ• āĻ…āĻĨ⧇āĻ¨ā§āϟāĻŋāϕ⧇āĻļāύ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

bash
# āχāωāϜāĻžāϰ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰāĻž
docker run --entrypoint htpasswd httpd:2.4 -Bbn myuser mypassword > auth/htpasswd

āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āϰāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ āĻāχ āĻĢāĻžāχāϞāϟāĻŋ āĻŽāĻžāωāĻ¨ā§āϟ āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤


ā§Ē. TLS/SSL āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ ​

āĻĒāĻžāĻŦāϞāĻŋāĻ• āύ⧇āϟāĻ“ā§ŸāĻžāĻ°ā§āϕ⧇ āĻŦāĻž āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽā§Ÿ āĻ…āĻŦāĻļā§āϝāχ HTTPS (SSL/TLS) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻ…āĻ¨ā§āϝāĻĨāĻžā§Ÿ āĻĄāĻ•āĻžāϰ āĻ•ā§āĻ˛ā§āϝāĻžā§Ÿā§‡āĻ¨ā§āϟ āχāĻŽā§‡āϜ āĻĒ⧁āĻļ āĻŦāĻž āĻĒ⧁āϞ āĻ•āϰāϤ⧇ āĻŦāĻžāϧāĻž āĻĻ⧇āĻŦ⧇ (Insecure Registry error)āĨ¤

āφāĻĒāύāĻžāϕ⧇ āφāĻĒāύāĻžāϰ āĻĄā§‹āĻŽā§‡āχāύ⧇āϰ āϜāĻ¨ā§āϝ SSL āϏāĻžāĻ°ā§āϟāĻŋāĻĢāĻŋāϕ⧇āϟ (āϝ⧇āĻŽāύ: Let's Encrypt) āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇ āĻŽāĻžāωāĻ¨ā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤


ā§Ģ. āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ (Storage Backends) ​

āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻĄāĻžāϟāĻž āϕ⧋āĻĨāĻžā§Ÿ āϏ⧇āχāĻ­ āĻ•āϰāĻŦ⧇ āϤāĻž āφāĻĒāύāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

  • Filesystem: āϞ⧋āĻ•āĻžāϞ āĻĄāĻŋāĻ¸ā§āϕ⧇ āϏ⧇āχāĻ­ āĻšāĻŦ⧇āĨ¤
  • S3: AWS S3 āĻŦā§āϰāĻžāϕ⧇āĻŸā§‡ āϏ⧇āχāĻ­ āĻšāĻŦ⧇ (āĻ¸ā§āϕ⧇āĻ˛ā§āϝāĻžāĻŦāϞ āĻāĻŦāĻ‚ āύāĻŋāϰāĻžāĻĒāĻĻ)āĨ¤
  • Azure Blob / GCS: āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ•ā§āϞāĻžāωāĻĄ āĻ¸ā§āĻŸā§‹āϰ⧇āĻœā§‡āĻ“ āϏ⧇āχāĻ­ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

ā§Ŧ. āĻ—āĻžāϰāĻŦ⧇āϜ āĻ•āĻžāϞ⧇āĻ•āĻļāύ (Garbage Collection) ​

āϝāĻ–āύ āφāĻĒāύāĻŋ āĻ…āύ⧇āĻ• āχāĻŽā§‡āϜ āĻĄāĻŋāϞāĻŋāϟ āĻ•āϰ⧇āύ, āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻĄāĻŋāĻ¸ā§āĻ• āĻĨ⧇āϕ⧇ āĻĢāĻžāχāϞāϗ⧁āϞ⧋ āϏāϰāĻžāϏāϰāĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧇ āύāĻžāĨ¤ āĻĄāĻŋāĻ¸ā§āϕ⧇āϰ āϜāĻžā§ŸāĻ—āĻž āĻ–āĻžāϞāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϕ⧇ āĻ—āĻžāϰāĻŦ⧇āϜ āĻ•āĻžāϞ⧇āĻ•āĻļāύ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϰāĻžāύ āĻ•āϰāϤ⧇ āĻšā§ŸāĨ¤

bash
docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml

ā§­. Registry API ​

āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻāĻ•āϟāĻŋ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ REST API āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻĒāύāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡āϟāĻŋāĻ•āĻžāϞāĻŋ āχāĻŽā§‡āϜ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻŦāĻž āĻĢāĻžāχāϞ āĻĄāĻŋāϞāĻŋāϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

  • GET /v2/_catalog - āϏāĻŦ āχāĻŽā§‡āĻœā§‡āϰ āϞāĻŋāĻ¸ā§āϟ āĻĻ⧇āĻ–āϤ⧇āĨ¤
  • GET /v2/<name>/tags/list - āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āχāĻŽā§‡āĻœā§‡āϰ āĻŸā§āϝāĻžāĻ— āĻĻ⧇āĻ–āϤ⧇āĨ¤

āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ (Summary) ​

āĻĒā§āϰāĻžāχāϭ⧇āϟ āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻŦ⧜ āϟāĻŋāĻŽā§‡āϰ āϜāĻ¨ā§āϝ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ•āĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϰ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āϕ⧋āĻĄ āĻāĻŦāĻ‚ āχāĻŽā§‡āϜāϕ⧇ āύāĻŋāĻœā§‡āĻĻ⧇āϰ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāϪ⧇ āϰāĻžāϖ⧇ āĻāĻŦāĻ‚ āύ⧇āϟāĻ“ā§ŸāĻžāĻ°ā§āĻ• āĻ•āĻ¸ā§āϟ āĻ•āĻŽāĻžā§ŸāĨ¤


IMPORTANT

āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āĻĒā§āϰāĻžāχāϭ⧇āϟ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϏāĻŽā§Ÿ āĻ…āĻŦāĻļā§āϝāχ āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āĻĒā§āϰāĻ•ā§āϏāĻŋ (āϝ⧇āĻŽāύ: Nginx) āĻāĻŦāĻ‚ SSL āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύāĨ¤

Released under the MIT License.