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 نصب کنید. در این بخش نحوه انجام این کار را به شما نشان می‌دهیم.

ولی ابتدا باید پایگاه داده بسته‌ها را بروزرسانی کنیم.


sudo yum check-update

حالا فرمان زیر را اجرا کنید. در نتیجه، منبع رسمی Docker اضافه و آخرین نسخه Docker برای نصب دریافت می‌شود.


curl -fsSL https://get.docker.com/ | sh

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


sudo systemctl start docker

از طریق فرمان زیر می‌توانید اجرا بودن آن را بررسی کنید.


sudo systemctl status docker

خروجی باید چیزی شبیه به زیر باشد؛ اینکه نشان دهد که سرویس فعال و در حال اجراست.


docker.service - Docker Application Container Engine

Loaded: 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 ago

Docs: https://docs.docker.com

Main PID: 749 (docker)

نهایتاً مطمئن شوید که پس از نصب Docker، این ابزار پس از هر بار راه‌اندازی سرور، شروع به کار می‌کند.


sudo systemctl enable docker

نصب Docker نه تنها سرویس Docker را در اختیار شما قرار می‌دهد، بلکه شما به ابزار خط فرمان یا کلاینت Docker نیز دسترسی پیدا می‌کنید. در ادامه در مورد بهره‌گیری از فرمان docker نیز صحبت خواهیم کرد.

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

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


docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.

See 'docker run --help'.

اگر می‌خواهید نیاز به تایپ sudo در هر بار استفاده از فرمان docker نداشته باشید، می‌توانید کلمه کاربری خود را به گروه docker اضافه کنید.


sudo usermod -aG docker $(whoami)

برای فعال کردن این تغییر باید از Droplet خارج شوید و دوباره با همان کاربر ورود کنید.

اگر می‌خواهید کاربری را به گروه docker اضافه کنید که در حال حاضر با آن وارد نشده‌اید، می توانید به صورت زیر آن را فراخوانی کنید.


sudo usermod -aG docker username

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

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

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


docker [option] [command] [arguments]

برای مشاهده تمام زیرفرمان‌های در دسترس داریم:


docker

تا نسخه 1.11.1 از Docker، لیست کامل زیرفرمان‌ها شامل موارد زیر هستند.


attach    Attach to a running container

build     Build an image from a Dockerfile

commit    Create a new image from a container's changes

cp        Copy files/folders between a container and the local filesystem

create    Create a new container

diff      Inspect changes on a container's filesystem

events    Get real time events from the server

exec      Run a command in a running container

export    Export a container's filesystem as a tar archive

history   Show the history of an image

images    List images

import    Import the contents from a tarball to create a filesystem image

info      Display system-wide information

inspect   Return low-level information on a container or image

kill      Kill a running container

load      Load an image from a tar archive or STDIN

login     Log in to a Docker registry

logout    Log out from a Docker registry

logs      Fetch the logs of a container

network   Manage Docker networks

pause     Pause all processes within a container

port      List port mappings or a specific mapping for the CONTAINER

ps        List containers

pull      Pull an image or a repository from a registry

push      Push an image or a repository to a registry

rename    Rename a container

restart   Restart a container

rm        Remove one or more containers

rmi       Remove one or more images

run       Run a command in a new container

save      Save one or more images to a tar archive

search    Search the Docker Hub for images

start     Start one or more stopped containers

stats     Display a live stream of container(s) resource usage statistics

stop      Stop a running container

tag       Tag an image into a repository

top       Display the running processes of a container

unpause   Unpause all processes within a container

update    Update configuration of one or more containers

version   Show the Docker version information

volume    Manage Docker volumes

wait      Block until a container stops, then print its exit code

برای مشاهده گزینه‌های مرتبط با یک فرمان خاص، می‌توانید قالب فرمان زیر را تایپ کنید.


docker docker-subcommand --help

برای مشاهده اطلاعات سیستمی مرتبط داریم:


docker info

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

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

برای بررسی اینکه به دریافت ایمیج از Docker Hub دسترسی دارید، تایپ کنید:


