داکر یک پلتفرم نرم افزاری برای ساخت اپلیکیشنهای مبتنی بر Container است. محیطهای اجرایی کوچک و سبک که به طور مشترک از هسته سیستم عامل استفاده میکنند اما در عین حال در یک محیط ایزوله و کاملا جدا از هم قرار دارند. یکی از اهدافی که این سیستمها دارند، این است که برنامهها در یک محیط، اما به صورت ایزوله و جدا از هم نگهداری شوند. به این ترتیب فعالیت آنها بر روی یکدیگر تاثیر نداشته و جدا از هم کار میکنند. البته اجرای این فرآیند به خاطر استفاده از پکیج ها، کتابخانهها و دیگر کامپونتتهای نرم افزاری میتواند پیچیده شود.
یکی از راههای پیاده کردن این تکنولوژی استفاده از ماشین مجازی (Virtual Machine) است که برنامهها را روی یک سخت افزار اما کاملا جدا از هم نگه میدارد. پس در این حالت کامپوننتهای ما تداخل خاصی با هم نداشته و رقابت برای استفاده از منابع سخت افزاری هم به حداقل میرسد. اما ماشینهای مجازی مشکلاتی هم دارند. اول از همه اینکه نرم افزارهای سنگینی بوده و سخت افزار نسبتا قدرتمندی میخواهند. همینطور هر برنامه نیاز به سیستم عامل جداگانه دارد که ممکن است این سیستم عاملها حجمهای چند گیگابایتی داشته باشند. و اینکه ممکن است نگهداری و بروزرسانی آنها دشوار شود.
داکر یک پروژه متن باز است که اجازه میدهد Container یا برنامههای مبتنی بر Container بسازید. با اینکه داکر در شروع کار برای لینوکس ساخته شد اما امروزه به خوبی در ویندوز و MacOS هم اجرا میشود. برای ساخت یک برنامه با داکر باید از کامپوننتهای مختلفی استفاده کنیم. حالا برای درک بهتر مفهوم داکر بهتر است سراغ این کامپوننتها رفته و آنها را بررسی کنیم:
Dockerfile
هر Container داکر با یک فایل داکر شروع به کار میکند. Dockerfile یک فایل متنی بوده که داخل آن با یک سینتکس ساده و قابل فهم دستورالعملهای ساخت Docker Image قرار داده شده است (کمی جلوتر این مفهوم را بررسی خواهیم کرد) این فایل اطلاعات بسیار مهمی را در برمی گیرد که برای راه اندازی داکر استفاده از آنها ضروری است. در واقع Dockerfile مشخص میکند که پشت Container ما چه سیستم عاملی قرار بگیرد، همینطور از چه زبان ها، متغیرهای محلی، پورتهای شبکه یا غیره استفاده شود. و مهمتر از همه اینکه مشخص کند Container ما بعد از اینکه واقعا اجرا شد قرار است چه کاری انجام دهد.
Docker image
در واقع زمانی که کار نوشتن Dockerfile را تمام کردید، یک قابلیت به اسم Docker Build را فراخوانی میکنید که وظیفه دارد یک Image بر اساس محتویات Dockerfile شما بسازد. Dockerfile شامل یک سری دستورالعمل برای ساختن یک Image است، در حالی که Docker Image یک فایل قابل حمل است که شامل یک سری دستورالعمل بوده که مشخص میکند Container کدام کامپوننتهای نرم افزاری را اجرا کند و اینکه چطور آنها اجرا شوند. به احتمال زیاد Dockerfile بخواهد تعدادی فایل را از مخزنهای مختلف (Repository) دانلود کند و اینجا باید به طور واضح مشخص کنید که کدام نسخهها دریافت شوند. همینطور Image ساخته شده استاتیک میباشد، یعنی یک بار ساختن آن کافی بوده و نیازی به تغییر آن ندارید. همانطور که از اسم آنها میتوانید حدس بزنید، Image یک تصویر از سیستم عامل اصلی میباشد.
Docker run
قابلیت Docker run در واقع یک دستور است که Container را راه اندازی میکند. میدانیم که هر Container یک instance یا نمونه از Image است و ماهیت Container به صورت موقتی میباشد. اما با این حال میتوان آنها را متوقف (Stop) یا راه اندازی مجدد (Restart) کرد. هر Image میتواند تعداد زیادی Container داشته باشد (تا زمانی که هر کدام نام منحصر به فردی داشته باشند)
Docker Hub
هر چند ساخت Containerها کار راحتی است، اما لزومی ندارد برای هر Image از اول Container بسازید. Docker Hub یک مخزن Saas برای به اشتراک گذاری و مدیریت Containerها است. در آنجا میتوانید Imageهای رسمی داکر که معمولا به صورت متن باز هستند را پیدا کنید. همینطور عموم مردم هم پروژههای خود را به این Repository اضافه میکنند.
Docker Engine
مغز متفکر و هسته اصلی داکر به حساب میآید. یک تکنولوژی کلاینت/سرور که Containerها را ساخته و آنها را اجرا میکند. در واقع اگر کسی درباره داکر صحبت کرده و منظورش شرکت داکر یا پروژه داکر نباشد، یعنی دارد درباره Docker Engine حرف میزند. این موتور در دو نسخه Enterprise یا Community عرضه میشود.
منبع :سون لرن