آموزش کار با داکر

نوشته شده توسط  شبکه البرز بازدید 2103 بار 19 مرداد 1398

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

ما از اوبونتو به‌عنوان بنیاد ساخت داکر استفاده می‌کنیم. اوبونتو تنها یک توزیع محبوب و فراگیر از لینوکس نیست، بلکه خود تیم داکر نیز از اوبونتو برای توسعه استفاده کرده و داکر از نسخه 12.08 روی سرورهای اوبونتو پشتیبانی می‌کند و برای سادگی از دستورات نصب اوبونتو 16.04 استفاده می‌کنیم.

آماده کردن اوبونتو برای داکر

اولین گام به‌دست آوردن ورژن مناسب کرنل و هِدِر آن است:
$ sudo apt-get install --install-recommends linux-generic-hwe-16.04
این فرآیند کمی زمان‌بر است و پس از انجام ممکن است به ریست سیستم نیاز باشد:
$ sudo reboot
یا این‌که به ارتقای دیگر پکیج‌ها نیاز باشد:
$ sudo apt-get update
$ sudo apt-get upgrade

نصب داکر در اوبونتو

نصب داکر در توزیع‌های دبیان، اوبونتو فدورا، Raspbian و CentOS با استفاده از روش اسکریپت Shell آسان است و با مراجعه به وب‌سایت
get.docker.com می‌توانید آن را دانلود کنید. برای این کار باید از دستور Curl استفاده کنید. جدیدترین نسخه Curl به این صورت دریافت می‌شود:
sudo apt-get install curl
پس از نصب Curl اسکریپت ‌را نصب و اجرا کنید:
curl -s https://get.docker.com | sudo sh
پس از نصب اسکریپت متنی مشابه شکل 1 مشاهده خواهید کرد که جزئیاتی درباره نسخه داکر و اجزای سرور و کلاینت دارد.
 
شکل1. نصب یک اسکریپت Shell

باید درباره اضافه کردن کاربران Root نشده به نکته‌ای اشاره کرد. انجام این کار راحت است اما پیشنهاد می‌شود برای کار با داکر و دیگر عملکردها، کاربر روت نشده ایجاد کنید. 
در ادامه عملیات نصب، کانتینر پایه داکر را تست کنید. دستور زیر ایمیج اوبونتوی داکر را دانلود و در مسیر مشخص شده اجرا می‌کند:
$ sudo docker run -i -t ubuntu /bin/bash
در صورت موفقیت‌آمیز بودن Hostname را از طریق Command Prompt خواهید دید که به چیزی شبیه Root@216b04387924:/# تغییر یافته است. برای خارج شدن از این قسمت و هر بخشی در Shell از دستور Exit استفاده کنید.
حال یک داکر روی سرور خود دارید و با دستور زیر می‌توانید اطلاعات پایه‌ای درباره آن کسب کنید:
$ sudo docker info
خروجی دستور Docker Info تعداد کانتینرها و ایمیج‌ها را نشان می‌دهد. ممکن است این دستور خیلی طولانی باشد که در شکل 2 قسمتی از آن را مشاهده می‌کنید.
 
شکل 2. خروجی دستورDocker Info برای کسب اطلاعات درباره داکر نصب شده

در این قسمت اگر فایروالUFW در اوبونتو در حال اجرا است باید دستورات دیگری هم لحاظ شوند که از آن‌ها عبور می‌کنیم.
کار با ایمیج‌های داکر و کانتینرهای داکر
کاتنینرهای داکر نسبت به ماشین‌های مجازی کارایی بسیار بیشتری دارند. وقتی کانتینر یک پروسه را اجرا نمی‌کند، انگار که آن پروسه کاملا از کار افتاده و در واقع از منابع سیستم استفاده نمی‌کند. با استفاده از دستور Docker Ps می‌توان کانتینرهای فعال و غیرفعال را مشاهده کرد:
# This command will show ALL containers on the system
$ sudo docker ps -a
# This will show only RUNNING containers
$ sudo docker ps
تمام دستورات موجود را به سادگی با وارد کردن Docker مشاهده کنید. 

