بلاگ/نصب Docker و استفاده از آن در CentOS 7
به‌روز شده

نصب Docker و استفاده از آن در CentOS 7

Docker اپلیکیشنی است که روند راه‌اندازی فرآیندهای مرتبط با اپلیکیشن‌ها را درون کانتینرها تسهیل می‌کند. این ابزار چیزی بیشتر شبیه به ماشین‌های مجازی است و فقط قابلیت جابجایی بیشتری دارد، با منابع سازگارتر است و ارتباط بیشتری با سیستم‌عامل هاست خواهد داشت. دو روش برای نصب Docker در CentOS 7 وجود...

1399/01/185159 بازدید
نصب Docker و استفاده از آن در CentOS 7
Docker اپلیکیشنی است که روند راه‌اندازی فرآیندهای مرتبط با اپلیکیشن‌ها را درون کانتینرها تسهیل می‌کند. این ابزار چیزی بیشتر شبیه به ماشین‌های مجازی است و فقط قابلیت جابجایی بیشتری دارد، با منابع سازگارتر است و ارتباط بیشتری با سیستم‌عامل هاست خواهد داشت. دو روش برای نصب Docker در CentOS 7 وجود دارد. یک روش، نصب این ابزار بر روی نصب کنونی سیستم عامل است و دیگری وارد کردن ابزاری با نام Docker Machine در سرور است که به صورت خودکار، نصب Docker را در خود دارد. در این آموزش، نحوه نصب Docker و استفاده از آن را در یک سیستم‌عامل  CentOS 7 فراخواهید گرفت.

پیش‌نیازها

  • نسخه ۶۴ بیتی CentOS 7 Droplet
  • کاربر غیر روت با مجوزهای sudo.
نکته: Docker نیاز به یک نسخه ۶۴ بیتی از CentOS 7 و همین‌طور نسخه کرنل حداقل برابر 3.10 دارد. نسخه پیش‌فرض CentOS 7 Droplet این پیش‌نیازها را در خود خواهد داشت. تمام فرمان‌های موجود در این آموزش باید با یک کاربر غیر روت اجرا شوند. اگر دسترسی روت برای یک فرمان موردنیاز باشد، باید از sudo در ابتدای آن استفاده کنیم.

گام ۱) نصب Docker

بسته نصب Docker موجود در منبع رسمی CentOS 7 ممکن است آخرین نسخه این ابزار نباشد. بنابراین بهتر است آخرین نسخه آن را از منبع رسمی Docker نصب کنید. در این بخش نحوه انجام این کار را به شما نشان می‌دهیم. ولی ابتدا باید پایگاه داده بسته‌ها را بروزرسانی کنیم.
php
sudo yum check-update
حالا فرمان زیر را اجرا کنید. در نتیجه، منبع رسمی Docker اضافه و آخرین نسخه Docker برای نصب دریافت می‌شود.
php
curl -fsSL https://get.docker.com/ | sh
پس از اینکه روند نصب به اتمام رسید، به صورت زیر Docker را اجرا نمایید.
php
sudo systemctl start docker
از طریق فرمان زیر می‌توانید اجرا بودن آن را بررسی کنید.
php
sudo systemctl status docker
خروجی باید چیزی شبیه به زیر باشد؛ اینکه نشان دهد که سرویس فعال و در حال اجراست.
php
docker.service - Docker Application Container EngineLoaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days agoDocs: https://docs.docker.comMain PID: 749 (docker)
نهایتاً مطمئن شوید که پس از نصب Docker، این ابزار پس از هر بار راه‌اندازی سرور، شروع به کار می‌کند.
php
sudo systemctl enable docker
نصب Docker نه تنها سرویس Docker را در اختیار شما قرار می‌دهد، بلکه شما به ابزار خط فرمان یا کلاینت Docker نیز دسترسی پیدا می‌کنید. در ادامه در مورد بهره‌گیری از فرمان docker نیز صحبت خواهیم کرد.

گام ۲) اجرای فرمان Docker بدون Sudo