docker run hello-world

خروجی مطابق زیر باید نشان دهد که Docker به‌خوبی اجرا شده است.


Hello from Docker.

This message shows that your installation appears to be working correctly.

...

با استفاده از زیرفرمان search در فرمان docker می‌توانید ایمیج‌های در دسترس در Docker Hub را مشاهده کنید. برای مثال برای ایمیج CentOS داریم:


docker search centos

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


NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

centos                          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 آن را بر روی کامپیوتر دریافت کنید.


docker pull centos

پس از دریافت یک ایمیج، باید کانتینری را که از ایمیج دانلود شده استفاده می‌کند، با زیرفرمان run اجرا کنید. در صورتی که این ایمیج دریافت نشده بود، Docker ابتدا ایمیج را دانلود می‌کند و سپس کانتینری را برای استفاده از آن اجرا می‌نماید.


docker run centos

برای مشاده ایمیجی که در کامپیوتر شما دریافت شده، داریم:


docker images

خروجی چیزی شبیه به زیر خواهد بود:


[secondary_lable Output]

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              latest              778a53015523        5 weeks ago         196.7 MB

hello-world         latest              94df4f0ce8a4        2 weeks ago         967 B

همان‌طور که در ادامه خواهید دید، ایمیج‌هایی که برای اجرای کانتینرها استفاده می‌کنید، قابلیت اصلاح و تولید ایمیج‌های جدید را دارند. این ایمیج‌های جدید به Docker Hub یا دیگر رجیستری‌های Docker ارسال می‌شوند.

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

کانتینر hello-world که در گام قبلی اجرا کردید، نمونه‌ای از کانتینری است که اجرا و پس از نمایش یک پیام آزمایشی، بسته می‌شود. البته کانتینرها کارآیی بیشتر از این دارند و می‌توانند هوشمند باشند. به‌علاوه، آنها همانند ماشین‌های مجازی،‌ سازگاری بیشتری با منابع دارند.

به عنوان مثال، بیایید یک کانتینر با استفاده از اخرین نسخه ایمیج CentOS اجرا کنیم. ترکیب گزینه‌های –i و –t موجب ایجاد یک دسترسی هوشمند به کانتینر می‌شود.


docker run -it centos

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


[root@59839a1b7de2 /]#

نکته: شناسه کانتینر را در نمایشگر فرمان یادداشت کنید. در نمونه بالا، این شناسه برابر 59839a1b7de2 است.

حالا می‌توانید هر نوع فرمانی را درون کانتینر اجرا کنید. به عنوان نمونه، بیایید سرور MariaDB را در این کانتینر نصب کنیم. نیازی به پیشوند sudo در فرمان‌ها وجود ندارد؛ چرا که درون کانتینر و با مجوزهای روت کار می‌کنید.

[php]

yum install mariadb-server

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

وقتی یک ایمیج Docker را راه‌اندازی می‌کنید، می‌توانید همانند یک ماشین مجازی، اقدام به ساخت، اصلاح و یا حذف فایل‌های جدید کنید. البته تغییراتی که انجام می‌دهید، فقط در همان کانتینر انجام می‌شوند.  شما می‌توانید این کانتینرا را اجرا و متوقف نمایید. ولی وقتی آن را با فرمان docker rm از بین بردید، تغییرات شما برای همیشه از دست خواهند رفت.

در اینجا خواهیم دید که چگونه وضعیت یک کانتینر را به عنوان یک ایمیج Docker جدید ذخیره کنید.

پس از نصب سرور MariaDB درون کانتینر CentOS، شما یک کانتینر دارید که یک ایمیج اجرا کرده است. ولی کانتینر با ایمیجی که برای ساختن آن استفاده کرده‌اید، متفاوت است.

برا ذخیره کردن وضعیت کانتینر به عنوان یک ایمیج جدید، ابتدا باید از آن خارج شوید.


exit

