راه اندازی داکر رجیستری

Nexus Repository Manager یکی از ابزارهای محبوب برای مدیریت و ذخیره‌سازی رجیستری‌های نرم‌افزاری و مخازن مورد نیاز برای توسعه و تست برنامه‌ها است. این ابزار، توسط Sonatype توسعه داده شده و به شما امکان می‌دهد بسته‌های مختلف نرم‌افزاری، مانند Maven، npm، Docker images و غیره را مدیریت کنید.

در این مقاله ما قصد داریم جهت مدیریت و ذخیره سازی ایمیج های داکری از nexus استفاده کنیم.

مراحل نصب:

در این قسمت برای راه اندازی nexus از ایمیج داکری استفاده میکنیم و با دستور زیر ایمیج را دانلود میکنیم:

docker pull sonatype/nexus3

جهت راه اندازی سرویس از docker-compose زیر استفاده نمایید.

version: "3"
services:
  nexus:
    image: sonatype/nexus3
    container_name: nexus
    restart: always
    volumes:
      - "./nexus-data:/nexus-data"
    ports:
      - "8081:8081"
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:8081"]
        interval: 30s
        timeout: 10s
        retries: 5

سرویس مورد نظر بر روی پورت 8081 راه اندازی شد اما برای اینکه بتوانیم به رجستری خود از طریق docker لاگین کنیم نیازمند این هستید که حتما از سرویس nginx برای کنترل و پراکسی کردن کمک بگیرید پس برای سهولت این موضوع از داکر کامپوز زیر استفاده نمایید:

version: "3"
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    hostname: registry.ziroday.ir
    restart: always
    ports:
      - "80:80"
    depends_on:
      - nexus
    volumes:
      - ./config/nginx.conf:/etc/nginx/nginx.conf
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:80"]
        interval: 30s
        timeout: 10s
        retries: 5

اگر قصد داشتید هردو سرویس را باهم ادغام نمایید درحالت کلی docker-compose شما به شکل زیر میباشد:

version: "3"
services:
  nexus:
    image: sonatype/nexus3
    container_name: nexus
    restart: always
    volumes:
      - "./nexus-data:/nexus-data"
    ports:
      - "8081:8081"
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:8081"]
        interval: 30s
        timeout: 10s
        retries: 5

  nginx:
    image: nginx:latest
    container_name: nginx
    hostname: registry.ziroday.ir
    restart: always
    ports:
      - "80:80"
    depends_on:
      - nexus
    volumes:
      - ./config/nginx.conf:/etc/nginx/nginx.conf
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:80"]
        interval: 30s
        timeout: 10s
        retries: 5

فایل کانفیگ سرویس nginx جهت پروکسی کردن به صورت زیر میباشد:

events {
  worker_connections  1024;
}

http {
  
  proxy_send_timeout 120;
  proxy_read_timeout 300;
  proxy_buffering    off;
  keepalive_timeout  5 5;
  tcp_nodelay        on;
  # disable any limits to avoid HTTP 413 for large image uploads
  client_max_body_size 0;


  server {
      listen   *:80;

      location ~ ^/(v1|v2)/[^/]+/?[^/]+/blobs/ {
          if ($request_method ~* (POST|PUT|DELETE|PATCH|HEAD) ) {
              rewrite ^/(.*)$ /repository/docker/$1 last;
          }
          rewrite ^/(.*)$ /repository/docker/$1 last;
      }

      location ~ ^/(v1|v2)/ {
          if ($request_method ~* (POST|PUT|DELETE|PATCH) ) {
              rewrite ^/(.*)$ /repository/docker/$1 last;
          }
          rewrite ^/(.*)$ /repository/docker/$1 last;
      }

      location / {
          proxy_pass http://nexus:8081/;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto "http";
      }
  }
} 

بعد از چند دقیقه سرویس ها شما راه اندازی میشوند و شما میتوانید با تخصیص دادن دامنه به سرویس مورد نظر از سرویس nexus استفاده کنید. برای نمونه من دامنه registry.ziroday.ir را به سرویس nginx بر روی پورت 80 اختصاص دادم.

پس از راه اندازی سرویس جهت لاگین از دستور زیر استفاده میکنیم:

docker exec -it nexus cat /nexus-data/admin.password

جهت لاگین کردن به رجیستری از دستور زیر استفاده میکنم:

docker login registry.ziroday.ir

جهت انتقال ایمیج به رجیستری نیز دستورات زیر را میزنیم:

docker tag nginx:latest registry.ziroday.ir/repository/docker/nginx:latest
docker push registry.ziroday.ir/repository/docker/nginx:latest

لازم به ذکر است قبل از push کردن image به رجیستری حتما ریپازیتوری docker را از طریق پنل وب ایجاد نمایید.

منابع :

https://github.com

https://stackoverflow.com

https://gist.github.com