کانتینرهای داکر در مقابل ایمیج‌های داکر

کانتینرهای داکر از روی ایمیج‌ها ساخته می‌شوند که به Shell‌های سیستم‌عامل نیاز دارند که شامل کتابخانه‌ها و باینری‌ها برای اجرای اپلیکیشن‌ها در کانتینر است.ایمیج‌ها با برچسب‌ها نام‌گذاری می‌شوند، به خصوص متاداده که ذخیره‌سازی و استفاده از نسخه‌های مختلف ایمیج را ساده می‌کند. در حالت عادی ممکن است یک ایمیج چند برچسب مختلف داشته باشد:
ubuntu:16.04, ubuntu:xenial-20171201, ubuntu:xenial, ubuntu:latest
زمانی‌‌که عبارت Docker Pull Ubuntu وارد می‌شود، ایمیجِ اوبونتوی پیش‌فرض درخواست می‌شود که ایمیجی با برچسب lastest (آخرین) است. به‌عبارت‌دیگر، این عبارت مساوی با عبارت Docker Pull Ubuntu:latest است.

جریان کاری کانتینر و ایمیج داکر

زمانی‌که یک ایمیج را به‌کار می‌گیرید، یک کانتینر زنده از آن ساخته‌اید و این کار با دستور Docker Run انجام‌شده است. هنگام افزودن نرم‌افزار به کانتینر و اعمال تغییرات در تنظیمات با کمک دستور Docker Commit می‌توانید یک ایمیج جدید از آن تغییرات بسازید.
نکته مهم و قابل‌توجه این است که داکر تنها تغییرات را ذخیره می‌کند. زمانی‌‌که ایمیج خودتان را می‌سازید، تغییرات ایجاد شده نسبت به ایمیج پایه ذخیره می‌شود و ایمیج جدید به ایمیج اصلی پیوند می‌خورد؛ بنابراین ممکن است ایمیجی داشته باشید که به‌صورت مجازی حجم 266 مگابایتی دارد اما تنها چند مگابایت فضا را روی دیسک اشغال می‌کند.

ساخت یک ایمیج جدید از کانتینر 

برای درک بهتر این قضیه که ایمیج و کانتینر چگونه کار می‌کنند، اجازه دهید یک سرور وب آپاچی (Apache) راه‌اندازی کنیم.

شروع کار با یک کانتینر داکر جدید

در ابتدا باید یک کانتینر جدید بسازید که راه‌های کمی برای این کار وجود دارد. یک Root Shell در کانتینر جدید آغاز کنید:
$ sudo docker run -i -t --name apache_web ubuntu /bin/bash
این دستور یک کانتینر جدید با شناسه یکتا و نام Apache_Web می‌سازد. دستور بعدی apt-get است که برای نصب وب‌سرور آپاچی استفاده می‌شود:
root@d7c8f02c3c8c:/# apt-get update
root@d7c8f02c3c8c:/# apt-get install apache2
خروجی عادی Apt-Get ظاهر خواهد شد و بسته Apache2 روی کانتینر جدید شما نصب شده است. پس از کامل شدن نصب، آپاچی را اجرا و Curl را نصب کرده و نصب را تست کنید:
root@d7c8f02c3c8c:/# service apache2 start
root@d7c8f02c3c8c:/# apt-get install curl
root@d7c8f02c3c8c:/# curl http://localhost
در ادامه آخرین دستور باید صفحه آپاچی پیش‌فرض را به صورت HTML خام در کنسول ببینید. این به آن معنا است که سرور آپاچی نصب شده و در کانتینر شما اجرا می‌شود.

ساخت یک اسکریپت استارت‌آپی برای کانتینر داکر

