Docker Registry đĻ â
āĻāĻĒāύāĻžāϰ āύāĻŋāĻā§āϰ āϤā§āϰāĻŋ āĻāϰāĻž āĻĄāĻāĻžāϰ āĻāĻŽā§āĻāĻā§āϞ⧠āύāĻŋāϰāĻžāĻĒāĻĻā§ āϏā§āĻā§āϰ āĻāϰāĻžāϰ āĻāĻŦāĻ āĻŽā§āϝāĻžāύā§āĻ āĻāϰāĻžāϰ āĻāĻžā§āĻāĻžāĻ āĻšāϞ⧠Docker RegistryāĨ¤ āĻĄāĻāĻžāϰ āĻšāĻžāĻŦ (Docker Hub) āĻšāϞ⧠āĻāĻāĻāĻŋ āĻĒāĻžāĻŦāϞāĻŋāĻ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ, āĻāĻŋāύā§āϤ⧠āĻ āύā§āĻ āϏāĻŽā§ āϏāĻŋāĻāĻŋāĻāϰāĻŋāĻāĻŋ āĻŦāĻž āĻĒā§āϰāĻžāĻāĻā§āϏāĻŋ āĻāĻžāϰāĻŖā§ āĻāĻŽāĻžāĻĻā§āϰ āύāĻŋāĻā§āĻĻā§āϰ āĻāĻāĻāĻŋ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āĻĒā§āϰā§ā§āĻāύ āĻšā§āĨ¤
ā§§. āĻĄāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āĻāĻŋ? â
āĻĄāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āĻšāϞ⧠āĻāĻāĻāĻŋ āϏā§āĻā§āϰā§āĻ āĻāĻŦāĻ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻļāύ āϏāĻŋāϏā§āĻā§āĻŽ āϝāĻž āĻĄāĻāĻžāϰ āĻāĻŽā§āĻāĻā§āϞā§āĻā§ āĻšā§āϏā§āĻ āĻāϰā§āĨ¤ āĻāĻĒāύāĻŋ āĻāĻāĻžāύ āĻĨā§āĻā§ āĻāĻŽā§āĻ push āĻŦāĻž pull āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
- Public Registry: āĻĄāĻāĻžāϰ āĻšāĻžāĻŦ (Docker Hub), āĻā§ā§āĻžāĻ (Quay.io)āĨ¤
- Private Registry: āύāĻŋāĻā§āϰ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻšā§āϏā§āĻ āĻāϰāĻž āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āĻŦāĻž āĻā§āϞāĻžāĻāĻĄ āĻĒā§āϰāĻāĻžāĻāĻĄāĻžāϰāĻĻā§āϰ āϏāĻžāϰā§āĻāĻŋāϏ (AWS ECR, Google Artifact Registry)āĨ¤
⧍. āĻĒā§āϰāĻžāĻāĻā§āĻ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āϏā§āĻāĻāĻĒ (Setup) â
āĻĄāĻāĻžāϰ āύāĻŋāĻā§āĻ āĻāĻāĻāĻŋ āĻ
āĻĢāĻŋāϏāĻŋā§āĻžāϞ āĻāĻŽā§āĻ āĻĒā§āϰāĻĻāĻžāύ āĻāϰ⧠āϝāĻžāϰ āύāĻžāĻŽ registry:2āĨ¤ āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻā§āĻŦ āϏāĻšāĻā§āĻ āĻāĻāĻāĻŋ āĻĒā§āϰāĻžāĻāĻā§āĻ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āĻŦāĻžāύāĻžāύ⧠āϝāĻžā§āĨ¤
# āϞā§āĻāĻžāϞ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āϰāĻžāύ āĻāϰāĻž (Port 5000 āĻ)
docker run -d -p 5000:5000 --name my-registry registry:2āĻāĻāύ āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻāĻŽā§āĻāĻāĻŋāĻā§ āĻā§āϝāĻžāĻ āĻāϰ⧠āĻāĻ āϞā§āϝā§āĻāĻžāϞ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋāϤ⧠āĻĒā§āĻļ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ:
docker tag my-image:latest localhost:5000/my-image:latest
docker push localhost:5000/my-image:latestā§Š. āĻ āĻĨā§āύā§āĻāĻŋāĻā§āĻļāύ (Authentication) â
āĻĄāĻŋāĻĢāϞā§āĻāĻāĻžāĻŦā§ āĻĒā§āϰāĻžāĻāĻā§āĻ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āĻā§āύ⧠āĻĒāĻžāϏāĻā§āĻžāϰā§āĻĄ āĻāĻžā§āĻžāĻ āϰāĻžāύ āĻāϰā§, āϝāĻž āϏāĻŋāĻāĻŋāĻāϰ āύā§āĨ¤ āĻāĻĒāύāĻŋ htpasswd āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦā§āϏāĻŋāĻ āĻ āĻĨā§āύā§āĻāĻŋāĻā§āĻļāύ āϝā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
# āĻāĻāĻāĻžāϰ āĻāĻŦāĻ āĻĒāĻžāϏāĻā§āĻžāϰā§āĻĄ āϤā§āϰāĻŋ āĻāϰāĻž
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) â
āϝāĻāύ āĻāĻĒāύāĻŋ āĻ āύā§āĻ āĻāĻŽā§āĻ āĻĄāĻŋāϞāĻŋāĻ āĻāϰā§āύ, āĻĄāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āĻĄāĻŋāϏā§āĻ āĻĨā§āĻā§ āĻĢāĻžāĻāϞāĻā§āϞ⧠āϏāϰāĻžāϏāϰāĻŋ āĻŽā§āĻā§ āĻĢā§āϞ⧠āύāĻžāĨ¤ āĻĄāĻŋāϏā§āĻā§āϰ āĻāĻžā§āĻāĻž āĻāĻžāϞāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āĻāĻžāϰāĻŦā§āĻ āĻāĻžāϞā§āĻāĻļāύ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āϰāĻžāύ āĻāϰāϤ⧠āĻšā§āĨ¤
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 āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύāĨ¤