اجرای فرمان docker به صورت پیش‌فرض نیازمند دسترسی‌های روت است. به همین دلیل است که باید از پیشوند sudo در این فرمان استفاده کنید. همچنین این فرمان می‌تواند از طریق یک کاربر در گروه Docker نیز اجرا شود. به خاطر داشته باشید که این گروه به صورت اتوماتیک در هنگام نصب Docker ایجاد شده است. اگر بدون پیشوند Sudo و یا خارج از گروه Docker بخواهید فرمان docker را اجرا کنید، با خروجی زیر مواجه خواهید شد.
php
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.See 'docker run --help'.
اگر می‌خواهید نیاز به تایپ sudo در هر بار استفاده از فرمان docker نداشته باشید، می‌توانید کلمه کاربری خود را به گروه docker اضافه کنید.
php
sudo usermod -aG docker $(whoami)
برای فعال کردن این تغییر باید از Droplet خارج شوید و دوباره با همان کاربر ورود کنید. اگر می‌خواهید کاربری را به گروه docker اضافه کنید که در حال حاضر با آن وارد نشده‌اید، می توانید به صورت زیر آن را فراخوانی کنید.
php
sudo usermod -aG docker username
در ادامه این آموزش فرض بر این است که شما فرمان docker را به عنوان یک کاربر در گروه docker اجرا می‌کنید. اگر چنین کاری انجام نمی‌دهید، لطفاً فرمان‌های خود را با sudo همراه کنید.

گام ۳) استفاده از فرمان docker

پس از نصب و اجرای Docker، نوبت به آشنایی با ابزار خط فرمان آن می‌رسد. گزینه‌ها و زیرفرمان‌های مختلفی برای استفاده از docker وجود دارد. قالب کار به صورت زیر خواهد بود.
php
docker   
برای مشاهده تمام زیرفرمان‌های در دسترس داریم:
php
docker
تا نسخه 1.11.1 از Docker، لیست کامل زیرفرمان‌ها شامل موارد زیر هستند.
php
attach    Attach to a running containerbuild     Build an image from a Dockerfilecommit    Create a new image from a container's changescp        Copy files/folders between a container and the local filesystemcreate    Create a new containerdiff      Inspect changes on a container's filesystemevents    Get real time events from the serverexec      Run a command in a running containerexport    Export a container's filesystem as a tar archivehistory   Show the history of an imageimages    List imagesimport    Import the contents from a tarball to create a filesystem imageinfo      Display system-wide informationinspect   Return low-level information on a container or imagekill      Kill a running containerload      Load an image from a tar archive or STDINlogin     Log in to a Docker registrylogout    Log out from a Docker registrylogs      Fetch the logs of a containernetwork   Manage Docker networkspause     Pause all processes within a containerport      List port mappings or a specific mapping for the CONTAINERps        List containerspull      Pull an image or a repository from a registrypush      Push an image or a repository to a registryrename    Rename a containerrestart   Restart a containerrm        Remove one or more containersrmi       Remove one or more imagesrun       Run a command in a new containersave      Save one or more images to a tar archivesearch    Search the Docker Hub for imagesstart     Start one or more stopped containersstats     Display a live stream of container(s) resource usage statisticsstop      Stop a running containertag       Tag an image into a repositorytop       Display the running processes of a containerunpause   Unpause all processes within a containerupdate    Update configuration of one or more containersversion   Show the Docker version informationvolume    Manage Docker volumeswait      Block until a container stops, then print its exit code
برای مشاهده گزینه‌های مرتبط با یک فرمان خاص، می‌توانید قالب فرمان زیر را تایپ کنید.
php
docker docker-subcommand --help
برای مشاهده اطلاعات سیستمی مرتبط داریم:
php
docker info

گام ۴) کار با تصاویر یا image های Docker

