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.
اگر تلاش شما برای ارسال ایمیج ناموفق بود، احتمالاً وارد سایت نشدهاید.
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 بهسرعت در حال پیشرفت و توسعه است و بهتر است به صورت مرتبط برای کسب آخرین اطلاعات، صفحه این پروژه را دنبال کنید.