برنامه نویسی

Beyond Docker – راهنمای مهندس DevOps برای جایگزین های کانتینر

cicube.io

مقدمه

از زمانی که Docker نحوه بسته بندی و استقرار برنامه ها را تغییر داد، چشم انداز کانتینر کمی تغییر کرده است. در حالی که Docker هنوز یکی از پرکاربردترین گزینه‌های امروزی است، برخی از جایگزین‌های قانع‌کننده ارزش در نظر گرفتن را دارند که ممکن است بهتر با نیازهای شما مطابقت داشته باشند. اجازه دهید سفرم را برای کشف این جایگزین ها و آنچه در این راه آموخته ام به اشتراک بگذارم.

تکامل زمان اجرا کانتینر

جدول زمانی
عنوان تکامل فناوری کانتینر
2013: انتشار داکر
: Unified Container Toolchain
: رجیستری داخلی و CLI
2015: تشکیل OCI
: مشخصات تصویر
: استانداردهای زمان اجرا
2016: ظرف
: Kubernetes Runtime
: تمرکز بر عملکرد
2017 : BuildKit
: ساخت های همزمان
: پشتیبانی از چند پلتفرم
2018: Undertaker 1.0
: طراحی بدون دیمون
: ظروف بدون ریشه
2020: عصر مدرن
: گزینه های دسکتاپ
: پشتیبانی چند زمانه
} />

زمانی که Docker برای اولین بار وارد این دنیا شد، این فناوری بود که قادر بود توابع ایجاد کانتینر و مدیریت با زمان اجرا را در یک ابزار جمع آوری کند. این تا حدودی انقلابی بود، اما با گذشت زمان، همانطور که استفاده از کانتینرها به بلوغ رسید، آشکار شد که تیم‌ها به ابزارهای خاصی برای جنبه‌های خاص در کانتینرسازی نیاز دارند، و این همان چیزی است که منجر به تخصصی‌سازی جایگزین شد.

آشنایی با استانداردهای کانتینر

اکوسیستم کانتینری مبتنی بر استانداردهای باز است – به ویژه استانداردهای [Open Container Initiative (OCI)]. که استاندارد می کند:

نمودار TD
الف[OCI Standards] –> B[Image Format]A –> C[Runtime Spec]الف –> د[Distribution Spec]B –> E[How images are structured]C –> F[How containers are executed]D –> G[How images are distributed]

این استانداردسازی به این معنی است که شما در هیچ ابزار خاصی قفل نشده اید. می توانید تصاویر خود را در یک ابزار بسازید و در ابزاری دیگر اجرا کنید. این به شما این امکان را می دهد که از بهترین ابزار برای انجام یک کار خاص استفاده کنید.

Podman: The Daemon-free Alternative

در شدت کار به عنوان یک مهندس DevOps با کانتینر، Podman را به عنوان یک تغییر دهنده بازی در تیم‌هایی که جنبه امنیتی را جدی می‌گیرند، یافتم – این به معنای اجتناب از امتیازات ریشه است. در مقایسه با Docker که یک تغییر بزرگ در معماری است، بدون دیمون است. رویکرد بدون دیمون به طرز جادویی نحوه امنیت کانتینر را در محیط های تولیدی توسط تیم ها تغییر می دهد.

امنیت از طریق طراحی

اولین باری که برای یک مشتری آگاه به امنیت به Podman تغییر مکان دادم، این معماری بدون دیمون کاملاً منطقی بود. هر کانتینر با مجوزهای کاربر شما اجرا می شود – نه به عنوان یک دیمون ممتاز:

Running a container as your user
podman run nginx   # No root, no daemon

# Even rootless containers can bind to privileged ports
podman run -p 80:80 nginx   # Works without root!
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تجربه مشابه Kubernetes در دسک تاپ

اما چیزی که واقعاً شگفت‌انگیز بود، پشتیبانی از pod-native در Podman بود. این اجازه می دهد تا مفاهیم مشابه Kubernetes را در یک سیستم محلی امتحان کنید:

# Create a pod with multi containers
podman pod create --name my-app 
podman run --pod my-app -d nginx
podman run --pod my-app -d redis
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

containerd: Kubernetes Runtime