کانتینرهای Docker از طریق ایمیج‌های Docker اجرا می‌شوند. به صورت پیش‌فرض، این ایمیج‌ها از Docker Hub استخراج می‌شوند. توضیح اینکه Docker Hub یک رجیستری است که توسط Docker، شرکت پشتیبان پروژه Docker مدیریت می‌شود. هر شخصی می‌تواند ایمیج‌های Docker خودش را در Docker Hub بسازد و میزبانی کند. بنابراین بیشتر اپلیکیشن‌ها و توزیع‌های لینوکسی که شما در آنها نیاز به اجرای کانتینرهای Docker دارید، دارای ایمیج‌هایی هستند که در Docker Hub میزبانی می‌شوند. برای بررسی اینکه به دریافت ایمیج از Docker Hub دسترسی دارید، تایپ کنید:
php
docker run hello-world
خروجی مطابق زیر باید نشان دهد که Docker به‌خوبی اجرا شده است.
php
Hello from Docker.This message shows that your installation appears to be working correctly....
با استفاده از زیرفرمان search در فرمان docker می‌توانید ایمیج‌های در دسترس در Docker Hub را مشاهده کنید. برای مثال برای ایمیج CentOS داریم:
php
docker search centos
این اسکریپت به جستجوی Docker Hub می‌پردازد و لیستی از ایمیج‌هایی که عنوان آنها با رشته جستجو مطابقت می‌کند، ارائه می‌دهد. در اینجا، نتایجی مشابه زیر خواهیم داشت.
php
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDcentos                          The official build of CentOS.                   2224      [OK]jdeathe/centos-ssh              CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8...   22                   [OK]jdeathe/centos-ssh-apache-php   CentOS-6 6.7 x86_64 / Apache / PHP / PHP M...   17                   [OK]million12/centos-supervisor     Base CentOS-7 with supervisord launcher, h...   11                   [OK]nimmis/java-centos              This is docker images of CentOS 7 with dif...   10                   [OK]torusware/speedus-centos        Always updated official CentOS docker imag...   8                    [OK]nickistre/centos-lamp           LAMP on centos setup                            3                    [OK]...
در ستون OFFICIAL، گزینه OK نشان می‌دهد که یک ایمیج ساخته شده و از طرف شرکت سازنده پشتیبانی می‌شود. پس از شناسایی ایمیج دلخواهتان، می‌توانید با استفاده از زیرفرمان pull آن را بر روی کامپیوتر دریافت کنید.
php
docker pull centos
پس از دریافت یک ایمیج، باید کانتینری را که از ایمیج دانلود شده استفاده می‌کند، با زیرفرمان run اجرا کنید. در صورتی که این ایمیج دریافت نشده بود، Docker ابتدا ایمیج را دانلود می‌کند و سپس کانتینری را برای استفاده از آن اجرا می‌نماید.
php
docker run centos
برای مشاده ایمیجی که در کامپیوتر شما دریافت شده، داریم:
php
docker images
خروجی چیزی شبیه به زیر خواهد بود:
php
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZEcentos              latest              778a53015523        5 weeks ago         196.7 MBhello-world         latest              94df4f0ce8a4        2 weeks ago         967 B
همان‌طور که در ادامه خواهید دید، ایمیج‌هایی که برای اجرای کانتینرها استفاده می‌کنید، قابلیت اصلاح و تولید ایمیج‌های جدید را دارند. این ایمیج‌های جدید به Docker Hub یا دیگر رجیستری‌های Docker ارسال می‌شوند.

گام ۵) اجرای یک کانتینر Docker

کانتینر hello-world که در گام قبلی اجرا کردید، نمونه‌ای از کانتینری است که اجرا و پس از نمایش یک پیام آزمایشی، بسته می‌شود. البته کانتینرها کارآیی بیشتر از این دارند و می‌توانند هوشمند باشند. به‌علاوه، آنها همانند ماشین‌های مجازی،‌ سازگاری بیشتری با منابع دارند. به عنوان مثال، بیایید یک کانتینر با استفاده از اخرین نسخه ایمیج CentOS اجرا کنیم. ترکیب گزینه‌های –i و –t موجب ایجاد یک دسترسی هوشمند به کانتینر می‌شود.
php
docker run -it centos
ورودی فرمان شما در این حالت تغییر خواهد کرد؛ به این دلیل الان درون کانتینر هستید. نتیجه به فرم زیر خواهد بود:
php
[root@59839a1b7de2 /]#نکته: شناسه کانتینر را در نمایشگر فرمان یادداشت کنید. در نمونه بالا، این شناسه برابر 59839a1b7de2 است.حالا می‌توانید هر نوع فرمانی را درون کانتینر اجرا کنید. به عنوان نمونه، بیایید سرور MariaDB را در این کانتینر نصب کنیم. نیازی به پیشوند sudo در فرمان‌ها وجود ندارد؛ چرا که درون کانتینر و با مجوزهای روت کار می‌کنید.yum install mariadb-server

