اگر میخواهید درباره DevOps بیشتر بدانید و یک استک DevOps موثر بسازید، چندین راهحل کانتینری معمولاً در استکهای DevOps تولیدی یافت میشوند. من روی استقرار کانتینرهای DevOps در تست های ساده خود کار کرده ام که به من امکان می دهد از زیرساخت به عنوان کد برای پروژه های واقعاً جالب استفاده کنم. بیایید 10 کانتینر DevOps برتر را در نظر بگیریم که به عنوان بلوک های سازنده کانتینر برای DevOps مدرن عمل می کنند، اینها چیستند و چگونه استفاده می شوند. به خاطر داشته باشید که این لیست به سادگی افکار من در اینجا است. با این حال، ابتدا بهتر است بفهمیم DevOps دقیقا چیست.
DevOps چیست؟
DevOps اصطلاحی است که در چند سال گذشته به وجود آمده است و فرآیندهای توسعه و عملیات را ترکیب می کند. این فرآیندی است که تیمهای توسعه نرمافزار و عملیات فناوری اطلاعات را خودکار و یکپارچه میکند. این کمک می کند تا چرخه توسعه در هنگام ارائه ویژگی ها، اصلاحات و به روز رسانی ها به شدت کوتاه شود و اجازه می دهد این موارد به طور مکرر منتشر شوند.
همکاری
ماهیت DevOps در همکاری نهفته است. تیمهای DevOps از نزدیک با تیمهای توسعه و زیرساخت کار میکنند (این تیمها ممکن است در برخی سازمانها یکسان باشند). این همکاری منجر به فرآیندهای کاری کارآمدتر و قابل اعتمادتر می شود که منجر به توسعه و استقرار سریعتر نرم افزار می شود.
چرا کانتینر ها مهم هستند
کانتینرها یکی از فناوری های مرکزی هستند که DevOps بر روی آن ساخته شده است. کانتینرها یک برنامه کاربردی و وابستگیهای آن، فایلهای پیکربندی و غیره را در یک بسته اجرایی واحد محصور میکنند، و یکپارچگی را در محیطهای متعدد، از لپتاپ توسعهدهنده تا محیط آزمایشی و در نهایت تا تولید، امکانپذیر میسازند. کانتینرها همچنین به عنوان واحدهای کوچک و قابل حملی از نرمافزار شناخته میشوند که به توسعهدهندگان و مدیران سیستم امکان میدهند برنامهها را به راحتی در محیطهای مختلف اجرا کنند.
این اطمینان حاصل می کند که برنامه ها بدون توجه به جایی که مستقر شده اند یکسان اجرا می شوند. به جای اینکه تصاویر کامل سیستم عامل مانند نصب شده در ماشین مجازی باشند، تصاویر برنامه هستند.
کانتینرها بسیار سریعتر و کوچکتر از ماشینهای مجازی یکپارچه مستقر می شوند. VM ها به دلیل ردپای ماشین های مجازی در مقابل کانتینرها به اندازه کانتینرها برای خط لوله CI/CD سازگار نیستند.
تعامل سیستم عامل
برنامه های کانتینری بر روی یک سیستم عامل، اغلب در ماشین های مجازی اجرا می شوند. هسته سیستم عامل به چندین کانتینر اجازه می دهد تا در حین اجرای فرآیندهای ایزوله، یک سیستم عامل را به اشتراک بگذارند.
این از استقرار چندین کانتینر در یک دستگاه پشتیبانی می کند در حالی که کانتینرها نرم افزار را از محیط خود جدا می کنند تا اطمینان حاصل شود که در محیط های مختلف کار می کند.
در مورد Kubernetes چطور؟
این مقاله بیشتر بر روی کانتینرهای Docker تمرکز خواهد کرد. با این حال، Kubernetes استاندارد بالفعل در مدیریت و سازماندهی برنامه های کاربردی کانتینری در یک محیط DevOps است. Kubernetes به حل بسیاری از چالش ها در هنگام اجرای چندین کانتینر در مقیاس در سازمان کمک می کند.
یک ارکستراتور کانتینر، کانتینرها را در غلاف ها سازماندهی می کند، هر کدام یک برنامه کاربردی را اجرا می کنند که فرآیندهای تحویل و یکپارچه سازی مداوم (CI/CD) را تقویت می کند.
دارای ویژگیهایی مانند متعادلسازی بار خودکار، مکانیسمهای خود ترمیمکننده و بازگشت به عقب است که به تیمهای DevOps اجازه میدهد تا در عین استفاده از منابع کمتر، برنامههای خود را به طور مؤثرتری مدیریت و نظارت کنند. این ادغام با کانتینرها و گردش کار خودکار آن، Kubernetes را به ابزاری عالی در استک DevOps تبدیل میکند.
لیست کانتینر های DevOps برتر
حالا، روی کانتینر! بیایید موارد زیر را در نظر بگیریم:
1.Gitlab
2.Jenkins
3.Harbor
4.Hashicorp Vault
5.ArgoCD
6.Sonarqube
7.Prometheus
8.Grafana
9.Traefik
10.Nginx Proxy Manage
1. GitLab: مرکز توسعه مشارکتی
GitLab یک مخزن کد با قابلیت های بسیاری ارائه می دهد. همچنین یک پلت فرم کامل برای DevOps کانتینری است که برای استقرار کانتینرها و همکاری بین تیم های DevOps استفاده می شود. من ترجیح می دهم از Gitlab در محیط آزمایشگاه خانگی خود و محیط های تولیدی که با آن کار کرده ام استفاده کنم، زیرا بسیار شهودی است و سرعت گرفتن سریع آن آسان است.
امکانات
CI/CD یکپارچه برای استقرار سریع کانتینر
ابزارهای همکاری ضروری را برای تیم های DevOps فراهم می کند
ادغام Kubernetes از ارکستراسیون کانتینر صاف پشتیبانی می کند
کد داکر:
gitlab:
image: gitlab/gitlab-ee:latest
hostname: 'gitlab.mydomain.com'
restart: always
volumes:
- '~/homelabservices/gitlab/data:/var/opt/gitlab'
- '~/homelabservices/gitlab/config:/etc/gitlab'
- '~/homelabservices/gitlab/logs:/var/log/gitlab'
container_name: gitlab
2. Jenkins: Continuous Integration Powerhouse
جنکینز یک راه حل CI/CD بسیار قابل اعتماد در میان کانتینرهای DevOps است که در یکپارچه سازی مداوم و ساخت کانتینر تخصص دارد. این دارای تعداد زیادی افزونه و ادغام است که عملکرد آن را گسترش می دهد و توسط بسیاری از سازمان ها در سراسر جهان استفاده می شود. همچنین برای بسیاری در آزمایشگاه خانگی مورد علاقه است.
امکانات
ساخت و آزمایش خودکار برای برنامه های کاربردی کانتینری
ادغام مداوم در یک محیط کانتینری را تسهیل می کند
از چندین کانتینر با اکوسیستم پلاگین گسترده پشتیبانی می کند
کد داکر:
version: '3.8'
services:
jenkins:
image: jenkins/jenkins:lts
privileged: true
user: root
ports:
- 8080:8080
- 50000:50000
container_name: jenkins
volumes:
- /home/jenkins_compose/jenkins_configuration:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
3. Harbor : ثبت کانتینر امن
Harbor یک رجیستری کانتینر ایمن است که برای مدیریت و ایمن سازی تصاویر کانتینر حیاتی است. در حالی که قطعاً میتوانید از Docker Hub استفاده کنید که در آن یک مخزن خصوصی رایگان و سپس چندین مخزن عمومی دریافت میکنید، میتوانید رجیستری بندر را در یک ظرف Docker، نصب لینوکس یا در Kubernetes میزبانی کنید. این به شما امکان می دهد کد خود را محلی نگه دارید.
امکانات
کنترل دسترسی مبتنی بر نقش را برای تصاویر کانتینر پیاده سازی می کند
تکرار تصویر مبتنی بر policy
تصاویر کانتینر را از نظر آسیب پذیری اسکن می کند
curl -LO https://raw.githubusercontent.com/bitnami/containers/main/bitnami/harbor-portal/docker-compose.yml
curl -L https://github.com/bitnami/containers/archive/main.tar.gz | tar xz --strip=2 containers-main/bitnami/harbor-portal && cp -RL harbor-portal/config . && rm -rf harbor-portal
docker-compose up
4. Hashicorp Vault: Secrets Guardian
Hashicorp Vault یک کانتینر DevOps محوری برای مدیریت اسرار در یک محیط کانتینر است. این یک راه عالی برای ذخیره اسرار نامیده شده در کد DevOps است، بنابراین رمزهای عبور، نشانه ها و سایر اطلاعات حساس نیازی به کدگذاری سخت در خطوط لوله، فایل های پیکربندی، مانیفست ها و غیره شما ندارند.
امکانات
اسرار پویا را برای کانتینر ایجاد می کند
داده ها را برای کانتینرهای در حال حمل و نقل و در حالت استراحت رمزگذاری می کند
دسترسی موقت به اسرار را فراهم می کند
version: '3.6'
services:
vault:
image: vault:latest
container_name: vault
restart: on-failure:10
ports:
- "8201:8201"
environment:
VAULT_ADDR: 'https://0.0.0.0:8201'
cap_add:
- IPC_LOCK
volumes:
- vault-volume:/data
healthcheck:
retries: 5
command: ./workflow-vault.sh
networks:
- sk_cloud
5. ArgoCD: Kubernetes Deployment Maestro
ArgoCD، استاد استقرار، تضمین میکند که برنامههای کاربردی در محیطهای Kubernetes به طور مداوم و پیوسته در چندین محیط مستقر میشوند.
امکانات
استقرارهای اعلامی ثبات را تضمین می کند
مکانیسم های همگام سازی حالت های کاربردی را حفظ می کنند
ابزارهای تجسم، خوشه های کانتینر را نظارت می کنند
version: '2'
services:
argo-cd:
image: docker.io/bitnami/argo-cd:2
6. SonarQube: کد کیفیت مانیتور
SonarQube کیفیت بالای کد را در کانتینرها، شناسایی و رفع اشکالات و آسیبپذیریها در کد برنامههای مستقر در کانتینرها تضمین میکند.
امکانات
بررسی مداوم کیفیت کد
بررسی کد خودکار
از ادغام با خطوط لوله مختلف CI/CD پشتیبانی می کند
کد داکر:
version: "3"
services:
sonarqube:
image: sonarqube:community
hostname: sonarqube
container_name: sonarqube
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000"
db:
image: postgres:13
hostname: postgresql
container_name: postgresql
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
7. پرومتئوس: نگهبان کانتینرها
Prometheus یک ابزار نظارت بر سیستم است که برای مشاهده چندین کانتینر، اطمینان از قابل مشاهده بودن و تحت کنترل بودن عملکرد و وضعیت آنها بسیار ارزشمند است.
امکانات
مدل سازی داده های چند بعدی
گره ها به طور مستقل همه کانتینرها را نظارت می کنند
سیستم های هشدار کارآمد وجود دارد
version: '3.8'
volumes:
prometheus_data: {}
grafana_data: {}
services:
prometheus:
image: prom/prometheus
restart: always
volumes:
- ./prometheus:/etc/prometheus/
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
ports:
- 9090:9090
8. Grafana: کارشناس تجسم داده ها
Grafana به تجسم و تجزیه و تحلیل داده ها در کانتینرها، پشتیبانی از منابع داده های متنوع و افزونه های تجسم کمک می کند. شما می توانید از Grafana برای ترسیم نمودار و ایجاد داشبوردهای زیبا برای تقریباً هر چیزی استفاده کنید.
امکانات
داشبوردهای قابل تنظیم برای کانتینر مختلف
پلاگین های پانل متنوع برای تجسم داده های متنوع
ویژگی های هشدار برای شناسایی پیشگیرانه مسائل
کد داکر:
version: "3.8"
services:
grafana:
image: grafana/grafana-enterprise
container_name: grafana
restart: unless-stopped
ports:
- '3000:3000'
9. Traefik: مسیریاب ترافیک
Traefik به طور موثر بار را در چندین کانتینر متعادل می کند، و کشف خودکار سرویس و میان افزار را برای اصلاح درخواست ها و پاسخ ها ارائه می دهد. همچنین میتواند گواهیهای SSL را برای کانتینرهای شما مدیریت کند و میتوانید از آن برای خودکارسازی گواهیها و تمدیدهای Let’s Encrypt خود استفاده کنید.
امکانات
کشف سرویس خودکار در محیط های کانتینر
Middleware از تغییرات پویا درخواست ها و پاسخ ها پشتیبانی می کند
داشبورد واضح و شهودی برای نظارت
کد داکر:
version: '3.3'
services:
traefik2:
image: traefik:latest
restart: always
command:
- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
ports:
- 80:80
- 443:443
networks:
- traefik
volumes:
- /var/run/docker.sock:/var/run/docker.sock
container_name: traefik
10. Nginx Proxy Manager: Proxy Master
Nginx Proxy Manager مدیریت هاست های پروکسی را در کانتینرها ساده می کند و مدیریت آسان پروتکل های HTTP و HTTPS را تسهیل می کند. همچنین میتواند گواهیهای Let’s Encrypt را مدیریت کرده و تمدید گواهیهای شما را مدیریت کند.
امکانات
مدیریت پراکسی ساده در کانتینرها
از هر دو پروتکل HTTP و HTTPS پشتیبانی می کند
پشتیبانی از SSL را برای اتصالات امن ارائه می دهد
کد داکر:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
networks:
- nginxproxy
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
environment:
# Mysql/Maria connection parameters:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: 'jc21/mariadb-aria:latest'
restart: always
networks:
- nginxproxy
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./mysql:/var/lib/mysql
نتیجه
دنیای DevOps بر اساس فناوریهای کانتینری ساخته شده است. چندین کانتینر عالی DevOps ویژگی ها و عملکردهای ضروری را برای استک DevOps ارائه می دهند. مهندسان DevOps میتوانند از این راهحلهای کانتینری با هم استفاده کنند تا خطوط لوله CI/CD کارآمد، کدهای سادهتر و چرخههای عمر توسعه تهاجمیتر داشته باشند.