به یاد داشته باشید که کانتینر داکر تنها تا زمانی کار می‌کند که پروسه یا پروسه‌های آن فعال باشند. پس اگر پروسه‌ای که اجرا کرده‌اید، به پس‌زمینه منتقل شد، داکر کانتینر را متوقف خواهد کرد. 
یک اسکریپت بسازید؛ smartapache.sh در مسیری که مشخص کرده‌ایم: 
# You might need to first install Nano inside the container
root@d7c8f02c3c8c:/# apt-get install nano
root@d7c8f02c3c8c:/# nano /usr/local/sbin/startapache.sh
در فایل startapache.sh این خطوط را اضافه کنید:
#!/bin/bash
. /etc/apache2/envvars
/usr/sbin/apache2 -D FOREGROUND
تغییرات را اعمال و فایل را ذخیره کرده و سپس آن را اجرا کنید:
root@d7c8f02c3c8c:/# chmod +x /usr/local/sbin/startapache.sh

به‌کار گرفتن کانتینر برای ساخت یک ایمیج داکر جدیدتغییرات اعمال‌شده ر‌ا ذخیره کنید:
$ sudo docker commit apache_web local:apache_web
این کار به‌عنوان یک ایمیج جدید حکم تأیید ذخیره کانتینر و برگرداندن یک شناسه یکتا را دارد. 

پایه‌های شبکه‌ای داکر

حال ایمیج خود را دارید و می‌توانید کانتینر خود را راه‌اندازی کنید. پس از نصب داکر سه شبکه مجازی ایجاد می‌شود که ممکن است توسط کانتینرهای داکر استفاده شوند:
Bridge: شبکه‌ای که کانتینرها به صورت پیش‌فرض به آن متصل می‌شوند. Bridge Network به کانتینرها اجازه می‌دهد، به‌صورت مستقیم با یکدیگر صحبت کنند، نه با سیستم Host.
Host: شبکه‌ای که به کانتینرها اجازه می‌دهد توسط host مستقیم دیده شوند.
None: شبکه‌ای خالی است و کانتینری که به این شبکه متصل شده چیزی جز خودش را نمی‌تواند ببیند.
زمانی‌‌که کانتینر را اجرا می‌کنید و نیاز است که با دیگر کانتینرها یا جهان بیرونی ارتباط برقرار کنید، باید به‌صورت دستی پورت‌ها را از آن کانتینر به Host نگاشت کنید. در ادامه مثالی که ذکر کردیم، می‌توانید هنگام اجرای کانتینر، این کار را در خط فرمان انجام دهید:
$ sudo docker run -d -p 8080:80 --name apache local:apache_web /usr/local/sbin/startapache.sh
سوئیچ –p برای نگاشت پورت است. در اینجا پورت 8080 به Host با پورت 80 نگاشت شد. –name به شما اجازه می‌دهد تا یک نام برای کانتینر انتخاب کنید و البته اختیاری است. 
می‌توان وضعیت کانتینر و نگاشت TCP را با دستور Docker Ps مشاهده کرد. همچنین با دستور Docker Port جستجو در نگاشت شبکه ممکن خواهد بود:
$ sudo docker port apache 80
0.0.0.0:8080

داکر برای مک و ویندوز

کانتینرهای داکر یک فناوری مشخص از لینوکس هستند و اما می‌توانید به‌راحتی آن را در سیستم‌عامل Mac یا ویندوز (با استفاده از مجازی‌سازی) به‌کار گیرید. شرکت داکر نسخه‌هایی را منتشر کرده که در محیط سیستم‌عامل‌ها اجرا شوند. طریقه کار آن همانند چیزی است که بررسی کردیم و خط فرمانی مشابه با لینوکس وجود دارد. نصب آن‌ها شبیه سایر اپلیکیشن‌ها است و آن‌ها از یک هایپروایزر استفاده می‌کنند؛ Xhyve برای مک و Hyper-V برای ویندوز. 
البته نسخه دسکتاپی از داکر وجود دارد که یک محیط گرافیکی برای مدیریت تعاملات در نظر گرفته است . برای مثال، می‌توانید مشخص کنید که چه درایوهای محلی برای کانتینرها در دسترس باشند، چقدر CPU یا حافظه در اختیار کانتینر قرار گیرد و رفتار ارتباطات شبکه‌ای چگونه باشد.

نویسنده: فرشاد رضایی- شبکه

نظرات کاربران

تصویر امنیتی تصویر امنیتی جدید