registry محل نگه‌داری image است و باید هویت endpoint و کاربر را بررسی کند. امشب registry محلی با TLS و رمز آزمایشی می‌سازیم؛ port فقط روی loopback منتشر می‌شود.

این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.

جایگاه در دوره: هدف‌های 352.3 آزمون 305-300.

محیط: docker-a، port 5000 آزاد، image lab305-web:v1. از دورهٔ LPIC-303 یک CA آزمایشگاهی و گواهی server با SAN برابر DNS:localhost و IP:127.0.0.1 آماده کن؛ leaf باید serverAuth داشته باشد. کلید CA وارد container نمی‌شود.

پوشهٔ خصوصی ~/lpic305/registry شامل certs/server.crt، certs/server.key و certs/ca.crt است. certificate chain لازم را در server.crt قرار بده و private key را mode 600 نگه دار. برای credential، فرمان زیر password را تعاملی می‌گیرد:

sudo apt install apache2-utils
mkdir -p "$HOME/lpic305/registry/auth"
chmod 700 "$HOME/lpic305/registry"
htpasswd -B -c "$HOME/lpic305/registry/auth/htpasswd" student
sudo mkdir -p /etc/docker/certs.d/localhost:5000
sudo install -m 644 "$HOME/lpic305/registry/certs/ca.crt" \
  /etc/docker/certs.d/localhost:5000/ca.crt
sudo docker volume create registry305-data
sudo docker run --name registry305 -d \
  -p 127.0.0.1:5000:5000 \
  --mount type=volume,src=registry305-data,dst=/var/lib/registry \
  --mount "type=bind,src=$HOME/lpic305/registry/certs,dst=/certs,readonly" \
  --mount "type=bind,src=$HOME/lpic305/registry/auth,dst=/auth,readonly" \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/server.key \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM=lab305 \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry:3

دستور htpasswd با -c فایل تازه می‌سازد؛ برای افزودن کاربر بعدی آن را حذف کن. digest image registry را نیز ثبت کن.

curl --cacert "$HOME/lpic305/registry/certs/ca.crt" \
  https://localhost:5000/v2/
sudo docker login localhost:5000 --username student
sudo docker tag lab305-web:v1 localhost:5000/lab305-web:v1
sudo docker push localhost:5000/lab305-web:v1
sudo docker pull localhost:5000/lab305-web:v1

درخواست بدون credential باید 401 و endpoint معتبر TLS بدهد؛ login password را تعاملی می‌پرسد. push/pull موفق و digest شاهد مسیر مجاز است. بررسی TLS را با -k یا insecure-registries خاموش نکن.

بازگشت: logout، stop/rm container؛ volume و backup registry مستقل باقی‌اند. حذف volume همهٔ imageهای registry را از بین می‌برد. credential store مناسب و backup داده/تنظیم را برای استفادهٔ مداوم طراحی کن.

منبع: Distribution با TLS و htpasswd ، اعتماد CA در Docker .