گام ۶) اِعمال تغییرات یک کانتینر به یک ایمیج Docker

وقتی یک ایمیج Docker را راه‌اندازی می‌کنید، می‌توانید همانند یک ماشین مجازی، اقدام به ساخت، اصلاح و یا حذف فایل‌های جدید کنید. البته تغییراتی که انجام می‌دهید، فقط در همان کانتینر انجام می‌شوند.  شما می‌توانید این کانتینرا را اجرا و متوقف نمایید. ولی وقتی آن را با فرمان docker rm از بین بردید، تغییرات شما برای همیشه از دست خواهند رفت. در اینجا خواهیم دید که چگونه وضعیت یک کانتینر را به عنوان یک ایمیج Docker جدید ذخیره کنید. پس از نصب سرور MariaDB درون کانتینر CentOS، شما یک کانتینر دارید که یک ایمیج اجرا کرده است. ولی کانتینر با ایمیجی که برای ساختن آن استفاده کرده‌اید، متفاوت است. برا ذخیره کردن وضعیت کانتینر به عنوان یک ایمیج جدید، ابتدا باید از آن خارج شوید.
php
exit
سپس با استفاده از فرمان زیر، تغییرات را به یک ایمیج Docker جدید وارد کنید. گزینه –m برای نشان دادن پیامی است که حاوی تغییرات شماست. این در حالی است که از گزینه –a برای مشخص‌کردن کدنویس استفاده شده است. شناسه کانتینر همانی است که در شروع کار با docker آن را یادداشت کرده‌اید. اگر منابع اضافی در Docker Hub اضافه نکرده‌ باشید، معمولاً منبع نام کاربری Docker Hub شما خواهد بود.
php
docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name
به عنوان مثال:
php
docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 59839a1b7de2 finid/centos-mariadb
نکته: وقتی یک ایمیج را تغییر می‌دهید، ایمیج جدید به صورت محلی و در کامپیوتر شما ذخیره می‌شود. در ادامه این مطلب آموزشی، خواهیم دید که چگونه می‌توان یک ایمیج را به رجیستری‌های Docker مانند Docker وارد کرد. در این صورت، ایمیج شما ممکن است مورد استفاده دیگران نیز قرار گیرد. پس از اینکه عملیات شما به پایان رسید، فهرست‌گیری از ایمیج‌های Docker موجود در کامپیوتر شما می‌تواند ایمیج جدید را به شما نشان دهد. همین‌طور نمونه قبلی ایمیج را در این لیست خواهید دید.
php
docker images
نمونه خروجی
php
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZEfinid/centos-mariadb   latest              23390430ec73        6 seconds ago       424.6 MBcentos                 latest              778a53015523        5 weeks ago         196.7 MBhello-world            latest              94df4f0ce8a4        2 weeks ago         967 B
در مثال بالا، ایمیج جدید centos-mariadb نام دارد. این ایمیج با استفاده از ایمیج کنونی CentOS در Docker Hub ساخته شده است. اختلاف حجم باعث می‌شود که تغییرات صورت‌گرفته نشان داده شوند. در این مثال، تغییری که داشته‌ایم، نصب سرور MariaDB بوده است. بنابراین دفعه بعد که خواستید یک کانتینر با استفاده از CentOS همراه با سرور از پیش‌ نصب شده MariaDB داشته باشید، می‌توانید از این ایمیج جدید استفاده کنید. ایمیج‌ها می‌توانند از چیزی به نام Dockerfile نیز ساخته شوند. البته مراحل این کار بسیار پیچیده و گسترده هستند و به خارج از مبحث این مطلب کشیده می‌شوند.

