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 را از طریق پنل وب ایجاد نمایید.
منابع :