سپس با استفاده از فرمان زیر، تغییرات را به یک ایمیج Docker جدید وارد کنید. گزینه –m برای نشان دادن پیامی است که حاوی تغییرات شماست. این در حالی است که از گزینه –a برای مشخص‌کردن کدنویس استفاده شده است. شناسه کانتینر همانی است که در شروع کار با docker آن را یادداشت کرده‌اید. اگر منابع اضافی در Docker Hub اضافه نکرده‌ باشید، معمولاً منبع نام کاربری Docker Hub شما خواهد بود.


docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name

به عنوان مثال:


docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 59839a1b7de2 finid/centos-mariadb

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

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


docker images

نمونه خروجی


REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE

finid/centos-mariadb   latest              23390430ec73        6 seconds ago       424.6 MB

centos                 latest              778a53015523        5 weeks ago         196.7 MB

hello-world            latest              94df4f0ce8a4        2 weeks ago         967 B

در مثال بالا، ایمیج جدید centos-mariadb نام دارد. این ایمیج با استفاده از ایمیج کنونی CentOS در Docker Hub ساخته شده است. اختلاف حجم باعث می‌شود که تغییرات صورت‌گرفته نشان داده شوند. در این مثال، تغییری که داشته‌ایم، نصب سرور MariaDB بوده است. بنابراین دفعه بعد که خواستید یک کانتینر با استفاده از CentOS همراه با سرور از پیش‌ نصب شده MariaDB داشته باشید، می‌توانید از این ایمیج جدید استفاده کنید. ایمیج‌ها می‌توانند از چیزی به نام Dockerfile نیز ساخته شوند. البته مراحل این کار بسیار پیچیده و گسترده هستند و به خارج از مبحث این مطلب کشیده می‌شوند.

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

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


docker ps

خروجی شما چیزی شبیه به این خواهد بود.


CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

f7c79cc556dd        centos              "/bin/bash"         3 hours ago         Up 3 hours                              silly_spence

برای اینکه کل کانتینرها، اعم از فعال و غیرفعال را ببینید، از گزینه –a استفاده کنید.


docker ps -a

گزینه –l نیز برای مشاهده اخرین کانتینری است که ساخته‌اید.


docker ps -l

توقف اجرای یک کانتینر فعال با کمک فرمان زیر به‌راحتی امکان‌پذیر است.


docker stop container-id

شناسه کانتینر از خروجی فرمان docker ps در اختیار قرار می‌گیرد.

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

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

در این بخش به شما نشان می‌دهیم که چگونه یک ایمیج Docker را به Docker Hub ارسال کنید.

برای ایجاد یک حساب کاربری در Docker Hub، باید در آن ثبت‌نام کنید. سپس قبل از ارسال ایمیج، باید به Docker Hub وارد شوید. در این حالت، از شما خواسته می‌شود که ورود خود را تأیید کنید.


docker login -u docker-registry-username

اگر پسورد را به‌درستی وارد کرده باشید، تأییدیه را با موفقیت انجام می‌دهید. حالا با فرمان زیر می‌توانید ایمیج خود را ارسال نمایید.


docker push docker-registry-username/docker-image-name

این کار ممکن است کمی طول بکشید. نهایتاً نتیجه‌ای مانند زیر خواهید داشت.


The push refers to a repository [docker.io/finid/centos-mariadb]

670194edfaf5: Pushed

5f70bf18a086: Mounted from library/centos

6a6c96337be1: Mounted from library/centos

...

پس از وارد کردن یک ایمیج به رجیستری، این ایمیج باید در داشبورد حساب کاربری شما لیست شود. درست همانند چیزی که در تصویر زیر دیده می‌شود.


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

اگر تلاش شما برای ارسال ایمیج ناموفق بود، احتمالاً وارد سایت نشده‌اید.


The push refers to a repository [docker.io/finid/centos-mariadb]

e3fbbfb44187: Preparing

5f70bf18a086: Preparing

a3b5c80a4eba: Preparing

7f18b442972b: Preparing

3ce512daaf78: Preparing

7aae4540b42d: Waiting

unauthorized: authentication required

وارد شوید و دوباره برای ارسال اقدام کنید.

جمع‌بندی

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