داکر: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
Seinam (بحث | مشارکت‌ها)
جز اضافه شدن Docker Hub
Mjdtjm (بحث | مشارکت‌ها)
اصلاحات نوشتاری و خواناتر کردن متن
خط ۲۰:
می‌توان گفت که داکر به توسعه‌دهندگان این اطمینان را می‌دهد که می‌توانند اپلیکیشن خود را بدون نگرانی از سیستم‌های میزبان برنامه خود در مرحله توسعه و تست و بر روی سیستم‌های مختلف، بدون هیچ‌گونه اشکال و به صورت کاملاً مشابه اجرا کنند و مشکلی از بابت تغییر سیستم‌عامل‌های اجراکننده برنامه خود نخواهند داشت.
 
داکر تا حدی شبیه به ماشین مجازی (Virtual Machine) است با این تفاوت که در ماشین مجازی، قسمتی از سخت‌افزار سیستم به ماشین مجازی اختصاص داده می‌شود و روی آن یک سیستم‌عامل کامل نظیر ویندوز یا اوبونتولینوکس نصب می‌شود. در واقع می‌توان گفت در ماشین مجازی امکانات سخت‌افزاری سیستم تقسیم می‌شود و بر روی هر قسمت، سیستم‌عامل بخصوصی بالا می‌آید اما در داکر این طور نیست. در داکر امکانات سخت‌افزاری به تناسب نیاز هر کانتینر به صورت موقت اختصاص داده می‌شود و داکر این امکان را فراهم می‌آورد که اپلیکیشن‌ها برای مثال روی [[کرنل]] لینوکس اجرا شوند. در این حالت دیگر نیازی به نصب پیش‌نیازها و نیازمندی‌هایی که اپلیکیشن ما می‌خواهد و به طور پیش‌فرض روی سیستم وجود دارد،ندارد، نیست.
 
