آموزش داکر

داکر ابزاری برای ایجاد محیطی برای اجرای نرم افزارها است.

داکر چیست؟

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

هر دو گروه بالا دیگری را مقصر و نقطه ضعف می دانند و پابلیش شدن نرم افزار تبدیل به یکی از بزرگترین چالش های آن شرکت تبدیل می‌شود.

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

در این حالت نیز شما کارفرما را نادان و کارفرما شما را کند و بی دانش خطاب خواهد کرد.

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

 

توسعه با استفاده از داکر

برای توسعه نرم افزاری که داکر را پشتیبانی کند در ابتدا می‌بایست ابزار داکر را بر روی محیط عملیاتی و توسعه نصب کنید. دو فایل در مسیر پروژه نرم افزاری خود قرار می دهید.

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

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

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

 

مزایای استفاده از داکر

قابل حمل بودن

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

کارایی

اجرای نرم افزار با استفاده از داکر بسیار سریع تر از اجرای مجزای آن در یک سرور است چرا که مثلا nginx موجود در داکر نسبت به نسخه اصلی ngnix قابل نصب روی ویندوز و لینوکس حجم کمتری دارد و در نهایت نرم افزار شما سریع تر ایجاد و اجرا می‌شود.

ایزوله بودن

وقتی نرم افزاری در داکر اجرا می‌شود به همراه ابزارهای وابسته آن ایزوله خواهد بود یعنی مثلا اگر نرم افزار شما از SQL Server نسخه 2017 استفاده می‌کند این ابزار خارج از محیط نرم افزار اجرا شده در داکر قابل دسترس نیست (البته با انجام یک سری تنظیمات می توان آن را در دسترس قرار داد) و اگر یک نرم افزار دیگر به نسخه دیگری از SQL Server  مثلا نسخه 2019 آن نیاز داشته باشد شما با چالش مربوط به تنظیمات port ها و instance name ها درگیر نخواهید شد چرا که نرم افزار دیگر محیط ایزوله خود را دارد در واقع به این شکل در نظر بگیرید که نرم افزار اول در یک سرور و نرم افزار دوم در یک سرور دیگر قرار می‌گیرد.

مقیاس پذیری

به راحتی امکان ایجاد چند نسخه از نرم افزار حتی با ورژن های مخلف وجود خواهد داشت. مثلا فرض کنید می‌خواهید از نرم افزار شما سه نسخه اجرا شود تا درخواست های بیشتری را پاسخ دهی کند، داکر این موضوع را بسیار ساده اجرا خواهد کرد.

پابلیش سریع

با استفاده از داکر فرآیند پابلیش می‌تواند به چند ثانیه کاهش یابد که در مقایسه با پابلیش سنتی بسیار سریع تر خواهد بود.

برگشت به عقب

با توجه به آنکه داکر نرم افزار را نسخه بندی می‌کند در صورت لزوم کمتر از چند ثانیه لازم است تا نسخه‌ قبلی مد نظر به اجرا در آید.

 

مفاهیم داکر

Docker Host چیست؟

به سرور یا کامپیوتری که بر روی آن Docker را نصب می‌کنیم اصطلاحا Host می‌گویند.

Image چیست؟

فرض کنید یک dvd ویندوز دارید، Image در داکر دقیقا مشابه به dvd یک ویندوز است که قابلیت نصب دارد.

Container چیست؟

کانتینر یک نمونه اجرایی از یک image است. مثلا شما می توانید با استفاده از یک dvd ویندوز، هر تعداد که لازم باشد نسخه از آن را بر روی سیستم های مختلف نصب کنید. Container ها مشابه ویندوزهای نصب شده هستند که نمونه های اجرایی image ها هستند.

Dockerfile چیست؟

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

Docker Compose چیست؟

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

Docker Registry چیست؟

در حالت عادی image های ساخته شده توسط شما تنها در روی docker سیستم شما وجود دارد و برای داکر سرور عملیاتی در دسترس نیست که آن را تبدیل به container کند. Registry فضایی است که image ها بر روی آن قرار می‌گیرند تا برای استفاده دیگر سیستم ها و سرورها قابل دسترس باشد.

Docker Hub چیست؟

Dockerhub یک Regsitry است که توسط شرکت docker پشتیبانی می‌شود که آدرس اینترنتی آن hub.docker.com است. در این سایت امکان قرار دادن image ها به صورت عمومی با دسترسی برای همه افراد و دسترسی خصوصی برای دسترسی محدود شده برای شما وجود دارد.

Docker Volume چیست؟

در حالت کلی دو نوع container از نظر ذخیره سازی داریم:

State Less: این نوع کانتینر هیچ نیازی برای ذخیره سازی دیتا ندارد، به عنوان مثال سایت طراحی شده توسط شما با زبان asp.net core یا php یا python هیچ نیازی به ذخیره سازی دیتایی درون خود ندارد.( توجه کنید دیتایی مثلا توسط کاربر در سایت شما ارسال می‌شود در دیتابیس ذخیره می‌شود نه در پروژه asp.net core یا ... شما!)

State Full: این نوع کانتینر نیاز به ذخیره سازی داده در خود دارد. مثلا SQL Server یا MySQL یا Elastic Search نیاز به ذخیره سازی دیتا درون خود دارند و از این رو به آن State Full می‌گویند.

در صورتیکه یک container از حالت اجرایی خارج شود سپس مجدد اجرا شود تمامی دیتای درون آن پاک (ریست) خواهد شد. این موضوع در container های نوع State Less مشکلی ایجاد نخواهد کرد اما در container های نوع State Full می‌تواند منجر به پاک شدن کلیه دیتاهای موجود بر روی آن شود.

Volume در داکر فضایی خارج از container است که داده ها علاوه بر ذخیره سازی در خود container state full در آن نیز ذخیره می‌شود و در صورت restart شدن container با توجه به وجود داده ها در volume مجددا با آن دیتا بالا خواهد آمد.

Docker Network چیست؟

هر container در داکر شبیه یک سرور مجازی است و برای ارتباط با یکدیگر و همچنین با host داکر نیازمند شبکه ارتباطی هستند که به آن network می‌گویند. بحث شبکه در داکر همانند مبحث شبکه حوزه آی تی بسیار گسترده و وسیع است اما داکر سعی بر آن داشته تا با احتیاط پیچیدگی آن را کاهش دهد.

Docker Swarm چیست؟

Docker Swarm ابزاری است که امکان پایداری سرویس های داکری را محیا می سازد. به زبان ساده این ابزار به ما کمک می کند تا بتوانیم چندین سرور را به وسیله داکر مدیریت کنیم و در صورت از دسترس خارج شدن برخی از سرورها، سرویس های شما همچنان پایدار بمانند. 

 

 

 

کلیدواژه: docker , داکر
1458 بازدید
هاست وردپرس
نظرات
کد تخفیف اولین سفارش