آموزش نصب Docker و استفاده از Image و Container در Ubuntu 18.04

نصب docker container image

آموزش نصب Docker و استفاده از Image و Container در Ubuntu18.04

How To Install Docker and Use Image and Container on Ubuntu 18.04

معرفی

داکر Docker یک برنامه کاربردی است که فرآیند مدیریت پردازش های برنامه ها را توسط مخزن ها Containers راحت تر می کند. مخزن ها منابع ایزوله شده ای هستند که اجازه می دهند پردازش برنامه های شما در آن محیط ها انجام شوند. آن ها بسیار شبیه به ماشین ها مجازی هستند ، اما مخزن ها قابل حمل (Portable) هستند و همچنین منابع سازگار بیشتری دارند وبه سیستم عامل میزبان وابسته هستند. در این آموزش نسخه عمومی Docker Community Edition (CE)  را نصب و استفاده می کنیم. خودتان Docker را نصب می کنید و با مخزن ها Containers و منبع ها Images کار می کنید ، و یک منبع image را به منابع Docker اضافه می کنید.

برای درک بهتر از اجزای متفاوت مخزن Docker این مطلب را مطالعه کنید :

The Docker Ecosystem: An Introduction to Common Components

پیش نیاز ها

در این آموزش به موارد زیر نیاز دارید :

  • یک سرور مجازی Ubuntu 18..04 با دسترسی یک کاربر غیر ریشه non-root و عضو sudoer همراه با یک دیوار آتش Firewall.  
  • یک حساب کاربری در Docker Hube ، البته اگر می خواهید که یک image برای خودتان بسازید و طبق راهنمای مرحله ۷ و ۸ آن را در Docker Hub قرار دهید.

مرحله اول – نصب Docker

بسته (package) نصب داکر در منابع رسمی اوبونتو موجو می باشد ولی ممکن است که آخرین نسخه در این منابع موجود نباشد برای همین آخرین نسخه را از منابع رسمی Docker نصب می کنیم. برای این کار منبع بسته (package source) جدید را به سیستم اضافه می کنیم و برای اطمینان از معتبر بودن دانلود بسته کلید GPG را اضافه می کنیم ، سپس بسته را نصب می کنیم.

ابتدا لیست بسته های موجود را نصب می کنیم :

سپس ، تعدادی از بسته های پیش نیاز را با apt نصب می کنیم :

سپس کلید GPG مربوط به منابع Docker را به سیستم اضافه می کنیم :

منابع Docker را به منبع APT اضافه می کنیم :

سپس دیتابیس بسته ها را منابع جدید Docker که اضافه کردیم را به روز رسانی می کنیم :

در ادامه باید از اینکه نصب از منابع Docker به جای منابع پیش فرض Ubuntu  انجام می شود مطمئن شویم :

خروجی باید شبیه به این باشد ، ولی ممکن است که نسخه Docker متفاوت باشد :

دقت کنید که docker-ce هنوز نصب نشده ولی برای نصب از منبع Docker بر روی Ubuntu 18.04 (bionic) انتخاب شده است.

در نهایت ، با دستور زیر Docker را نصب می کنیم :

اکنون Docker باید بر روی سیستم شما نصب شده باشد ، سرویس daemon آن اجرا شده باشد و هنگام راه اندازی مجدد سیستم (reboot) برای اجرای خودکار ، فعال (enable) شده باشد.

خروجی این دستور باید مشابه زیر و نشان دهد که سرویس Docker در حال اجرا و فعال است :

نصب کردن Docker فقط سرویس آن را در اخیتار شما قرار نمی دهد بلکه ابزار خط فرمان docker یا Docker Client نیز در اختیار شما هستند. بعدا در این آموزش درباره خط فرمان docker توضیح خواهیم داد.

مرحله دوم – اجرای دستور Docker بدون Sudo ( اختیاری )

به صورت پیش فرض دستور docker فقط با کاربر root در گروه docker که به صورت خودکار هنگام فرآیند نصب Docker ایجاد شده ، اجرا می شود. اگر بخواهید که دستور docker را بدون استفاده از sudo یا گروه docker اجرا کنید خروجی مشابه به این را مشاهده خواهید کرد :

اگر به هر دلیلی می خواهید که هنگام اجرای دستور docker از sudo استفاده نکنید ، باید نام کاربریتان را به گروه docker اضافه کنید :

برای اعمال تغییرات برای عضو جدید گروه ، یک بار از سرور خارج شوید (logout) و مجددا وارد شوید و دستور زیر را وارد کنید :