با بهره برداری از خوشه های بزرگ Kubernetes، فرد یاد می گیرد که رویکرد متمرکز کانتینر را دوست داشته باشد. یک زمان اجرا کانتینر سبک و با کارایی بالا، بسیاری از پلتفرم‌های کانتینر از جمله Kubernetes را به طور غیرمستقیم تامین می‌کند. طبق تجربه من، Containerd واقعاً یک کار را انجام می دهد و آن را به خوبی انجام می دهد: کانتینرها را به طور موثر اجرا می کند.

ساختمان پلت فرم

این تمرکز کانتینر هنگام نگاه کردن به ساخت سکوهای کانتینری می درخشد:

// Simple integration with containerd
client, err := containerd.New("/run/containerd/containerd.sock")
container, err := client.NewContainer(ctx, "nginx",
containerd.WithNewSnapshot("nginx", image),
containerd.WithNewSpec(oci.WithImageConfig(image))
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

BuildKit: Reimagining Container Building

به یاد دارم زمانی که ساخت کانتینر کند بود و واقعاً کارآمد نبود و معمولاً گلوگاه خطوط لوله CI/CD ما بود. تا زمانی که BuildKit را کشف کردم و زندگی من تغییر کرد. BuildKit نسل بعدی موتور سازنده Docker است، اما می‌توان از آن به‌طور مستقل نیز استفاده کرد.

ساخت های همزمان و کارآمد

بهترین چیز در مورد BuildKit این است که مراحل ساخت را موازی می کند:

Dockerfile
# These stages build concurrently
FROM golang:1.21 AS backend
COPY backend. 
RUN go build

FROM node:18 AS frontend
COPY frontend. 
RUN npm build

FROM alpine 
COPY --from=backend /app/backend.  
COPY --from=frontend /app/dist ./dist
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

LXC/LXD: ظروف سیستم

کار با برنامه‌های قدیمی که نیاز به دسترسی کامل به سیستم داشتند به من آموخت که راه دیگری برای انجام کانتینری‌سازی استفاده از LXC/LXD است. تمرکز در کانتینرهای سیستم، به جای کانتینرهای کاربردی، می تواند مانند یک ماشین مجازی سبک در نظر گرفته شود تا آنچه که اکثراً کانتینر معمولی را در نظر می گیرند.

محیط های توسعه

LXD در محیط های توسعه ایزوله عالی عمل می کند:

# Create a full Ubuntu environment
lxc launch ubuntu:20.04 dev-env
lxc exec dev-env -- sudo apt install python3

# Share your project folder
lxc config device add dev-env code disk source=/path/to/code path=/code
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


نظارت بر گردش‌های کاری GitHub Actions

CICube یک ابزار نظارت بر GitHub Actions است که برای بهینه‌سازی بیشتر خط لوله CI/CD خود، بینش‌های دقیقی را در مورد گردش کارتان در اختیار شما قرار می‌دهد. با CICube، می‌توانید گردش کار خود را ردیابی کنید، گلوگاه‌ها را درک کنید و بهترین‌ها را از زمان‌های ساخت خود به دست آورید. اکنون به cicube.io بروید و یک حساب کاربری رایگان ایجاد کنید تا گردش کار GitHub Actions خود را بهتر بهینه کنید!

نظارت بر مدت زمان گردش کار اقدامات GitHub CIcube

نتیجه گیری

در طول سفر من در کاوش جایگزین‌های Docker، آموخته شد که اکوسیستم کانتینر بیشتر با انتخاب ابزار مناسب برای نیازهای شما در مقابل یافتن یک جایگزین عالی کار می‌کند. رویکرد بدون ریشه Podman امنیت را بدون فداکاری به ارمغان می‌آورد، سادگی Containerd خود را کاملاً در محیط‌های Kubernetes قرار می‌دهد، BuildKit نحوه ساخت تصاویر را تغییر می‌دهد، و LXC/LXD یک برداشت منحصر به فرد از کانتینری‌سازی سیستم ارائه می‌دهد.

نکته جالب در مورد ابزارهای کانتینر مدرن در نحوه عملکرد آنهاست: می‌توانید با BuildKit ساخت‌های کارآمد داشته باشید، آنها را با Podman در حال توسعه اجرا کنید و در Containerd در مرحله تولید مستقر شوید. این انعطاف‌پذیری که توسط استانداردهای OCI فعال می‌شود، به ما اجازه می‌دهد تا به جای تطبیق نیازهای خود با یک ابزار واحد، جریان‌های کاری را ایجاد کنیم که واقعاً متناسب با نیازهای ما باشد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا