درک داکر

من چندین ماه است که از Docker برای ساختاردهی فرآیند توسعه/تحویل پروژه های وب استفاده می کنم. ترجمه مقاله مقدماتی در مورد داکر را به خوانندگان خبرخبر پیشنهاد می کنم - "درک داکر".

داکر چیست؟

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

در هسته خود، docker به شما امکان می دهد تقریباً هر برنامه ای را که با خیال راحت در یک کانتینر جدا شده است اجرا کنید. ایزوله امن به شما این امکان را می دهد که چندین کانتینر را به طور همزمان روی یک میزبان اجرا کنید. ماهیت سبک کانتینر که بدون بار اضافی هایپروایزر کار می کند، به شما امکان می دهد از سخت افزار خود بهره بیشتری ببرید.

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

  • بسته بندی برنامه خود (و اجزایی که استفاده می کنید) در ظروف docker؛
  • توزیع و تحویل این ظروف به تیم های شما برای توسعه و آزمایش؛
  • قرار دادن این ظروف در سایت های تولیدی خود، هم در مراکز داده و هم در فضای ابری.

برای چه کاری می توانم از داکر استفاده کنم؟

به سرعت برنامه های خود را منتشر کنید

داکر برای سازماندهی چرخه توسعه عالی است. Docker به توسعه دهندگان اجازه می دهد تا کانتینرهای محلی را با برنامه ها و خدمات اجرا کنند. که متعاقباً به شما امکان می دهد با روند یکپارچه سازی مداوم و گردش کار استقرار یکپارچه شوید.

به عنوان مثال، توسعه دهندگان شما کد را به صورت محلی می نویسند و پشته توسعه خود (مجموعه ای از تصاویر Docker) را با همکاران به اشتراک می گذارند. وقتی آماده شدند، کد و کانتینرها را به محل آزمایش فشار می دهند و هر آزمایش لازم را انجام می دهند. از سایت تست می توانند کد و تصاویر را برای تولید ارسال کنند.

چیدمان و باز کردن آسان تر

پلت فرم مبتنی بر کانتینر بارگیری را آسان می کند. کانتینرهای Docker می توانند بر روی ماشین محلی شما، واقعی یا روی ماشین مجازی در مرکز داده یا در فضای ابری اجرا شوند.

قابل حمل بودن و ماهیت سبک Docker مدیریت پویا حجم کاری شما را آسان می کند. می توانید از docker برای استقرار یا خاموش کردن برنامه یا خدمات خود استفاده کنید. سرعت داکر اجازه می دهد تا این کار را در زمان واقعی انجام دهید.

بارهای بیشتر و بارهای بیشتر

داکر سبک و سریع است. این یک جایگزین انعطاف پذیر و مقرون به صرفه برای ماشین های مجازی مبتنی بر Hypervisor ارائه می دهد. این به ویژه در محیط های پر بار مفید است، به عنوان مثال، هنگام ایجاد ابر یا پلت فرم به عنوان سرویس خود. اما زمانی که می خواهید از منابعی که دارید بهره بیشتری ببرید، برای برنامه های کوچک و متوسط ​​نیز مفید است.

اجزای اصلی Docker

داکر از دو جزء اصلی تشکیل شده است:

  • Docker: یک پلت فرم مجازی سازی منبع باز.
  • داکر هاب: پلتفرم ما به عنوان یک سرویس برای توزیع و مدیریت کانتینرهای داکر.

توجه داشته باشید! Docker تحت مجوز Apache 2.0 توزیع می شود.

معماری داکر

داکر از معماری کلاینت-سرور استفاده می کند. کلاینت داکر با دیمون داکر ارتباط برقرار می کند که مسئولیت ایجاد، اجرا و توزیع کانتینرهای شما را بر عهده می گیرد. هم کلاینت و هم سرور می‌توانند روی یک سیستم اجرا شوند، می‌توانید کلاینت را به یک داکر از راه دور متصل کنید. کلاینت و سرور از طریق سوکت یا RESTful API با هم ارتباط برقرار می کنند.

درک داکر

داکر دیمون

همانطور که در نمودار نشان داده شده است، دیمون روی ماشین میزبان اجرا می شود. کاربر مستقیماً با سرور ارتباط برقرار نمی کند، بلکه از کلاینت برای این کار استفاده می کند.

مشتری داکر

مشتری داکر، برنامه داکر، رابط اصلی داکر است. دستورات را از کاربر دریافت می کند و با داکر دایمون تعامل دارد.

داکر داخل

برای درک اینکه داکر از چه چیزی تشکیل شده است، باید در مورد سه جزء بدانید:

  • تصاویر
  • ثبت
  • ظروف

تصاویر

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

رجیستری

رجیستری Docker تصاویر را ذخیره می کند. ثبت های عمومی و خصوصی وجود دارد که می توانید تصاویر را از آنها دانلود یا آپلود کنید. یک رجیستری داکر عمومی است مرکز داکر. مجموعه عظیمی از تصاویر در آنجا ذخیره شده است. همانطور که می دانید، تصاویر می توانند توسط شما ساخته شوند یا می توانید از تصاویر ایجاد شده توسط دیگران استفاده کنید. رجیستری ها جزء توزیع هستند.

ظروف

کانتینرها شبیه دایرکتوری ها هستند. کانتینرها حاوی همه چیزهایی هستند که برنامه برای اجرا نیاز دارد. هر ظرف از یک تصویر ایجاد می شود. کانتینرها را می توان ایجاد کرد، شروع کرد، متوقف کرد، مهاجرت کرد یا حذف کرد. هر کانتینر ایزوله است و یک پلت فرم امن برای برنامه فراهم می کند. ظروف اجزای کار هستند.

بنابراین Docker چگونه کار می کند؟

تا اینجا می دانیم که:

  • ما می توانیم تصاویری ایجاد کنیم که برنامه های ما در آنها قرار دارند.
  • ما می توانیم از تصاویر برای اجرای برنامه ها کانتینرهایی ایجاد کنیم.
  • ما می توانیم تصاویر را از طریق Docker Hub یا رجیستری تصویر دیگری توزیع کنیم.

بیایید ببینیم که این اجزا چگونه با هم هماهنگ می شوند.

تصویر چگونه کار می کند؟

ما قبلاً می دانیم که یک تصویر یک الگوی فقط خواندنی است که یک ظرف از آن ایجاد می شود. هر تصویر از مجموعه ای از سطوح تشکیل شده است. داکر استفاده می کند سیستم فایل اتحادیه برای ترکیب این سطوح در یک تصویر. سیستم فایل اتحادیه به فایل‌ها و دایرکتوری‌ها از سیستم‌های فایل مختلف (شاخه‌های مختلف) اجازه می‌دهد تا به صورت شفاف با یکدیگر همپوشانی داشته باشند و یک سیستم فایل منسجم ایجاد کنند.

یکی از دلایل سبک بودن داکر این است که از لایه هایی مانند این استفاده می کند. هنگامی که تصویر را تغییر می دهید، مانند به روز رسانی یک برنامه، یک لایه جدید ایجاد می شود. بنابراین، بدون تعویض کل تصویر یا بازسازی آن، همانطور که ممکن است مجبور باشید با یک ماشین مجازی انجام دهید، فقط لایه اضافه یا به روز می شود. و شما مجبور نیستید کل تصویر جدید را توزیع کنید، فقط به روز رسانی توزیع می شود و توزیع تصاویر را آسانتر و سریعتر می کند.

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

توجه داشته باشید! Docker معمولاً تصاویر را از رجیستری Docker Hub می کشد.

تصاویر Docker را می توان از این تصاویر پایه ایجاد کرد؛ ما مراحل ایجاد این تصاویر را دستورالعمل ها فراخوانی می کنیم. هر دستورالعمل یک تصویر یا سطح جدید ایجاد می کند. دستورالعمل ها به شرح زیر خواهد بود:

  • اجرای دستور
  • افزودن یک فایل یا دایرکتوری
  • ایجاد یک متغیر محیطی
  • دستورالعمل هایی در مورد اینکه چه چیزی باید هنگام راه اندازی ظرف این تصویر اجرا شود

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

رجیستری docker چگونه کار می کند؟

رجیستری یک مخزن برای تصاویر داکر است. پس از ایجاد تصویر، می توانید آن را در رجیستری عمومی Docker Hub یا در رجیستری شخصی خود منتشر کنید.

با سرویس گیرنده docker، می توانید تصاویر منتشر شده قبلی را جستجو کنید و آنها را در دستگاه docker خود دانلود کنید تا کانتینرهایی ایجاد کنید.

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

ظرف چگونه کار می کند؟

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

وقتی ظرف روشن می شود چه اتفاقی می افتد؟

یا با استفاده از برنامه docker، یا با استفاده از RESTful API، سرویس گیرنده docker به daemon docker می گوید که ظرف را راه اندازی کند.

$ sudo docker run -i -t ubuntu /bin/bash

بیایید نگاهی به این دستور بیندازیم. کلاینت با استفاده از دستور راه اندازی می شود docker، با گزینه run، که می گوید کانتینر جدید راه اندازی می شود. حداقل الزامات برای اجرای یک کانتینر ویژگی های زیر است:

  • از کدام تصویر برای ایجاد ظرف استفاده کنید. در مورد ما ubuntu
  • دستوری که می خواهید هنگام راه اندازی کانتینر اجرا کنید. در مورد ما /bin/bash

وقتی این دستور را اجرا می کنیم در زیر کاپوت چه اتفاقی می افتد؟

Docker به ترتیب موارد زیر را انجام می دهد:

  • تصویر اوبونتو را دانلود می کند: داکر در دسترس بودن تصویر را بررسی می کند ubuntu در دستگاه محلی، و اگر آنجا نیست، آن را از دانلود کنید مرکز داکر. اگر تصویری وجود داشته باشد، از آن برای ایجاد یک ظرف استفاده می کند.
  • یک ظرف ایجاد می کند: هنگامی که تصویر دریافت می شود، داکر از آن برای ایجاد یک ظرف استفاده می کند.
  • فایل سیستم را مقدار دهی اولیه می کند و سطح فقط خواندنی را نصب می کند: ظرف در سیستم فایل ایجاد می شود و تصویر به سطح فقط خواندنی اضافه می شود.
  • شبکه/پل را مقداردهی اولیه می کند: یک رابط شبکه ایجاد می کند که به داکر اجازه می دهد با ماشین میزبان ارتباط برقرار کند.
  • تنظیم آدرس IP: آدرس را پیدا و تنظیم می کند.
  • فرآیند مشخص شده را شروع می کند: برنامه شما را راه اندازی می کند؛
  • پردازش و تولید خروجی از برنامه شما: ورودی، خروجی و جریان خطای استاندارد برنامه شما را متصل و ثبت می کند تا بتوانید عملکرد برنامه خود را پیگیری کنید.

اکنون یک ظرف کار دارید. شما می توانید ظرف خود را مدیریت کنید، با برنامه خود تعامل داشته باشید. هنگامی که تصمیم به توقف برنامه دارید، ظرف را حذف کنید.

فن آوری های مورد استفاده

Docker در Go نوشته شده است و از برخی ویژگی های هسته لینوکس برای پیاده سازی عملکرد فوق استفاده می کند.

فضاهای نام

داکر از فناوری استفاده می کند namespaces برای سازماندهی فضاهای کاری جدا شده، که ما آنها را کانتینر می نامیم. هنگامی که یک کانتینر را راه اندازی می کنیم، داکر مجموعه ای از فضاهای نام را برای آن کانتینر ایجاد می کند.

این یک لایه ایزوله ایجاد می کند که هر جنبه از کانتینر در فضای نام خود اجرا می شود و به سیستم خارجی دسترسی ندارد.

لیست برخی از فضاهای نامی که داکر استفاده می کند:

  • pid: برای جداسازی فرآیند؛
  • خالص: برای مدیریت رابط های شبکه؛
  • ipc: برای مدیریت منابع IPC (ICP: InterProccess Communication)؛
  • mnt: برای مدیریت نقاط سوار شدن؛
  • utc: برای جداسازی هسته و کنترل تولید نسخه (UTC: Unix timesharing system).

گروه های کنترل

داکر همچنین از فناوری استفاده می کند cgroups یا گروه های کنترل کلید اجرای برنامه به صورت مجزا این است که فقط منابعی را که می خواهید در اختیار برنامه قرار دهید، ارائه دهید. این تضمین می کند که کانتینرها همسایه خوبی خواهند بود. گروه های کنترل به شما امکان می دهند منابع سخت افزاری موجود را به اشتراک بگذارید و در صورت لزوم محدودیت ها و محدودیت ها را تعیین کنید. به عنوان مثال، مقدار حافظه ممکن را برای ظرف محدود کنید.

سیستم فایل اتحادیه

Union File System یا UnionFS یک سیستم فایل است که با ایجاد لایه ها کار می کند و آن را بسیار سبک و سریع می کند. داکر از UnionFS برای ایجاد بلوک هایی که کانتینر از آنها ساخته شده است استفاده می کند. Docker می تواند از چندین نوع UnionFS از جمله: AUFS، btrfs، vfs و DeviceMapper استفاده کند.

قالب های کانتینر

داکر این مولفه ها را در یک لفاف که ما آن را فرمت کانتینر می نامیم ترکیب می کند. فرمت پیش فرض نامیده می شود libcontainer. داکر همچنین از فرمت کانتینر سنتی با استفاده از لینوکس پشتیبانی می کند LXC. در آینده، Docker ممکن است از فرمت های کانتینر دیگر پشتیبانی کند. به عنوان مثال، ادغام با BSD Jails یا Solaris Zones.

منبع: www.habr.com

اضافه کردن نظر