داکر ابزاری است متن‌باز (Open Source) و کدهای آن بر روی گیت‌هاب قرار دارد و هر فرد علاقه‌مند می‌تواند در توسعه آن مشارکت کند.<ref>{{یادکرد وب|عنوان=Opensource.com|نشانی=https://opensource.com/|وبگاه=Opensource.com|بازبینی=2020-12-14|کد زبان=en}}</ref>
خط ۳۵:
کانتینرهای داکر قسمتی از نرم‌افزار را در یک سیستم فایل کامل تعبیه می‌کند. به صورتی که شامل هر آنچه جهت اجرا شدن (مانند کد زمان اجرا، ابزارهای سیستم و تنظیمات سیستم) لازم است و هر آنچه که می‌تواند بر روی یک سرور نصب شود می‌باشد. این امر اجرای برنامه را به صورت ثابت در هر نوع محیطی تضمین می‌کند.
 
به طور کلی می‌توان گفت داکر این قابلیت را به ما می‌دهد تا یک اپلیکیشن را در یک محیط ایزوله به نام کانتینر (Container) اجرا کنیم. ایزوله بودن و امنیت کانینتر هاکانتینرها باعث می‌شود که بتوانیم تعداد زیادی کانتینر را روی هاستماشین میزبان اجرا کنیم. کانتینرها سبک و سریع هستند زیرا نیازی ندارند که مانند ماشین‌های مجازی سربار Hypervisor را تحملبه ماشین تحمیل کنند و مستقیما روی هسته (Kernel) کامپیوتر سرویس‌دهنده اجرا می‌شوند. این بدان معناست که می‌توان تعداد بیشتری کانتینر را روی یک ماشین نسبت به حالتی که از ماشین مجازی استفاده می‌کنیم اجرا کرد. البته حتی این قابلیت را نیز داریم که از داکر درون ماشین مجازی نیز استفاده کنیم!.<ref>{{یادکرد وب|عنوان=mostafaghadimi/web_workshop|نشانی=https://github.com/mostafaghadimi/web_workshop|وبگاه=GitHub|بازبینی=2020-12-14|کد زبان=en}}</ref>
 
Container یک نمونه قابل اجرای یک Image است. می‌توان یک کانتینر را به وسیله Docker API یا کلاینت ایجاد، اجرا، حذف و یا متوقف کرد.
 
معمولا کانتینرها از دیگر کانتینرهای در حال اجرا به خوبی ایزوله می‌شوند. شما می‌توانید میزان ایزوله بودن کانتینرها را در مواردی مانند networkشان،دسترسی شبکه‌ای، حافظه مورد استفاده آن‌ها و سیستم‌های پایه‌ای مورد استفاده‌شان تنظیم کنید.
 
یک کانتینر در واقع با Image آن و همهٔ تنظیماتی که در زمان اجرای آن انجام می‌دهید تعریف می‌شود. هنگامی که کانتینر حذف می‌شود، هر تغییر فایلی که در آن به وجود آمده، راهی به بیرون از کانتینر نداردآمده از بین میرود. <ref>{{یادکرد وب|عنوان=mostafaghadimi/web_workshop|نشانی=https://github.com/mostafaghadimi/web_workshop|وبگاه=GitHub|بازبینی=2020-12-14|کد زبان=en}}</ref>
 
== Docker Container Image ==
Docker Container Image یک پکیج نرم‌افزاری سبک، خوداتکا (Stand-alone) و قابل اجراست. Imageها حاوی تمامی نیازمندی‌های اپلیکیشن برای اجرا هستند مانند کدها، ابزارهای سیستمی، کتابخانه‌ها (Libraries) و تنظمیاتتنظیمات سیستمی لازمهستند. Imageها در زمان اجرا تبدیل به کانتینر شده و روی Docker engine اجرا می‌شوند. Imageها برای هر دو نوعِ اپلیکیشن‌های بر پایهٔ لینوکس و ویندوز در دسترس هستند. containerizedشدن این نرم‌افزارها همیشه به صورت کاملاً مشابه و یکسان، بدون در نظرگرفتن زیرساخت، انجام خواهد شدمی‌شود.<ref>{{یادکرد وب|عنوان=Empowering App Development for Developers {{!}} Docker|نشانی=https://www.docker.com/|وبگاه=www.docker.com|بازبینی=2020-12-14|کد زبان=en}}</ref>
 
یک Image در واقع یک Read-Only Template حاوی دستوراتی برای ساخت یک کانتینر داکر است. معمولا استفاده ما از Image ها به این‌صورت است که با تغییر یک Image، Image دیگری را که برای ما مناسب‌تر است می‌سازیم. مثلاً می‌توانیم Imageای بسازیم که برپایه Image اوبونتو است اما یک سرور Apache نیز روی آن نصب می‌شود. شما میتوانید از Imageهای آماده استفاده کنید و یا Image مناسب خود را بسازید. برای ساختن Image جدید کافی است یک Dockerfile ساده بسازید که در آن دستوراتی برای نشان‌دادن چگونگی ساختن و اجرا کردن Image موجود است. وقتی که Dockerfile خود را تغییر می‌دهیم و Image جدیدی می‌سازیم، تنها بخش‌های جدید دوباره ساخته می‌شوند و این یکی از دلایل عمده سرعت و عملکرد بهتر داکر نسبت به بقیه فناوری های شبیه‌سازی (Virtualization) است. <ref>{{یادکرد وب|عنوان=mostafaghadimi/web_workshop|نشانی=https://github.com/mostafaghadimi/web_workshop|وبگاه=GitHub|بازبینی=2020-12-14|کد زبان=en}}</ref>
 
== موتور داکر (Docker Engine) ==
موتور داکر یک تکنولوژی Containerize برای ساختن و اجرای روی کانتینر اپلیکیشن‌هاست. این موتور اعمال خود را به عنوان یک اپلیکیشن کلاینت-سرور انجام می‌دهد با:
 
* یک سرور که نوعی نرم افزار با مدت زمان اجرای طولانی است که به آن پروسه Daemon گفته می‌شود.
* یک REST API که واسط کاربری نرم افزارها برای ارتباط و دادن دستورات به Daemon است.
* یک کلاینت خط فرمان یا (Command Line Interface (CLI
 
کلاینت از APIهای داکر برای کنترل و تعامل با Daemon استفاده می‌کند. این استفاده از طریق اسکریپت‌ها یا کامندهایفرمان‌های مستقیم کلاینت انجام می‌شود. Daemon وظیفه دارد که آبجکت‌هایاشیای داکر مانند Imageها، Containerها، شبکه‌ها و Volumeها را ایجاد و مدیریت کند.<ref>{{یادکرد وب|عنوان=Empowering App Development for Developers {{!}} Docker|نشانی=https://www.docker.com/|وبگاه=www.docker.com|بازبینی=2020-12-14|کد زبان=en}}</ref>
 
== تفاوت داکر و ماشین مجازی ==
یک کانتینر به صورت native روی لینوکس اجرا می‌شود و به صورت مشترک با سیستم‌عامل از کرنل استفاده می‌کند. کانتیرکانتینر یک پروسهفرآیند مجزا را اجرا می‌کند و مانند یک پروسهفرآیند معمولی حجم کمی از RAM را می‌گیرد. در مقابل، ماشین مجازی یا همان VM یک سیستم‌عامل کامل مجازی guest را با دسترسی مجازی و شبیه‌سازی شده به منابع اصلی سیستم، توسط یک hypervisor اجرا می‌کند. ماشین‌های مجازی مقدار بسیار زیادی سربار نسبت به حجم پروسهفرآیند مورد نیاز ما برای سیستم ایجاد می‌کنند.
 
== نصب داکر ==
برای نصب داکر راه‌های مختلفی وجود دارد. بهترین روش آنست که بسته docker را از مخزن اصلی توزیع لینوکس مورد استفاده خود دریافت و آن را با استفاده از مدیر بسته (Package Manager) مربوطه روی سیستم‌عامل خود نصب کنید.
برای نصب داکر راه‌هایی وجود دارد اما در اینجا اسکریپت‌های ارائه شده توسط سایت داکر را قرار می‌دهیم. این اسکریپت‌ها برای نصب داکر روی اوبونتو است. محتوای کامل نحوه نصب در سایت داکر قرار دارد و محتوای این نوشته هم در [https://docs.docker.com/engine/install/ubuntu/ این لینک] است که توصیه می‌شود آن را مطالعه کنید. برای نصب سه راه وجود دارد:
 
برای نصب داکر راه‌هایی وجود دارد اما در اینجا اسکریپت‌های ارائه شده توسط سایت داکر را قرارتوضیح می‌دهیم. این اسکریپت‌ها برای نصب داکر روی اوبونتو است. محتوای کامل نحوه نصب در سایت داکر قرار دارد و محتوای این نوشته هم در [https://docs.docker.com/engine/install/ubuntu/ این لینک] است که توصیه می‌شود آن را مطالعه کنید. برای نصب سه راه وجود دارد:
* نصب از طریق ریپازیتوری داکر
 
* نصب از طریق ریپازیتوریمخزن اصلی داکر
* دانلود DEB Package و نصب دستی آن
* نصب از طریق اسکریپت‌های convenience
 
در این نوشته راه دوم ارائه می‌شود. اگر نمی‌توانید نصب را با راه اول انجام دهید این راه را امتحان کنید. ابتدا فایل deb. را برای سیستم خود دانلود کرده و به صورت دستی نصب کنید. برای این کار:
 
۱. به <code><nowiki>https://download.docker.com/linux/ubuntu/dists</nowiki></code> بروید و ورژننگارش اوبونتوی خود را انتخاب کنید و سپس به <code>pool/stable</code> بروید و از میان <code>amd64 یا armhf یا arm64</code> انتخاب کنید و فایل با پسوند deb. را برای ورژننگارش موتور داکر دلخواه خود برای نصب، انتخاب کنید.
 
۲. موتور داکر را نصب کنید و مسیر کد زیر را به مسیری که بسته مربوط به موتور داکر را دانلود کرده‌اید تغییر دهید:<syntaxhighlight lang="bash">
$ sudo dpkg -i /path/to/package.deb
</syntaxhighlight>Daemon داکر به طور خودکار شروع به کار خواهد کرد.
 
 
۳. با کامندفرمان زیر بررسی کنید که موتور داکر به درستی نصب شده .:<syntaxhighlight lang="bash">
$ sudo docker run hello-world
</syntaxhighlight>کامندفرمان بالا باعث می‌شود که داکر، یک Image تست دانلود کرده و آن را در کانتینر اجرا کند. این برنامه عبارت درHello کامندWorld را چاپ می‌کند. (hello-world)
 
الان موتور داکر نصب شده و در حال اجراست. docker group ایجاد شده اما کاربری به آن اضافه نشده. شما برای اجرای کامندهایفرمان‌های داکر نیاز دارید تا از دسترسی ادمینمدیرسیستم (sudo) استفاده کنید. برای دیدن مراحل بعد از نصب به لینکیپیوندی که در ابتدای این بخش قرار داده شد مراجعه کنید.<ref>{{یادکرد وب|عنوان=Empowering App Development for Developers {{!}} Docker|نشانی=https://www.docker.com/|وبگاه=www.docker.com|بازبینی=2020-12-14|کد زبان=en}}</ref>
 
== چگونه باید اپلیکیشن خود را به یک کانتینر اضافه کنیم؟ ==
زمانی که شما container مورد نظر خودتان را پیدا کردید قطعا می‌خواهید آن را به دلخواه خود تغییر دهید و نیازمندی‌های اپلیکیشن خود را به آن اضافه کنید. اینجا جاییستجایی است که Dockerfile مورد استفاده قرار می‌گیرد.
 
داکرفایل مشخص می‌کند که کانتینر شما چگونه باشد، یعنی از چه Image ای به عنوان پایه استفاده کند و چه تغییراتی روی آن اعمال کند و هنگام اجرا چه دستوراتی را اجرا کند.
سطر ۱۰۵ ⟵ ۱۰۷:
# Execute the command yarn start
CMD ["yarn", "start"]
</syntaxhighlight>از روی این داکرفایل یک Image جدید ساخته شده و اجرا می‌شود. می‌توان از روی یک Image که در اینجا بصورتبه صورت داکر فایل است هر تعدادی Container ساخت.
 
با ساختن یک Image که تنظیمات شخصی خود را روی آن اعمال می‌کنیم، می‌توانیم هر بار یک کانتینر با تنظیمات شخصی‌سازی‌شده را بدون دوباره‌کاری اجرا کنیم.<ref>{{یادکرد وب|عنوان=mostafaghadimi/web_workshop|نشانی=https://github.com/mostafaghadimi/web_workshop|وبگاه=GitHub|بازبینی=2020-12-14|کد زبان=en}}</ref>
سطر ۱۴۶ ⟵ ۱۴۸:
داکرهاب، سرویس ارائه شده‌ی شرکت Docker، مخزنی از image های آماده‌ی داکر است. در این مخزن هزاران برنامه وجود دارد که می‌توان به آن image افزود.
 
هر فردی می‌تواند image های خود را با دیگران به اشتراک بگذارد. برای این کار می‌بایست Repositoryایمخزنی در Docker Hub ایجاد کنید. البته برای دریافت image ها نیازی به ایجاد حساب و ریپازیتوریداشتن مخزن شخصی نیست ولی برای اصلاح و ارسال فایل، باید حساب ساخت.
 
== Docker Swarm ==
'''Docker Swarm چیست؟''' یک Docker Swarm گروهی از ماشین‌های مجازی یا فیزیکی است که اپلیکیشن داکر را اجرا می‌کنند و همچنین برای پیوستن به همدیگر در یک دسته (خوشه یا Cluster) پیکربندی (Configuration) می‌شوند. وقتی گروهی از ماشین‌ها با هم کلاستر می‌شوند شما می‌توانید کامندهایفرمان‌های داکر را که مورد استفاده شماست همچنان استفاده کنیدکنید، اما آن‌ها الان دیگر توسط ماشین‌های کلاستر شما انجاماجرا می‌شوند. فعالیت کلاستر تحت کنترل Swarm Manager است و ماشین‌هایی که به کلاستر می‌پیوندند به عنوان یک راسگره گراف یا Node به حساب می‌آیند.
 
'''استفاده Docker Swarm برای چیست؟''' Docker Swarm ابزاری است برای تنظیم کانتینرارتباط کانتینرها و ماشین‌های میزبان حاضر در یک خوشه. به معنای دیگر Docker Swarm به کاربر این امکان را می‌دهد که چند کانتینر را که روی چندهاستچند ماشین میزبان توسعه‌داده شده مدیریت کند.
 
یکی از مزیت‌های کار با Docker Swarm، دسترسی بالای آن روی اپلیکیشن‌هاست. در یک Docker Swarm به لحاظ نوعی، چندین راسگره (Node) فعال و حداقل یک راسگره مدیر برای مدیریت بهینه منابع راس‌هایگره‌های دیگر و اطمینان‌دهی از بهینگی فعالیت کلاستر وجود دارد.<ref>{{یادکرد وب|عنوان=Cloud Log Management, Monitoring, SIEM Tools|نشانی=https://www.sumologic.com/|وبگاه=Sumo Logic|بازبینی=2020-12-20|کد زبان=en-US}}</ref>
 
== جستارهای وابسته ==