گام ۷) فهرست‌بندی کانتینرهای Docker

اگر برای مدت‌زمانی از Docker استفاده کنید، ممکن است چندین کانتینر فعال و غیرعفال را در کامپیوتر خود داشته باشید. برای مشاهده کانتینرهای فعال داریم:
php
docker ps
خروجی شما چیزی شبیه به این خواهد بود.
php
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMESf7c79cc556dd        centos              "/bin/bash"         3 hours ago         Up 3 hours                              silly_spence
برای اینکه کل کانتینرها، اعم از فعال و غیرفعال را ببینید، از گزینه –a استفاده کنید.
php
docker ps -a
گزینه –l نیز برای مشاهده اخرین کانتینری است که ساخته‌اید.
php
docker ps -l
توقف اجرای یک کانتینر فعال با کمک فرمان زیر به‌راحتی امکان‌پذیر است.
php
docker stop container-id
شناسه کانتینر از خروجی فرمان docker ps در اختیار قرار می‌گیرد.

گام ۸) انتقال ایمیج‌های Docker به منبع Docker

گام منطقی بعدی پس از ساختن یک ایمیج جدید با استفاده از ایمیج کنونی، به اشتراک‌گذاشتن آن با چند نفر از دوستانتان است. این کار می‌تواند در دنیای Docker Hub یا  دیگر رجیستری‌های Docker که به آن دسترسی دارید، انجام گیرد. در هر صورت، برای انتقال یک ایمیج، باید یک حساب کاربری از رجیستری موردنظرتان داشته باشید. در این بخش به شما نشان می‌دهیم که چگونه یک ایمیج Docker را به Docker Hub ارسال کنید. برای ایجاد یک حساب کاربری در Docker Hub، باید در آن ثبت‌نام کنید. سپس قبل از ارسال ایمیج، باید به Docker Hub وارد شوید. در این حالت، از شما خواسته می‌شود که ورود خود را تأیید کنید.
php
docker login -u docker-registry-username
اگر پسورد را به‌درستی وارد کرده باشید، تأییدیه را با موفقیت انجام می‌دهید. حالا با فرمان زیر می‌توانید ایمیج خود را ارسال نمایید.
php
docker push docker-registry-username/docker-image-name
این کار ممکن است کمی طول بکشید. نهایتاً نتیجه‌ای مانند زیر خواهید داشت.
php
The push refers to a repository [docker.io/finid/centos-mariadb]670194edfaf5: Pushed5f70bf18a086: Mounted from library/centos6a6c96337be1: Mounted from library/centos...
پس از وارد کردن یک ایمیج به رجیستری، این ایمیج باید در داشبورد حساب کاربری شما لیست شود. درست همانند چیزی که در تصویر زیر دیده می‌شود.
php
After pushing an image to a registry, it should be listed on your account’s dashboard, like that show in the image below.
لیست ایمیج‌ها در Docker Hub
لیست ایمیج‌ها در Docker Hub
اگر تلاش شما برای ارسال ایمیج ناموفق بود، احتمالاً وارد سایت نشده‌اید.
php
The push refers to a repository [docker.io/finid/centos-mariadb]e3fbbfb44187: Preparing5f70bf18a086: Preparinga3b5c80a4eba: Preparing7f18b442972b: Preparing3ce512daaf78: Preparing7aae4540b42d: Waitingunauthorized: authentication required
وارد شوید و دوباره برای ارسال اقدام کنید.

جمع‌بندی

مباحث مربوط به نصب و استفاده از Docker بسیار فراتر از چیزی است که در این مطلب گنجانده شده است. امّا احتمالاً این برای شروع به کار شما با Docker در CentOS 7 مناسب خواهد بود. همانند بسیاری از پروژه‌های متن‌باز، پایگاه کد Docker به‌سرعت در حال پیشرفت و توسعه است و بهتر است به صورت مرتبط برای کسب ‌آخرین اطلاعات، صفحه این پروژه را دنبال کنید.