در ادامه کار از شما خواسته خواهد شد که رمز عبور این کاربر را وارد کنید.

با دستور زیر مشاهده می کنید که نام کاربریتان در گروه docker اضافه شده است :

اگر می خواهید کاربری را که با آن وارد سیستم نشده اید به گروه docker اضافه کنید ، با دستور زیر کاربر را به صورت مستقیم عضو گروه کنید :

در ادامه آموزش فرض می کنیم که شما دستور docker را با یک کاربر عضو گروه docker اجرا می کنید اگر به هر دلیل نمی خواهید این کار را انجام دهید از sudo استفاده کنید.

در ادامه به توضیح دستور docker می پردازیم.

 

مرحله سوم – استفاده از دستور docker

دستور docker شامل زنجیره ای از گزینه ها (options) و دستوراتی است که دارای آرگومان و ورودی می باشد. قالب دستوری آن به این صورت می باشد :

برای دیدن تمامی دستورات زیر مجموعه ، دستور زیر را وارد کنید :

در Docker 18 لیست کامل دستورات زیر مجموعه به این صورت است :

 

برای مشاهده گزینه های (options) قابل استفاده برای یک دستور زیر مجموعه ، دستور زیر را وارد کنید :

برای مشاهده اطلاعات کاملی از Docker ، دستور زیر را استفاده کنید :

در ادامه برخی از این دستورات را بررسی می کنیم. برای شروع از کار کردن با منبع (image) شروع می کنیم.

 

مرحله چهارم – کارکردن با Docker Images

مخزن های  Docker containers از منبع های داکر Docker images ساخته شده اند و به صورت پیش فرض ، Docker این image ها را از Docker Hub دریافت می کند ، که توسط شرکت Docker که تامین کننده آن نیز هست ، مدیریت می شود. هر کسی می تواند Docker images های خود را در Docker Hub قرار دهد ، بنابراین image بیشتر برنامه ها و توزیع های لینوکس که به آن نیاز دارید در آنجا وجود خواهند داشت.

برای بررسی امکان دسترسی و دانلود از Docker Hub ، دستور زیر را وارد کنید :

این خروجی نشان می دهد که Docker به درستی کار می کند :

در ابتدا Docker قادر به پیدا کردن hello-world به صورت محلی (locally) نبوده ، سپس این image را که یک مخزن (container)پیش فرض است را از Docker Hub دانلود می کند. Docker به محض دانلود کردن image ، یک مخزن از آن ایجاد می کند و برنامه اجرا شده داخل مخزن ، پیغامی را نمایش می دهد.

با استفاده زیر دستور search با دستور docker می توانید image های قابل دسترس در Docker Hub را پیدا کنید. برای مثال برای پیدا کردن Ubuntu image ، دستور زیر را وارد کنید :

این اسکریپت Docker Hub را جستجو کرده و لیستی از image های موجود را که نام آن ها با رشته ای که وارد کرده اید ، مطابقت داشته را نمایش می دهد. در این جا خروجی شما باید مشابه به این باشد :

 

در ستون OFFICIAL ، مقدار OK نشان دهنده این است که این image توسط شرکت تامین کننده آن پشتیبانی می شود. هر زمان image ای را که دوست داشتید پیدا کردید برای دانلود آن بر روی سیستم خودتان از زیر دستور pull استفاده کنید.

با استفاده از دستور زیر image رسمی ubuntu را بر کامپیوتر خود دانلود کنید :

خروجی مشابه این را خواهید دید :

بعد از دانلود image ، می توانید مخزن (container) را با استفاده از image دانلود شده و با زیر دستور run اجرا کنید. البته همانطور که در مثال hello-world دیدیم ، زمانی که دستور docker را با زیر دستور run اجرا شود و image مورد نظر دانلود نشده باشد ، Docker client آن را ابتدا دانلود کرده و سپس اجرا می کند.

برای مشاهده image های دانلود شده در کامپیوترتان دستور زیر را وارد کنید :

خروجی این دستور مشابه زیر است :

همانطور که در ادامه این آموزش خواهیم دید ، می توانید image هایی که در مخزن ها (containers) اجرا کردید را ویرایش کرده و image جدید تولید کنید و آن ها را در Docker Hub آپلود کنید.

در ادامه چگونگی اجرای مخزن ها را بیشتر بررسی می کنیم.

 

مرحله پنجم – اجرا کردن یک Docker Container

