1-1- چرا docker-registry نصب کنیم؟
یک منبع (repository) برای ایمیج های داکری است.
وقتی شما به صورت local اقدام به راه اندازی docker-registry کنید، مشکل تحریم ها و لاگین در docker Hub را نخواهید داشت. همچنین ترافیک کمتری برای دریافت image ها مصرف خواهید کرد و هربار برای دانلود از اینترنت استفاده نخواهید کرد.
2-1- نصب docker
برای نصب docker در ubuntu (توزیع Debian) دستورات زیر را بزنید
sudo apt update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -fSsL https://download.docker.com/linux/ubuntu/gpg| sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu$(lsb_release -cs) stable" sudo apt-get update sudo apt-cache policy docker-ce sudo apt-get install -y docker-ce
2-2- نصب git
برای دریافت پروژه از پیش طراحی شده از گیت استفاده می کنیم.
برای نصب git در ubuntu (توزیع Debian) دستور زیر را بزنید
sudo apt-get install -y git
*حالا شما باید از بین شماره های 3 و 4، یکی از روش ها را برای نصب انتخاب کنید*
3-1- نصب Authentication Container
3-1-1- یک دایرکتوری برای ذخیره پسوردها بسازید
sudo mkdir auth
3-1-2- دستور زیر را برای ساخت کانتینر بزنید (می توانید Username و Password مورد نظر را جایگزین کنید)
docker run --entrypoint htpasswd httpd:2 -Bbn testuser testpassword > auth/htpasswd
3-2- نصب Registry Container
3-2-1- برای ساخت کانتینر registry کامند زیر را بزنید (environment variable ها به دلیل احراز هویت است)
docker run -d -p 5000:5000 --name registry --restart=always --network registry-net --restart always -v "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" -v /images/registry:/var/lib/registry registry:2
*-p برای اتصال پورت هاست و کانتینر
*-v برای mount یک دایرکتوری به کانتینر
*- e برای شناساندن متغییرهای محیطی به کانتینر
3-2-2- مراحل دریافت image از docker-hub و ارسال به Docker-registry خودتان
sudo docker pull hello-world ##pull image frome Docker-Hub sudo docker tag hello-world localhost:5000/myhello ##tag image sudo docker push localhost:5000/myhello ##push image to docker-registry
3-2-3- برای ارتباط با داکر رجیستری (ارتباط سیستم ها با Docker-registry)
- برای اینکه سیستم های دیگر بتوانند از Docker-registry شما استفاده کنند، باید یک فایل .json در سمت سرور docker-registry، ایجاد شود
در مسیر زیر
/etc/docker/daemon.json ##for Docker-registry server
محتویات زیر را درون فایل ایجاد شده کپی کنید
{ "allow-nondistributable-artifacts": ["localhost:5000"] }
- همچنین باید در سیستم هایی که میخواهند image دریافت کنند نیز یک فایل .json ایجاد شود
- متناسب با سیستم عامل در یکی از مسیر های زیر
C:\ProgramData\docker\config\daem.json ##for windows
/etc/docker/daemon.json ##for linux
- محتویات زیر را درون فایل ایجاد شده کپی کنید (IP سرور Docker-registry را جایگزین کنید)
{ "allow-nondistributable-artifacts": ["$ip-address:5000"] }
3-3- نصب UI Container
برای ساخت کانتینر و همچنین استفاده از username و password های ساخته، دستور زیر را وارد کنید
docker run -d --name registry_ui --network registry-net -p 8081:80 --restart always -e "REGISTRY_TITLE=Private Docker Registry" -e "NGINX_PROXY_PASS_URL=http://registry-srv:5000" -e "DELETE_IMAGES=true" -e "SINGLE_REGISTRY=true" joxit/docker-registry-ui:latest
3-4- میتوانید با مراجعه به آدرس زیر نتیجه کار خود را ببینید:
http://[ip-address]:8081
4-1- برای نصب از این روش ابتدا docker-compose را نصب کنید
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
4-2- برای ایجاد permision، دستور زیر را بزنید
sudo chmod +x /usr/local/bin/docker-compose
4-3- برای authentication Container
sudo mkdir auth
docker run --entrypoint htpasswd httpd:2 -Bbn testuser testpassword > auth/htpasswd
4-4- یک فایل .yml ایجاد کنید و برای ویرایش واردش شوید
sudo touch docker-compose.yml
sudo nano docker-compose.yml
4-5- محتویات زیر را داخل فایل ایجاد شده کپی کنید
version: '2' services: registry-srv: image: registry:2 restart: always ports: - 5000:5000 volumes: - /data/registry:/var/lib/registry - /data/auth:/auth - ./config.yml:/etc/docker/registry/config.yml:ro environment: - "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" - "REGISTRY_AUTH=htpasswd" - "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" networks: - registry-net container_name: registry-srv registry-ui: image: joxit/docker-registry-ui:latest restart: always ports: - 8081:80 environment: - REGISTRY_TITLE=Private Docker Registry - NGINX_PROXY_PASS_URL=http://registry-srv:5000 - DELETE_IMAGES=true - SINGLE_REGISTRY=true networks: - registry-net container_name: registry-ui networks: registry-ui-net: volumes: storage: driver: local
4-5- اجرای Docker-compose
sudo docker-compose up -d
4-6- میتوانید با مراجعه به آدرس زیر نتیجه کار خود را ببینید:
http://[ip-address]:8081
https://hub.docker.com/
https://docs.docker.com/engine/install/ubuntu/
https://github.com/Joxit/docker-registry-ui/blob/1c88ad57f8339f3b9ad27dc46aef6e4769f1de7c/examples/issue-88/docker-compose.yml