داکر
داکر (انگلیسی: Docker) برنامهای رایانهای و ابزاری است که ایجاد، توسعه و اجرای اپلیکیشنها را با استفاده از کانتینر(container) آسان میکند. کانتینر به توسعهدهندگان این امکان را میدهد که تمام پیشنیازها و نیازمندیهای اپلیکیشن خود را برای استفاده و اجرا جمعآوری کنند؛ مانند کتابخانهها (Libraries) و زیرساختهای لازم.
نویسنده(های) اصلی | Solomon Hykes |
---|---|
توسعهدهنده(ها) | Docker, Inc. |
انتشار ابتدایی | ۲۰ مارس ۲۰۱۳ |
انتشار پایدار | |
مخزن | |
نوشتهشده با | گو |
سیستمعامل | لینوکس . مک . ویندوز |
بنسازه رایانش | X86-64 با کرنل جدید لینوکس |
گونه | مجازیسازی سطح سیستمعامل |
پروانه | مجوز آپاچی ۲٫۰ |
وبگاه |
میتوان گفت که داکر به توسعهدهندگان این اطمینان را میدهد که میتوانند اپلیکیشن خود را بدون نگرانی از سیستمهای میزبان برنامه خود در مرحله توسعه و تست و بر روی سیستمهای مختلف، بدون هیچگونه اشکال و به صورت کاملاً مشابه اجرا کنند و مشکلی از بابت تغییر سیستمعاملهای اجراکننده برنامه خود نخواهند داشت.
داکر تا حدی شبیه به ماشین مجازی (Virtual Machine) است با این تفاوت که در ماشین مجازی، قسمتی از سختافزار سیستم به ماشین مجازی اختصاص داده میشود و روی آن یک سیستمعامل کامل نظیر ویندوز یا لینوکس نصب میشود. در واقع میتوان گفت در ماشین مجازی امکانات سختافزاری سیستم تقسیم میشود و بر روی هر قسمت، سیستمعامل بخصوصی بالا میآید اما در داکر این طور نیست. در داکر امکانات سختافزاری به تناسب نیاز هر کانتینر به صورت موقت اختصاص داده میشود و داکر این امکان را فراهم میآورد که اپلیکیشنها برای مثال روی کرنل لینوکس اجرا شوند. در این حالت دیگر نیازی به نصب پیشنیازها و نیازمندیهایی که اپلیکیشن ما میخواهد و به طور پیشفرض روی سیستم وجود ندارد، نیست.
داکر ابزاری است متنباز (Open Source) و کدهای آن بر روی گیتهاب قرار دارد و هر فرد علاقهمند میتواند در توسعه آن مشارکت کند.[2]
داکر در سال ۲۰۱۳ شروع به کار کرد و توسط شرکت داکر توسعه داده میشود. این سرویس به دو نوع رایگان و پولی در دسترس است.
داکر برای چه کسانی مناسب است؟
داکر طراحی شده است تا هم به توسعهدهندگان نرمافزارها سود برساند و هم به مدیران سیستمها. و امروزه به یکی از ابزارهای مهم DevOps تبدیل شده است. داکر باعث میشود که توسعهدهندگان تمرکز خود را روی نوشتن کد بگذارند و نگران این نباشند که در نهایت قرار است اپلیکیشن آنها روی چه سیستمی اجرا شود. همچنین به آنها کمک میکند که پروژه خود را با استفاده از برنامههای از پیش طراحی شده در کانتینرها آغاز کنند که به عنوان بخشی از اپلیکیشن آنها استفاده خواهد شد. ضمناً باعث انعطاف عمل تیم عملیات (Operation) شده و نیاز به سیستمهای مورد نیاز را کمتر میکند. [3]
کانتینر (Container)
کانتینر، یک واحد استاندارد نرمافزار است که کدها و تمام نیازمندیهای آن را جهت اجرا و توسعه اپلیکیشنها، تجمیع میکند و باعث میشود که این اجرا به طور سریع و قابل اعتماد انجام شود. کانتینرها، نرمافزار را از محیط خودش ایزوله میکنند و اطمینان میدهند که علیرغم تفاوتهای احتمالی در سیستمهای میزبان، نرمافزار به طرز مشابه و یکسان اجرا خواهد شد. [4]
کانتینرهای داکر قسمتی از نرمافزار را در یک سیستم فایل کامل تعبیه میکند. به صورتی که شامل هر آنچه جهت اجرا شدن (مانند کد زمان اجرا، ابزارهای سیستم و تنظیمات سیستم) لازم است و هر آنچه که میتواند بر روی یک سرور نصب شود میباشد. این امر اجرای برنامه را به صورت ثابت در هر نوع محیطی تضمین میکند.
به طور کلی میتوان گفت داکر این قابلیت را به ما میدهد تا یک اپلیکیشن را در یک محیط ایزوله به نام کانتینر (Container) اجرا کنیم. ایزوله بودن و امنیت کانتینرها باعث میشود که بتوانیم تعداد زیادی کانتینر را روی ماشین میزبان اجرا کنیم. کانتینرها سبک و سریع هستند زیرا نیازی ندارند که مانند ماشینهای مجازی سربار Hypervisor را به ماشین تحمیل کنند و مستقیما روی هسته (Kernel) کامپیوتر سرویسدهنده اجرا میشوند. این بدان معناست که میتوان تعداد بیشتری کانتینر را روی یک ماشین نسبت به حالتی که از ماشین مجازی استفاده میکنیم اجرا کرد. البته حتی این قابلیت را نیز داریم که از داکر درون ماشین مجازی نیز استفاده کنیم.[5]
Container یک نمونه قابل اجرای یک Image است. میتوان یک کانتینر را به وسیله Docker API یا کلاینت ایجاد، اجرا، حذف و یا متوقف کرد.
معمولا کانتینرها از دیگر کانتینرهای در حال اجرا به خوبی ایزوله میشوند. شما میتوانید میزان ایزوله بودن کانتینرها را در مواردی مانند دسترسی شبکهای، حافظه مورد استفاده آنها و سیستمهای پایهای مورد استفادهشان تنظیم کنید.
یک کانتینر در واقع با Image آن و همهٔ تنظیماتی که در زمان اجرای آن انجام میدهید تعریف میشود. هنگامی که کانتینر حذف میشود، هر تغییر فایلی که در آن به وجود آمده از بین میرود. [6]
Docker Container Image
Docker Container Image یک پکیج نرمافزاری سبک، خوداتکا (Stand-alone) و قابل اجراست. Imageها حاوی تمامی نیازمندیهای اپلیکیشن برای اجرا مانند کدها، ابزارهای سیستمی، کتابخانهها (Libraries) و تنظیمات سیستمی هستند. Imageها در زمان اجرا تبدیل به کانتینر شده و روی Docker engine اجرا میشوند. Imageها برای هر دو نوعِ اپلیکیشنهای بر پایهٔ لینوکس و ویندوز در دسترس هستند. containerizedشدن این نرمافزارها همیشه به صورت کاملاً مشابه و یکسان، بدون در نظرگرفتن زیرساخت، انجام میشود.[7]
یک Image در واقع یک Read-Only Template حاوی دستوراتی برای ساخت یک کانتینر داکر است. معمولا استفاده ما از Image ها به اینصورت است که با تغییر یک Image، Image دیگری را که برای ما مناسبتر است میسازیم. مثلاً میتوانیم Imageای بسازیم که برپایه Image اوبونتو است اما یک سرور Apache نیز روی آن نصب میشود. شما میتوانید از Imageهای آماده استفاده کنید و یا Image مناسب خود را بسازید. برای ساختن Image جدید کافی است یک Dockerfile ساده بسازید که در آن دستوراتی برای نشاندادن چگونگی ساختن و اجرا کردن Image موجود است. وقتی که Dockerfile خود را تغییر میدهیم و Image جدیدی میسازیم، تنها بخشهای جدید دوباره ساخته میشوند و این یکی از دلایل عمده سرعت و عملکرد بهتر داکر نسبت به بقیه فناوری های شبیهسازی (Virtualization) است. [8]
موتور داکر (Docker Engine)
موتور داکر یک تکنولوژی Containerize برای ساختن و اجرای کانتینر اپلیکیشنهاست. این موتور اعمال خود را به عنوان یک اپلیکیشن کلاینت-سرور انجام میدهد با:
- یک سرور که نوعی نرم افزار با مدت زمان اجرای طولانی است که به آن پروسه Daemon گفته میشود.
- یک REST API که واسط کاربری نرم افزارها برای ارتباط و دادن دستورات به Daemon است.
- یک کلاینت خط فرمان یا (Command Line Interface (CLI
کلاینت از APIهای داکر برای کنترل و تعامل با Daemon استفاده میکند. این استفاده از طریق اسکریپتها یا فرمانهای مستقیم کلاینت انجام میشود. Daemon وظیفه دارد که اشیای داکر مانند Imageها، Containerها، شبکهها و Volumeها را ایجاد و مدیریت کند.[9]
تفاوت داکر و ماشین مجازی
یک کانتینر به صورت native روی لینوکس اجرا میشود و به صورت مشترک با سیستمعامل از کرنل استفاده میکند. کانتینر یک فرآیند مجزا را اجرا میکند و مانند یک فرآیند معمولی حجم کمی از RAM را میگیرد. در مقابل، ماشین مجازی یا همان VM یک سیستمعامل کامل مجازی guest را با دسترسی مجازی و شبیهسازی شده به منابع اصلی سیستم، توسط یک hypervisor اجرا میکند. ماشینهای مجازی مقدار بسیار زیادی سربار نسبت به حجم فرآیند مورد نیاز ما برای سیستم ایجاد میکنند.
نصب داکر
برای نصب داکر راههای مختلفی وجود دارد. بهترین روش آنست که بسته docker را از مخزن اصلی توزیع لینوکس مورد استفاده خود دریافت و آن را با استفاده از مدیر بسته (Package Manager) مربوطه روی سیستمعامل خود نصب کنید.
در اینجا اسکریپتهای ارائه شده توسط سایت داکر را توضیح میدهیم. این اسکریپتها برای نصب داکر روی اوبونتو است. محتوای کامل نحوه نصب در سایت داکر قرار دارد و محتوای این نوشته هم در این لینک است که توصیه میشود آن را مطالعه کنید. برای نصب سه راه وجود دارد:
- نصب از طریق مخزن اصلی داکر
- دانلود DEB Package و نصب دستی آن
- نصب از طریق اسکریپتهای convenience
در این نوشته راه دوم ارائه میشود. اگر نمیتوانید نصب را با راه اول انجام دهید این راه را امتحان کنید. ابتدا فایل deb. را برای سیستم خود دانلود کرده و به صورت دستی نصب کنید. برای این کار:
۱. به https://download.docker.com/linux/ubuntu/dists
بروید و نگارش اوبونتوی خود را انتخاب کنید و سپس به pool/stable
بروید و از میان amd64 یا armhf یا arm64
انتخاب کنید و فایل با پسوند deb. را برای نگارش موتور داکر دلخواه خود برای نصب، انتخاب کنید.
۲. موتور داکر را نصب کنید و مسیر کد زیر را به مسیری که بسته مربوط به موتور داکر را دانلود کردهاید تغییر دهید:
$ sudo dpkg -i /path/to/package.deb
Daemon داکر به طور خودکار شروع به کار خواهد کرد.
۳. با فرمان زیر بررسی کنید که موتور داکر به درستی نصب شده:
$ sudo docker run hello-world
فرمان بالا باعث میشود که داکر، یک Image تست دانلود کرده و آن را در کانتینر اجرا کند. این برنامه عبارت Hello World را چاپ میکند.
الان موتور داکر نصب شده و در حال اجراست. docker group ایجاد شده اما کاربری به آن اضافه نشده. شما برای اجرای فرمانهای داکر نیاز دارید تا از دسترسی مدیرسیستم (sudo) استفاده کنید. برای دیدن مراحل بعد از نصب به پیوندی که در ابتدای این بخش قرار داده شد مراجعه کنید.[10]
چگونه باید اپلیکیشن خود را به یک کانتینر اضافه کنیم؟
زمانی که شما container مورد نظر خودتان را پیدا کردید قطعا میخواهید آن را به دلخواه خود تغییر دهید و نیازمندیهای اپلیکیشن خود را به آن اضافه کنید. اینجا جایی است که Dockerfile مورد استفاده قرار میگیرد.
داکرفایل مشخص میکند که کانتینر شما چگونه باشد، یعنی از چه Image ای به عنوان پایه استفاده کند و چه تغییراتی روی آن اعمال کند و هنگام اجرا چه دستوراتی را اجرا کند.
در زیر یک dockerfile نمونه به همراه توضیحات آن آمده است:
# Use the official Node.js runtime as a base image
FROM node:alpine
# Set the directory of my web application to /app
WORKDIR /app
# Copy over my project’s directory into the container /app folder
Add . /app
# Install all the dependencies for my web application
RUN yarn install
# Make the port 3000 accessible outside of Docker
EXPOSE 3000
# Execute the command yarn start
CMD ["yarn", "start"]
از روی این داکرفایل یک Image جدید ساخته شده و اجرا میشود. میتوان از روی یک Image که در اینجا به صورت داکر فایل است هر تعدادی Container ساخت.
با ساختن یک Image که تنظیمات شخصی خود را روی آن اعمال میکنیم، میتوانیم هر بار یک کانتینر با تنظیمات شخصیسازیشده را بدون دوبارهکاری اجرا کنیم.[11]
Docker Compose
Compose ابزاری است برای تعریف و اجرای مالتی-کانتینر اپلیکیشنهای داکر است. به وسیلهی Compose شما میتوانید از یک فایل YAML استفاده کنید تا بتوانید سرویس اپلیکیشن خود را پیکربندی (Configure) کنید. سپس فقط با استفاده از یک کامند میتوانید تمام سرویسهای خود را بر اساس پیکربندی دلخواه خود ایجاد و فعال کنید. برای مطالعه بیشتر در مورد تمام ویژگیهای Compose این لینک را مشاهده کنید.[12]
Compose در تمام محیطها کار میکند؛ برای مثال مراحل تولید، Staging، توسعه، تست و همچنین CI Workflows. برای مطالعه بیشتر برای هرکدام از این موارد میتوانید این لینک را مشاهده کنید.
استفاده از Compose اساساً سه مرحله پردازش دارد:
۱. محیط اپلیکیشن خود با داکرفایل تعریف کنید که باعث میشود در هر سیستم و محیطی خود را از ابتدا بازتولید کند.
۲. سرویسهایی که اپلیکیشن شما را در docker-compose.yml
درست میکنند را تعریف کنید. در نتیجه آنها میتوانند همراه هم در محیطی جداگانه و ایزوله اجرا شوند.
۳. docker-compose up
را اجرا کنید و Compose شروع به کار میکند. در نهایت کل محیط اپلیکیشن شما را اجرا میکند.
فایل docker-compose up
شبیه این است:
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
برای مطالعه بیشتر در مورد Compose file این لینک را مشاهده کنید. [13] برای نصب Docker Compose از دستور زیر استفاده کنید:
sudo apt install docker-compose
Docker Hub
داکرهاب، سرویس ارائه شدهی شرکت Docker، مخزنی از image های آمادهی داکر است. در این مخزن هزاران برنامه وجود دارد که میتوان به آن image افزود.
هر فردی میتواند image های خود را با دیگران به اشتراک بگذارد. برای این کار میبایست مخزنی در 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) فعال و حداقل یک گره مدیر برای مدیریت بهینه منابع گرههای دیگر و اطمیناندهی از بهینگی فعالیت کلاستر وجود دارد.[14]
جستارهای وابسته
منابع
- "Release v1.5.0". docs.docker.com. Docker, Inc. 2015-02-03. Retrieved 2015-02-11.
- "Opensource.com". Opensource.com. Retrieved 2020-12-14.
- "Opensource.com". Opensource.com. Retrieved 2020-12-14.
- "Empowering App Development for Developers | Docker". www.docker.com. Retrieved 2020-12-14.
- "mostafaghadimi/web_workshop". GitHub. Retrieved 2020-12-14.
- "mostafaghadimi/web_workshop". GitHub. Retrieved 2020-12-14.
- "Empowering App Development for Developers | Docker". www.docker.com. Retrieved 2020-12-14.
- "mostafaghadimi/web_workshop". GitHub. Retrieved 2020-12-14.
- "Empowering App Development for Developers | Docker". www.docker.com. Retrieved 2020-12-14.
- "Empowering App Development for Developers | Docker". www.docker.com. Retrieved 2020-12-14.
- "mostafaghadimi/web_workshop". GitHub. Retrieved 2020-12-14.
- "Docker Guide". Docker Guide. 2021-04-25. Retrieved 2021-04-25.
- "Docker Documentation". Docker Documentation. 2020-12-18. Retrieved 2020-12-20.
- «Cloud Log Management, Monitoring, SIEM Tools». Sumo Logic (به انگلیسی). دریافتشده در ۲۰۲۰-۱۲-۲۰.
- مشارکتکنندگان ویکیپدیا. «Docker (software)». در دانشنامهٔ ویکیپدیای انگلیسی، بازبینیشده در ۱۴ مارس ۲۰۱۵.