مخرن hello-wolrd که در مرحله قبل اجرا کردیم ، یک مثال از اجرای یک مخزن (container) و خارج شدن از آن پس از نمایش یک پیام آزمایشی است. مخزن ها شبیه به ماشین های مجازی هستند ، با کمی منابع سازگار تر و می توانند در تعامل و ارتباط ( با کاربر یا منابع دیگر) باشند و استفاده از آن ها بیش از آن چیزی است که دیدیم.

به عنوان مثال یک مخزن را با Ubuntu image اجرا می کنیم. استفاده از ترکیب گزینه های i- و t- دسترسی به پوسته (shell) در مخزن را به شما می دهد :

خط فرمان شما تغییر می کند و این نشانگر این است که در محیط خط فرمان مخزن هستید و شکل آن شبیه به این است :

در خط فرمان جدید شماره id مخزن (container) نمایش داده می شود که در این مثال d9b100f2f636 است. بعدا اگر لازم بود که این مخزن را حذف کنید به این شماره نیاز دارید.

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

سپس می توانید هر برنامه ای را که بخواهید در مخزن نصب کنید. برای مثال Node.js را نصب می کنیم :

نصب Node.js از منابع رسمی Ubuntu انجام می شود. پس از نصب ، صحت نصب برنامه را بررسی می کنیم :

نسخه برنامه نصب شده نمایش داده می شود :

هر تغییری که در داخل مخزن (container) انجام دهید بر روی مخزن اعمال می شود.

برای خروج دستور exit را وارد کنید.

در ادامه به بررسی مدیریت مخازن موجود در سیستم می پردازیم.

 

مرحله ششم – مدیریت مخازن داکر – Managing Docker Containers

پس از مدتی استفاده از Docker ، مخزن های زیادی را به صورت فعال و غیر فعال در سیستم خود خواهید داشت. برای دیدن مخزن ها فعال از دستور زیر استفاده کنید :

خروجی مشابه به این را مشاهده می کنید :

تا اینجا در این آموزش از دو مخزن (container) استفاده کردیم که یکی از  hello-world image و دیگری از ubuntu image استفاده می کنند. هر دو این مخزن ها الان روی سیستم شما فعال نیستند ولی در سیستم وجود دارند.

برای دیدن همه مخزن های فعال و غیر فعال دستور docker ps را با گزینه a- وارد کنید :

خروج شبیه به این را مشاهده می کنید :

برای دیدن آخرین مخزن ای که ایجاد کردید از l- استفاده کنید :

برای اجرای یک مخزن (container) ای که متوقف شده است از docker start با شماره id مخزن مورد نظر یا نام مخزن استفاده کنید. در اینجا مخزن Ubuntu-base را با شماره ID آن d9b100f2f636 اجرا می کنیم :

مخزن مورد نظر مجددا اجرا شده و با دستور docker ps  می توانید وضعیت آن را مشاهده کنید :

برای متوقف کردن یک مخزن (container) از دستور docker stop با شماره ID آن مخزن یا نام آن مخزن استفاده کنید. در اینجا از نام sharp_volhard که Docker به مخزن داده است استفاده می کنیم :

هر زمان که به یک مخزن نیاز نداشتید می توانید آن را با دستور docker rm حذف کنید ، و در اینجا هم از نام یا شماره ID مخزن استفاده کنید. از دستور docker ps -a برای پیدا کردن شماره ID یا نام اختصاص داده شده به مخزنی که از  hello-world image ایجاد شده ، استفاده می کنیم و آن را حذف می کنیم.

می توانید با استفاده از گزینه name– با اجرا کردن مخزن جدید نام آن را مشاهده کنید. همچنین با استفاده از گزینه rm– مخزن جدید را اجرا کنید ، که بعد از متوقف کردن مخزن ، به صورت خودکار حذف می شود. با استفاده از دستور docker run help لیست کامل گزینه های موجود را به همراه توضیحات می توانید مطالعه کنید.

می توانید container ها را به image تبدیل کرده و container جدیدی را با استفاده از آن image اجرا کنید. در ادامه به توضیح این کار می پردازیم.

 

مرحله هفتم – اعمال تغییرات یک Container به یک Docker Image

وقتی که یک docker image را اجرا می کنید ، مانند یک ماشین مجازی می توانید فایل هایی را ایجاد ، حذف یا تغییر دهید. همه تغییراتی که انجام می دهید بر روی مخزن (container) اعمال می شود و همچنین می توانید آن را متوقف و اجرا کنید ، ولی با حذف مخزن با استفاده از دستور docker rm همه چیز از بین خواهد رفت.

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

