آموزش کامل نصب و راه اندازی و پیکربندی داکر (Docker) در ویندوز و لینوکس
داکر یک ابزار اوپن سورس برای طراحی و ساخت برنامهها به کمک Container است. Container به برنامه نویس کمک میکند که پروژه خود را با تمام بخش هایی که دارد (مثل کتابخانه ها، وابستگیها و غیره) به صورت یک پکیج دربیاورد. به لطف این تکنیک، برنامه نویس خیالش راحت است که برنامه او میتواند در سیستمهای دیگر بدون نیاز به تنظیمات خاص یا ابزارهای جانبی اجرا شود. داکر را شبیه به ماشین مجازی در نظر بگیرید، با این تفاوت که بازدهی بسیار بالاتری دارد چون نیاز به سیستم عامل مجزا ندارد. با اینکه داکر در شروع کار برای لینوکس ساخته شد اما امروزه به خوبی در ویندوز و MacOS هم اجرا میشود. برای ساخت یک برنامه با داکر باید از کامپوننتهای مختلفی استفاده کنیم.
عناوين مطالب: '
- اجزای معماری داکر
- شرح دستورات داکر
- docker ps
- docker version
- hub.docker.com
- docker -v
- docker info
- docker login
- docker compose
- docker-compose.yml
- docker-compose up
- docker ps -a
- docker inspect [container-ID] or container_name]
- docker rm [container_name]
- sudo systemctl enable docker
- docker container ls -a
- Docker run hello-world
- docker images
- docker rmi -f [image-name]
- docker search [image-name]
- docker pull [image-name]
- docker container prune
- docker run -it [image-name]
- Docker attach [containet-id]
- “docker commit -a [user-name] -m ‘message’ [container-ID] [new-image-name] “
- docker push [user-image-name]
- Docker pull [user/image]
- docker run -it -v ${pwd}:/data docker-image
- docker volume create volume-namedocker run -it –mount source=volume-name, destination=/dir -source image-name
- docker run -it -d -p 9000=80 image-name
- docker logs -f container-ID
- docker stats
- docker top container-ID
- docker exec -it [containet-id] command
- docker-compose up docker-compose down
داکر Docker چیست؟
در مبحث معرفی داکر با این تکنولوژی آشنا شدیم حال به نحوع نصب و راه اندازی آن می پردازیم. این نوع مجازیسازی برخلاف مجازیسازی معمولی، سربار (Overhead) بسیار کمی دارد و برخلاف تکنیک chroot، دو سیستمعامل کاملا از هم جدا هستند و همدیگر را مثل دو ماشین مجزا در شبکه میبینند. تنها نقطه اشتراک دو سیستمعامل، هسته سیستمعامل (لینوکس) است که در این ترکیب، هسته سیستمعامل بیرونی، سیستمعامل داخلی را هم کنترل میکند (لینوکس این قابلیت را به لطف cgroups و namespaceها برای مجزا کردن پروسهها از همدیگر دارد).
این قابلیت سالهاست که در لینوکس وجود دارد و سوال اینجاست که داکر چه چیزی به این قابلیت اضافه میکند؟ نسخههای اولیه داکر، از LXC برای مدیریت کانتینرها استفاده میکردند، اما از نسخه 9/0 به بعد، داکر به صورت مستقیم و با کمک کتابخانههایی که LXC هم از آن ها استفاده میکند، مدیریت کانتینرها را انجام میدهد. آن چه داکر را از بقیه متمایز میکند، تکنیک «مدیریت لایه لایه فایل سیستم» و امکان Copy-on-write فایل سیستم است. با توجه به فلسفه «همه چیز فایل است» در سیستمهای مبتنی بر یونیکس، برای انتقال یک سیستمعامل و حتی ذخیره کردن وضعیت برنامههای در حال اجرا، کافی است راهی برای مدیریت همه این فایلها وجود داشته باشد.
هر کانتینر در داکر یک فایلسیستمِ کاملِ لینوکسی است که از چندین لایه تشکیل شده و هر لایه عبارت است از تغییرات فایلهای لایه قبلی نسبت به لایه بعدی. داکر به جای نگه داشتن مجموع فایلهای هرلایه، تنها فایلهایی را که از لایه قبلی تا لایه بعدی تغییر کردهاند، نگه داری میکند. مدیریت این لایهها شبیه به سیستمهای کنترل نسخه (بیش تر از همه git) انجام میشود و امکان گرفتن انشعاب، تگ کردن و برگشتن به یک لایه بهخصوص در داکر وجود دارد. در داکر قابلیت ایجاد یک مخزن مرکزی از این لایهها وجود دارد و به این ترتیب با کمک docker-registry (که خود یک پروژه متنباز دیگر است) امکان انتقال این کانتینرها به راحتی فراهم میشود.
هنگامی که یک نسخه از یک کانتینر به یک ماشین دیگر انتقال پیدا میکند، میتوان تا بینهایت رونوشت (بسته به منابع سختافزاری آن ماشین) از آن کانتینر ایجاد کرد. همه کانتینرها در ابتدا در لایههای فایلسیستم مشترک هستند اما پس از اجرا در لایه جدید به صورت مستقل خواهند بود، این اشتراک در لایهها، باعث کم شدن فضای مورد استفاده میشود.
نصب داکر
نصب داکر بسیار ساده است. داکر معمولا با یک یا دو دستور ساده نصب میشود.
sudo apt-get install docker
برای استفاده از داکر میتوانید به این صورت عمل کنید:
ابتدا سرویس داکر را اجرا کنید. بسته به توزیع گنو/لینوکس شما، طریقه اجرای سرویس متفاوت است. اما در نهایت دستور docker -d
با دسترسی کاربر ریشه، کافی است.
سپس دستورات زیر را اجرا کنید:
(این گام نیاز به اینترنت دارد و یک نسخه از اوبونتو رسمی را از مخزن داکر دانلود خواهد کرد)
docker pull ubuntu
docker run -ti ubunt /bin/bash
تمام شد.
شما دستور bin/bash/ را در یک اوبونتو کاملا مستقل از سیستم خودتان اجرا کردهاید. اگر بیش تر کنکاش کنید متوجه چند نکته خواهید شد:
– یک کارت شبکه مجازی به صورت پُل(bridge) در سیستم شما به وجود آمده است که ارتباط شبکهای شما با این کانتینر و همه کانتینرهای روی یک ماشین را به عهده میگیرد.
– با این که شما در اوبونتو هستید، ولی خروجی دستور uname -a (که نسخه کرنل لینوکس شما را نشان میدهد) همچنان نسخه لینوکس اصلی شما را به شما نشان خواهد داد.
– شما تنها یک نسخه اجرا شده از bash را در سیستم داخلی خواهید دید. داکر هیچ سرویس، یا برنامه دیگری را اجرا نکرده است.
– هیچ گونه دسترسی به پروسههای بیرونی وجود ندارد، فایل سیستمِ بیرونی قابل دسترسی نیست (مگر این که شما قسمتی از آن را با کانتینر به اشتراک گذاشته باشید)
– از بیرون، پروسههای داخلی در دسترس هستند. میتوان آن ها را دید و حتی به آن ها سیگنال Kill فرستاد، ولی هیچ راهی از داخل به بیرون نیست.
– برنامهای مثل htop را در کانتینر نصب کنید و اجرا کنید. خواهید دید که کل CPUهای سیستم بیرونی، کل حافظه و فضای swap بیرونی شما در اختیار کانتینر نیز هست، یعنی اگر چندین کانتینر همزمان اجرا شوند، برخلاف مجازیسازی که از ابتدا همه منابع مورد نیازش را از سیستم جدا خواهد کرد، کانتینر هر زمان که لازم داشته باشد میتواند به منابع بیش تری دسترسی پیدا کند و هر زمان که در حالت ایدهآل باشد میتواند آن منابع را رها کند. البته امکان کنترل منابع برای کانتینرها نیز وجود دارد.
به جز مورد اول، تمام موارد بعدی، تفاوت داکر را با یک مجازیسازی معمولی نشان میدهد.
معماری داکر ساده بوده و فقط شامل چند کامپوننت است. حالا برای درک بهتر مفهوم داکر بهتر است سراغ این کامپوننتها رفته و آنها را بررسی کنیم:
اجزای معماری داکر
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 عرضه میشود. نسخه Community به طور متن باز و کاملا رایگان قابل استفاده است در حالی که نسخه Enterprise یک سری قابلیتهای اضافه داشته و سالانه برای هر Node نزدیک به 1500 دلار هزینه دارد.
دستورات داکر بر اساس کامپوننتها
معماری داکر دارای اجزای مختلفی است و هر کدام از اجزای آن دارای دستورات مخصوص به خود هستند. شکل های زیر به بهترین نحو ممکن دستورات مربوط به هر بخش از داکر را نمایش میدهد.
شرح دستورات داکر
docker ps
این دستور کانتینرهای در حال اجرا را به شما نشان میده همچنین اگر از پارامتر -a استفاده کنید میتوانید کانتینرهای متوقف شده را نیز مشاهده کنید.
docker version
با دستور بالا نیز میتوانید نسخهی نصب شده رو مشاهده کنید.
hub.docker.com
مخزن کانتینرهای داکر
docker -v
برای دیدن ورژن داکر
docker info
برای دیدن اطلاعات داکر نصب شده بر روی سیستماطلاعات کامل از تصاویر و کانتینر ها
docker login
برای استفاده از مخزن داکر باید login کرد
docker compose
برای تعریف و اجرای برنامه هایی که از چند کانتینر تشکیل شده اند بکار میرود. با استفاده از این ابزار میتوان یک یا چند کانتینر را به همراه تمام پارامترهای لازم برای اجرای آنها در یک فایل YAML به نام کامپوزفایل (docker-compose.yml) تعریف کرد و سپس همه آنها را با استفاده از تنها یک دستور ایجاد و راه اندازی نمود. در این فایل هر یک از این کانتینرها یک سرویس نامیده میشود که تعریف دقیق آن به این صورت است.
docker-compose.yml
شما با استفاده از فایل docker-compose.yml میتوانید سرویسهای برنامتان را اجرا و کانفیگ کنید. بعد از آن فقط با استفاده از یک دستور میتوانید همهی سرویسهایی را که در فایل yaml خود مشخص کردید، را بسازید و اجرا کنید.
docker-compose up
استفاده از دستور docker-compose up که باعث اجرای کامپوز و اجرای کامل برنامهی شما میشود.
docker ps -a
دیدن آی دی و نام همه کانتینرهای داکر موجود بر روی ماشین
docker inspect [container-ID] or container_name]
تمام اطلاعات جزئی در مورد یک کانتینر را نشان میدهد.
docker rm [container_name]
برای پاک کردن یک کانینراین سوئیچ برای فورس کردن استفاده می شود در صورتی با دستور بالا کانتینر حذف نشود.
sudo systemctl enable docker
بالا آمدن خودکار داکر در زمان بوت سیستم
docker container ls -a
نمایش تمامی کانتینرها حتی آنهایی که قبلا اجرا شده-a
Docker run hello-world
یک ایمیج آماده برای تست داکر بعد از لاگین کردن
docker images
نمایش های ایمیج های که قبلا به داخل سیستم واکشی شده
docker rmi -f [image-name]
پاک کردن یک ایمیج محلیبرای اجبار
docker search [image-name]
جستجوی یک ایمیج در مخزن
docker pull [image-name]
واکشی یک ایمیج از مخزن
docker container prune
پاک کردن تمامی کانتینرها نه ایمیج ها یعنی وقتی دستورمیزنیم دیگر کانتینری دیده نمی شود
docker run -it [image-name]
اجرای یک کانتینر جدید از ایمیج به صورت یعنی کانتینر فعال میماند و بسته نمیشود
Docker attach [containet-id]
اتصال به یک کانتینر در حال اجرا در یک شل دیگر
“docker commit -a [user-name] -m ‘message’ [container-ID] [new-image-name] “
ذخیره تغییراتِ یک کانتینر در یک ایمیج جدید
docker push [user-image-name]
پوش کردن یک ایمیج در مخزن داکر
Docker pull [user/image]
جهت واکشی یک ایمیج از مخزن
docker run -it -v ${pwd}:/data docker-image
مانت کردن پوشه ی موجود در کانتینر به پوشه جاری در سیستم عامل میزبان-v = volume
docker volume create volume-namedocker run -it –mount source=volume-name, destination=/dir -source image-name
ساختن یک والیوم و مانت کردن آن به یک پوش از کانتینر برای ذخیره داده ها<br>چون کانتینرها داده ها را نگهداری نمیکنند و به محض استاپ شدن داده ها از بین میرود.
docker run -it -d -p 9000=80 image-name
اجرای داکر و مانت کردن پرت 80 کانتینر به پرت 9000 سیستم عامل میزباندر پس زمینه -it به صورت تعاملی
docker logs -f container-ID
دیدن خروجی های یک کانتینر در حال اجرا در یک شل جدید. تفاوتش با دستور attachاین است که موقع خروج از شل، کانتینر به کار قبلی خود ادامه می دهد.
docker stats
وضعیت منابع استفاده شده توسط کانتینر های در حال اجرا را نمایش میدهد.
docker top container-ID
نشان می دهد که داخل یک کانتینر در حال اجرا چه پروسه هایی در حال اجرا هستند.
docker exec -it [containet-id] command
اجرا یک دستور بر روی کانتینر مورد نظر از کنسول جاری مثلا دستور زیر برای ما یک شل باز میکندdocker exec -it [containet-id] sh
docker-compose up docker-compose down
اگر در مسیر جاری فایل docker-compose.yml وجود داشته باشد آن را با دستورات فوق اجرا و استاپ میکنیم.
آدرس کانال تلگرام سایت بیگ دیتا:
آدرس کانال سروش ما:
https://sapp.ir/bigdata_channel
جهت دیدن سرفصل های دوره های آموزشی بر روی اینجا کلیک کنید.
جهت ثبت نام در دوره های آموزشی بر روی اینجا کلیک کنید.
بازدیدها: 4088
برچسبContainer Docker پیکربندی داکر داکر دستورات داکر راه اندازی داکر کانتینر مجازی سازی نصب داکر نصب و راه اندازی و پیکربندی نصب و راه اندازی و پیکربندی داکر (Docker)
همچنین ببینید
پنج راه که واقعیت مجازی (VR) جهان را تغییر خواهد داد
عناوين مطالب: 'واقعیت مجازی چیست؟پنج راه که واقعیت مجازی جهان را تغییر خواهد داد1 – …