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
[/php]
حالا فرمان زیر را اجرا کنید. در نتیجه، منبع رسمی Docker اضافه و آخرین نسخه Docker برای نصب دریافت میشود.
[php]
curl -fsSL https://get.docker.com/ | sh
[/php]
پس از اینکه روند نصب به اتمام رسید، به صورت زیر Docker را اجرا نمایید.
[php]
sudo systemctl start docker
[/php]
از طریق فرمان زیر میتوانید اجرا بودن آن را بررسی کنید.
[php]
sudo systemctl status docker
[/php]
خروجی باید چیزی شبیه به زیر باشد؛ اینکه نشان دهد که سرویس فعال و در حال اجراست.
[php]
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)
[/php]
نهایتاً مطمئن شوید که پس از نصب Docker، این ابزار پس از هر بار راهاندازی سرور، شروع به کار میکند.
[php]
sudo systemctl enable docker
[/php]
نصب 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’.
[/php]
اگر میخواهید نیاز به تایپ sudo در هر بار استفاده از فرمان docker نداشته باشید، میتوانید کلمه کاربری خود را به گروه docker اضافه کنید.
[php]
sudo usermod -aG docker $(whoami)
[/php]
برای فعال کردن این تغییر باید از Droplet خارج شوید و دوباره با همان کاربر ورود کنید.
اگر میخواهید کاربری را به گروه docker اضافه کنید که در حال حاضر با آن وارد نشدهاید، می توانید به صورت زیر آن را فراخوانی کنید.
[php]
sudo usermod -aG docker username
[/php]
در ادامه این آموزش فرض بر این است که شما فرمان docker را به عنوان یک کاربر در گروه docker اجرا میکنید. اگر چنین کاری انجام نمیدهید، لطفاً فرمانهای خود را با sudo همراه کنید.
گام ۳) استفاده از فرمان docker
پس از نصب و اجرای Docker، نوبت به آشنایی با ابزار خط فرمان آن میرسد. گزینهها و زیرفرمانهای مختلفی برای استفاده از docker وجود دارد. قالب کار به صورت زیر خواهد بود.
[php]
docker [option] [command] [arguments]
[/php]
برای مشاهده تمام زیرفرمانهای در دسترس داریم:
[php]
docker
[/php]
تا نسخه 1.11.1 از Docker، لیست کامل زیرفرمانها شامل موارد زیر هستند.
[php]
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
[/php]
برای مشاهده گزینههای مرتبط با یک فرمان خاص، میتوانید قالب فرمان زیر را تایپ کنید.
[php]
docker docker-subcommand –help
[/php]
برای مشاهده اطلاعات سیستمی مرتبط داریم:
[php]
docker info
[/php]
گام ۴) کار با تصاویر یا image های Docker
کانتینرهای Docker از طریق ایمیجهای Docker اجرا میشوند. به صورت پیشفرض، این ایمیجها از Docker Hub استخراج میشوند. توضیح اینکه Docker Hub یک رجیستری است که توسط Docker، شرکت پشتیبان پروژه Docker مدیریت میشود. هر شخصی میتواند ایمیجهای Docker خودش را در Docker Hub بسازد و میزبانی کند. بنابراین بیشتر اپلیکیشنها و توزیعهای لینوکسی که شما در آنها نیاز به اجرای کانتینرهای Docker دارید، دارای ایمیجهایی هستند که در Docker Hub میزبانی میشوند.
برای بررسی اینکه به دریافت ایمیج از Docker Hub دسترسی دارید، تایپ کنید:
[php]
docker run hello-world
[/php]
خروجی مطابق زیر باید نشان دهد که Docker بهخوبی اجرا شده است.
[php]
Hello from Docker.
This message shows that your installation appears to be working correctly.
…
[/php]
با استفاده از زیرفرمان search در فرمان docker میتوانید ایمیجهای در دسترس در Docker Hub را مشاهده کنید. برای مثال برای ایمیج CentOS داریم:
[php]
docker search centos
[/php]
این اسکریپت به جستجوی Docker Hub میپردازد و لیستی از ایمیجهایی که عنوان آنها با رشته جستجو مطابقت میکند، ارائه میدهد. در اینجا، نتایجی مشابه زیر خواهیم داشت.
[php]
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]
…
[/php]
در ستون OFFICIAL، گزینه OK نشان میدهد که یک ایمیج ساخته شده و از طرف شرکت سازنده پشتیبانی میشود. پس از شناسایی ایمیج دلخواهتان، میتوانید با استفاده از زیرفرمان pull آن را بر روی کامپیوتر دریافت کنید.
[php]
docker pull centos
[/php]
پس از دریافت یک ایمیج، باید کانتینری را که از ایمیج دانلود شده استفاده میکند، با زیرفرمان run اجرا کنید. در صورتی که این ایمیج دریافت نشده بود، Docker ابتدا ایمیج را دانلود میکند و سپس کانتینری را برای استفاده از آن اجرا مینماید.
[php]
docker run centos
[/php]
برای مشاده ایمیجی که در کامپیوتر شما دریافت شده، داریم:
[php]
docker images
[/php]
خروجی چیزی شبیه به زیر خواهد بود:
[php]
[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
[/php]
همانطور که در ادامه خواهید دید، ایمیجهایی که برای اجرای کانتینرها استفاده میکنید، قابلیت اصلاح و تولید ایمیجهای جدید را دارند. این ایمیجهای جدید به Docker Hub یا دیگر رجیستریهای Docker ارسال میشوند.
گام ۵) اجرای یک کانتینر Docker
کانتینر hello-world که در گام قبلی اجرا کردید، نمونهای از کانتینری است که اجرا و پس از نمایش یک پیام آزمایشی، بسته میشود. البته کانتینرها کارآیی بیشتر از این دارند و میتوانند هوشمند باشند. بهعلاوه، آنها همانند ماشینهای مجازی، سازگاری بیشتری با منابع دارند.
به عنوان مثال، بیایید یک کانتینر با استفاده از اخرین نسخه ایمیج CentOS اجرا کنیم. ترکیب گزینههای –i و –t موجب ایجاد یک دسترسی هوشمند به کانتینر میشود.
[php]
docker run -it centos
[/php]
ورودی فرمان شما در این حالت تغییر خواهد کرد؛ به این دلیل الان درون کانتینر هستید. نتیجه به فرم زیر خواهد بود:
[php]
[root@59839a1b7de2 /]#
نکته: شناسه کانتینر را در نمایشگر فرمان یادداشت کنید. در نمونه بالا، این شناسه برابر 59839a1b7de2 است.
حالا میتوانید هر نوع فرمانی را درون کانتینر اجرا کنید. به عنوان نمونه، بیایید سرور MariaDB را در این کانتینر نصب کنیم. نیازی به پیشوند sudo در فرمانها وجود ندارد؛ چرا که درون کانتینر و با مجوزهای روت کار میکنید.
[php]
yum install mariadb-server
[/php]
گام ۶) اِعمال تغییرات یک کانتینر به یک ایمیج Docker
وقتی یک ایمیج Docker را راهاندازی میکنید، میتوانید همانند یک ماشین مجازی، اقدام به ساخت، اصلاح و یا حذف فایلهای جدید کنید. البته تغییراتی که انجام میدهید، فقط در همان کانتینر انجام میشوند. شما میتوانید این کانتینرا را اجرا و متوقف نمایید. ولی وقتی آن را با فرمان docker rm از بین بردید، تغییرات شما برای همیشه از دست خواهند رفت.
در اینجا خواهیم دید که چگونه وضعیت یک کانتینر را به عنوان یک ایمیج Docker جدید ذخیره کنید.
پس از نصب سرور MariaDB درون کانتینر CentOS، شما یک کانتینر دارید که یک ایمیج اجرا کرده است. ولی کانتینر با ایمیجی که برای ساختن آن استفاده کردهاید، متفاوت است.
برا ذخیره کردن وضعیت کانتینر به عنوان یک ایمیج جدید، ابتدا باید از آن خارج شوید.
[php]
exit
[/php]
سپس با استفاده از فرمان زیر، تغییرات را به یک ایمیج 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]
به عنوان مثال:
[php]
docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 59839a1b7de2 finid/centos-mariadb
[/php]
نکته: وقتی یک ایمیج را تغییر میدهید، ایمیج جدید به صورت محلی و در کامپیوتر شما ذخیره میشود. در ادامه این مطلب آموزشی، خواهیم دید که چگونه میتوان یک ایمیج را به رجیستریهای Docker مانند Docker وارد کرد. در این صورت، ایمیج شما ممکن است مورد استفاده دیگران نیز قرار گیرد.
پس از اینکه عملیات شما به پایان رسید، فهرستگیری از ایمیجهای Docker موجود در کامپیوتر شما میتواند ایمیج جدید را به شما نشان دهد. همینطور نمونه قبلی ایمیج را در این لیست خواهید دید.
[php]
docker images
[/php]
نمونه خروجی
[php]
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
[/php]
در مثال بالا، ایمیج جدید centos-mariadb نام دارد. این ایمیج با استفاده از ایمیج کنونی CentOS در Docker Hub ساخته شده است. اختلاف حجم باعث میشود که تغییرات صورتگرفته نشان داده شوند. در این مثال، تغییری که داشتهایم، نصب سرور MariaDB بوده است. بنابراین دفعه بعد که خواستید یک کانتینر با استفاده از CentOS همراه با سرور از پیش نصب شده MariaDB داشته باشید، میتوانید از این ایمیج جدید استفاده کنید. ایمیجها میتوانند از چیزی به نام Dockerfile نیز ساخته شوند. البته مراحل این کار بسیار پیچیده و گسترده هستند و به خارج از مبحث این مطلب کشیده میشوند.
گام ۷) فهرستبندی کانتینرهای Docker
اگر برای مدتزمانی از Docker استفاده کنید، ممکن است چندین کانتینر فعال و غیرعفال را در کامپیوتر خود داشته باشید. برای مشاهده کانتینرهای فعال داریم:
[php]
docker ps
[/php]
خروجی شما چیزی شبیه به این خواهد بود.
[php]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd centos "/bin/bash" 3 hours ago Up 3 hours silly_spence
[/php]
برای اینکه کل کانتینرها، اعم از فعال و غیرفعال را ببینید، از گزینه –a استفاده کنید.
[php]
docker ps -a
[/php]
گزینه –l نیز برای مشاهده اخرین کانتینری است که ساختهاید.
[php]
docker ps -l
[/php]
توقف اجرای یک کانتینر فعال با کمک فرمان زیر بهراحتی امکانپذیر است.
[php]
docker stop container-id
[/php]
شناسه کانتینر از خروجی فرمان docker ps در اختیار قرار میگیرد.
گام ۸) انتقال ایمیجهای Docker به منبع Docker
گام منطقی بعدی پس از ساختن یک ایمیج جدید با استفاده از ایمیج کنونی، به اشتراکگذاشتن آن با چند نفر از دوستانتان است. این کار میتواند در دنیای Docker Hub یا دیگر رجیستریهای Docker که به آن دسترسی دارید، انجام گیرد. در هر صورت، برای انتقال یک ایمیج، باید یک حساب کاربری از رجیستری موردنظرتان داشته باشید.
در این بخش به شما نشان میدهیم که چگونه یک ایمیج Docker را به Docker Hub ارسال کنید.
برای ایجاد یک حساب کاربری در Docker Hub، باید در آن ثبتنام کنید. سپس قبل از ارسال ایمیج، باید به Docker Hub وارد شوید. در این حالت، از شما خواسته میشود که ورود خود را تأیید کنید.
[php]
docker login -u docker-registry-username
[/php]
اگر پسورد را بهدرستی وارد کرده باشید، تأییدیه را با موفقیت انجام میدهید. حالا با فرمان زیر میتوانید ایمیج خود را ارسال نمایید.
[php]
docker push docker-registry-username/docker-image-name
[/php]
این کار ممکن است کمی طول بکشید. نهایتاً نتیجهای مانند زیر خواهید داشت.
[php]
The push refers to a repository [docker.io/finid/centos-mariadb]
670194edfaf5: Pushed
5f70bf18a086: Mounted from library/centos
6a6c96337be1: Mounted from library/centos
…
[/php]
پس از وارد کردن یک ایمیج به رجیستری، این ایمیج باید در داشبورد حساب کاربری شما لیست شود. درست همانند چیزی که در تصویر زیر دیده میشود.
[php]
After pushing an image to a registry, it should be listed on your account’s dashboard, like that show in the image below.
[/php]

لیست ایمیجها در Docker Hub
اگر تلاش شما برای ارسال ایمیج ناموفق بود، احتمالاً وارد سایت نشدهاید.
[php]
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
[/php]
وارد شوید و دوباره برای ارسال اقدام کنید.
جمعبندی
مباحث مربوط به نصب و استفاده از Docker بسیار فراتر از چیزی است که در این مطلب گنجانده شده است. امّا احتمالاً این برای شروع به کار شما با Docker در CentOS 7 مناسب خواهد بود. همانند بسیاری از پروژههای متنباز، پایگاه کد Docker بهسرعت در حال پیشرفت و توسعه است و بهتر است به صورت مرتبط برای کسب آخرین اطلاعات، صفحه این پروژه را دنبال کنید.