این دستور تغییرات مخزن را به یک image جدید اعمال می کند :

گزینه m- توضیحی را ثبت می کند که خودتان و دیگران بدانید که چه تغییراتی را انجام داده اید ، و a- برای مشخص کردن نویسنده می باشد.container_id را نیز به تازگی در آموزش توضیح دادیم که هنگام شروع کار با docker ، چطور آن را به دست آورید. مگر اینکه مخزن اضافی در Docker Hub ساخته باشد که در اینصورت repository معمولا نام کاربر شما در Docker Hub می باشد.

برای مثال برای کاربر sammy با شماره مخزن d9b100f2f636 ، دستور صحیح به شکل زیر است :

وقتی که یک image  را commit می کنید ، image جدید به صورت محلی بر روی سیستم شما ذخیره می شود. در مرحله بعد خواهیم گفت که چطور یک image را در Docker ثبت کنید تا دیگران نیز بتوانند به آن دسترسی داشته باشند.

اگر مجددا image های موجود را بررسی کنید ، image جدید و image  قدیم را که از آن گرفته شده است را مشاهده خواهید کرد :

خروجی شبیه این است :

در این مثال ubuntu-nodejs یک image جدید است که از ubuntu image متعلق به Docker Hub گرفته شده است. تفاوت اندازه نیز این مطلب را تایید می کند. و در اینجا تغییرات Node.js نیز نصب شده است. بنابراین اگر مجددا نیاز داشتید که از Ubuntu همراه با NodeJS استفاده کنید ، فقط کافی است که از این image استفاده کنید.

همچنین با استفاده از Dockerfile می توانید به صورت خودکار نرم افزار را در یک image جدید نصب کنید. که در این آموزش به این مطلب نمی پردازیم.

در ادامه image جدید را با دیگران به اشتراک می گذاریم تا آنها نیز بتوانند از آن یک مخزن (container) ایجاد کنند.

 

مرحله هشتم – قرار دادن Docker Image در منابع Docker

اقدام منطقی بعد از ایجاد image جدید این است که این image را با برخی از دوستان خود یا در کل جهان با Docker Hub و یا Docker های دیگر که به آنها دسترسی دارید ، به اشتراک بگذارید. برای قرار دادن image در Docker Hub یا هر Docker دیگر باید یک حساب کاربر در آن جا داشته باشید.

در این جا یک image را در Docker Hub قرار می دهیم. برای اینکه یک Docker اختصاصی برای خودتان ایجاد کنید این مطلب را مطالعه کنید :

How To Set Up a Private Docker Registry on Ubuntu 14.04

برای قرار دادن image ابتدا وارد Docker Hub شوید :

برای احراز هویت رمز عبور از شما درخواست می شود که باید رمز عبور Docker Hub را وارد کنید. بعد از وارد کردن رمز صحیح و هویت شما تایید می شود.

نکته : اگر نام کاربری Docker شما با نام کاربری سیستم محلی شما که با آن image جدید را ایجاد کردید متفاوت است ، باید برچسب (tag) با نام کاربری ثبت شده در Docker بزنید. برای آخرین مثالی که زدیم به این صورت باید عمل کنید :

سپس می توانید image خود را قرار دهید :

شکل دستوری برای قرار دادن ubuntu-nodejs image  به صورت زیر خواهد بود :

ممکن است که روند آپلود image کمی زمانبر باشد ، ولی بعد از اتمام آپلود خروجی مشابه به زیر خواهد بود :

بعد از قرار دادن یک image ، باید در داشبورد حساب کاربری شما مثل تصویر زیر نمایش داده شود.

docker dashboard

اگر با خطایی مشابه خطایی که در زیر نمایش داده شده مواجه شدید ، به این معنی است که شما به درستی وارد نشده اید :

مجددا با docker login وارد شوید و عملیات قرار دادن image را تکرار کنید. سپس بررسی کنید که image در صفحه منابع Docker Hub موجود باشد.

اکنون می توانید از docker pull sammy/ubuntu-nodejs برای قرار دادن image در ماشین جدید استفاده کنید و با آن یک مخزن (container) جدید ایجاد کنید.

 

پایان

در این آموزش Docker را نصب کردیم و با image ها و container ها کار کردیم و image ای که در آن تغییراتی داده بودیم را در Docker Hub قرار دادیم. در این مطلب مفاهیم پایه مربوطه به Docker را انجام دادیم. 

Leave a Reply