Docker اپلیکیشنی است که روند راهاندازی فرآیندهای مرتبط با اپلیکیشنها را درون کانتینرها تسهیل میکند. این ابزار چیزی بیشتر شبیه به ماشینهای مجازی است و فقط قابلیت جابجایی بیشتری دارد، با منابع سازگارتر است و ارتباط بیشتری با سیستمعامل هاست خواهد داشت. دو روش برای نصب Docker در CentOS 7 وجود...
1399/01/185159 بازدید
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
1sudo yum check-update
حالا فرمان زیر را اجرا کنید. در نتیجه، منبع رسمی Docker اضافه و آخرین نسخه Docker برای نصب دریافت میشود.
php
1curl -fsSL https://get.docker.com/ | sh
پس از اینکه روند نصب به اتمام رسید، به صورت زیر Docker را اجرا نمایید.
php
1sudo systemctl start docker
از طریق فرمان زیر میتوانید اجرا بودن آن را بررسی کنید.
php
1sudo systemctl status docker
خروجی باید چیزی شبیه به زیر باشد؛ اینکه نشان دهد که سرویس فعال و در حال اجراست.
php
1docker.service - Docker Application Container Engine23Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)45Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago67Docs: https://docs.docker.com89Main PID: 749 (docker)
نهایتاً مطمئن شوید که پس از نصب Docker، این ابزار پس از هر بار راهاندازی سرور، شروع به کار میکند.
php
1sudo systemctl enable docker
نصب Docker نه تنها سرویس Docker را در اختیار شما قرار میدهد، بلکه شما به ابزار خط فرمان یا کلاینت Docker نیز دسترسی پیدا میکنید. در ادامه در مورد بهرهگیری از فرمان docker نیز صحبت خواهیم کرد.
گام ۲) اجرای فرمان Docker بدون Sudo
اجرای فرمان docker به صورت پیشفرض نیازمند دسترسیهای روت است. به همین دلیل است که باید از پیشوند sudo در این فرمان استفاده کنید. همچنین این فرمان میتواند از طریق یک کاربر در گروه Docker نیز اجرا شود. به خاطر داشته باشید که این گروه به صورت اتوماتیک در هنگام نصب Docker ایجاد شده است. اگر بدون پیشوند Sudo و یا خارج از گروه Docker بخواهید فرمان docker را اجرا کنید، با خروجی زیر مواجه خواهید شد.
php
1docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.23See 'docker run --help'.
اگر میخواهید نیاز به تایپ sudo در هر بار استفاده از فرمان docker نداشته باشید، میتوانید کلمه کاربری خود را به گروه docker اضافه کنید.
php
1sudo usermod -aG docker $(whoami)
برای فعال کردن این تغییر باید از Droplet خارج شوید و دوباره با همان کاربر ورود کنید.
اگر میخواهید کاربری را به گروه docker اضافه کنید که در حال حاضر با آن وارد نشدهاید، می توانید به صورت زیر آن را فراخوانی کنید.
php
1sudo usermod -aG docker username
در ادامه این آموزش فرض بر این است که شما فرمان docker را به عنوان یک کاربر در گروه docker اجرا میکنید. اگر چنین کاری انجام نمیدهید، لطفاً فرمانهای خود را با sudo همراه کنید.
گام ۳) استفاده از فرمان docker
پس از نصب و اجرای Docker، نوبت به آشنایی با ابزار خط فرمان آن میرسد. گزینهها و زیرفرمانهای مختلفی برای استفاده از docker وجود دارد. قالب کار به صورت زیر خواهد بود.
php
1docker
برای مشاهده تمام زیرفرمانهای در دسترس داریم:
php
1docker
تا نسخه 1.11.1 از Docker، لیست کامل زیرفرمانها شامل موارد زیر هستند.
php
1attach Attach to a running container23build Build an image from a Dockerfile45commit Create a new image from a container's changes67cp Copy files/folders between a container and the local filesystem89create Create a new container1011diff Inspect changes on a container's filesystem1213events Get real time events from the server1415exec Run a command in a running container1617export Export a container's filesystem as a tar archive1819history Show the history of an image2021images List images2223import Import the contents from a tarball to create a filesystem image2425info Display system-wide information2627inspect Return low-level information on a container or image2829kill Kill a running container3031load Load an image from a tar archive or STDIN3233login Log in to a Docker registry3435logout Log out from a Docker registry3637logs Fetch the logs of a container3839network Manage Docker networks4041pause Pause all processes within a container4243port List port mappings or a specific mapping for the CONTAINER4445ps List containers4647pull Pull an image or a repository from a registry4849push Push an image or a repository to a registry5051rename Rename a container5253restart Restart a container5455rm Remove one or more containers5657rmi Remove one or more images5859run Run a command in a new container6061save Save one or more images to a tar archive6263search Search the Docker Hub for images6465start Start one or more stopped containers6667stats Display a live stream of container(s) resource usage statistics6869stop Stop a running container7071tag Tag an image into a repository7273top Display the running processes of a container7475unpause Unpause all processes within a container7677update Update configuration of one or more containers7879version Show the Docker version information8081volume Manage Docker volumes8283wait Block until a container stops, then print its exit code
برای مشاهده گزینههای مرتبط با یک فرمان خاص، میتوانید قالب فرمان زیر را تایپ کنید.
php
1docker docker-subcommand --help
برای مشاهده اطلاعات سیستمی مرتبط داریم:
php
1docker info
گام ۴) کار با تصاویر یا image های Docker
کانتینرهای Docker از طریق ایمیجهای Docker اجرا میشوند. به صورت پیشفرض، این ایمیجها از Docker Hub استخراج میشوند. توضیح اینکه Docker Hub یک رجیستری است که توسط Docker، شرکت پشتیبان پروژه Docker مدیریت میشود. هر شخصی میتواند ایمیجهای Docker خودش را در Docker Hub بسازد و میزبانی کند. بنابراین بیشتر اپلیکیشنها و توزیعهای لینوکسی که شما در آنها نیاز به اجرای کانتینرهای Docker دارید، دارای ایمیجهایی هستند که در Docker Hub میزبانی میشوند.
برای بررسی اینکه به دریافت ایمیج از Docker Hub دسترسی دارید، تایپ کنید:
php
1docker run hello-world
خروجی مطابق زیر باید نشان دهد که Docker بهخوبی اجرا شده است.
php
1Hello from Docker.23This message shows that your installation appears to be working correctly.45...
با استفاده از زیرفرمان search در فرمان docker میتوانید ایمیجهای در دسترس در Docker Hub را مشاهده کنید. برای مثال برای ایمیج CentOS داریم:
php
1docker search centos
این اسکریپت به جستجوی Docker Hub میپردازد و لیستی از ایمیجهایی که عنوان آنها با رشته جستجو مطابقت میکند، ارائه میدهد. در اینجا، نتایجی مشابه زیر خواهیم داشت.
php
1NAME DESCRIPTION STARS OFFICIAL AUTOMATED23centos The official build of CentOS. 2224 [OK]45jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8... 22 [OK]67jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M... 17 [OK]89million12/centos-supervisor Base CentOS-7 with supervisord launcher, h... 11 [OK]1011nimmis/java-centos This is docker images of CentOS 7 with dif... 10 [OK]1213torusware/speedus-centos Always updated official CentOS docker imag... 8 [OK]1415nickistre/centos-lamp LAMP on centos setup 3 [OK]1617...
در ستون OFFICIAL، گزینه OK نشان میدهد که یک ایمیج ساخته شده و از طرف شرکت سازنده پشتیبانی میشود. پس از شناسایی ایمیج دلخواهتان، میتوانید با استفاده از زیرفرمان pull آن را بر روی کامپیوتر دریافت کنید.
php
1docker pull centos
پس از دریافت یک ایمیج، باید کانتینری را که از ایمیج دانلود شده استفاده میکند، با زیرفرمان run اجرا کنید. در صورتی که این ایمیج دریافت نشده بود، Docker ابتدا ایمیج را دانلود میکند و سپس کانتینری را برای استفاده از آن اجرا مینماید.
php
1docker run centos
برای مشاده ایمیجی که در کامپیوتر شما دریافت شده، داریم:
php
1docker images
خروجی چیزی شبیه به زیر خواهد بود:
php
123REPOSITORY TAG IMAGE ID CREATED SIZE45centos latest 778a53015523 5 weeks ago 196.7 MB67hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
همانطور که در ادامه خواهید دید، ایمیجهایی که برای اجرای کانتینرها استفاده میکنید، قابلیت اصلاح و تولید ایمیجهای جدید را دارند. این ایمیجهای جدید به Docker Hub یا دیگر رجیستریهای Docker ارسال میشوند.
گام ۵) اجرای یک کانتینر Docker
کانتینر hello-world که در گام قبلی اجرا کردید، نمونهای از کانتینری است که اجرا و پس از نمایش یک پیام آزمایشی، بسته میشود. البته کانتینرها کارآیی بیشتر از این دارند و میتوانند هوشمند باشند. بهعلاوه، آنها همانند ماشینهای مجازی، سازگاری بیشتری با منابع دارند.
به عنوان مثال، بیایید یک کانتینر با استفاده از اخرین نسخه ایمیج CentOS اجرا کنیم. ترکیب گزینههای –i و –t موجب ایجاد یک دسترسی هوشمند به کانتینر میشود.
php
1docker run -it centos
ورودی فرمان شما در این حالت تغییر خواهد کرد؛ به این دلیل الان درون کانتینر هستید. نتیجه به فرم زیر خواهد بود:
php
1[root@59839a1b7de2 /]#23نکته: شناسه کانتینر را در نمایشگر فرمان یادداشت کنید. در نمونه بالا، این شناسه برابر 59839a1b7de2 است.45حالا میتوانید هر نوع فرمانی را درون کانتینر اجرا کنید. به عنوان نمونه، بیایید سرور MariaDB را در این کانتینر نصب کنیم. نیازی به پیشوند sudo در فرمانها وجود ندارد؛ چرا که درون کانتینر و با مجوزهای روت کار میکنید.6789yum install mariadb-server
گام ۶) اِعمال تغییرات یک کانتینر به یک ایمیج Docker
وقتی یک ایمیج Docker را راهاندازی میکنید، میتوانید همانند یک ماشین مجازی، اقدام به ساخت، اصلاح و یا حذف فایلهای جدید کنید. البته تغییراتی که انجام میدهید، فقط در همان کانتینر انجام میشوند. شما میتوانید این کانتینرا را اجرا و متوقف نمایید. ولی وقتی آن را با فرمان docker rm از بین بردید، تغییرات شما برای همیشه از دست خواهند رفت.
در اینجا خواهیم دید که چگونه وضعیت یک کانتینر را به عنوان یک ایمیج Docker جدید ذخیره کنید.
پس از نصب سرور MariaDB درون کانتینر CentOS، شما یک کانتینر دارید که یک ایمیج اجرا کرده است. ولی کانتینر با ایمیجی که برای ساختن آن استفاده کردهاید، متفاوت است.
برا ذخیره کردن وضعیت کانتینر به عنوان یک ایمیج جدید، ابتدا باید از آن خارج شوید.
php
1exit
سپس با استفاده از فرمان زیر، تغییرات را به یک ایمیج Docker جدید وارد کنید. گزینه –m برای نشان دادن پیامی است که حاوی تغییرات شماست. این در حالی است که از گزینه –a برای مشخصکردن کدنویس استفاده شده است. شناسه کانتینر همانی است که در شروع کار با docker آن را یادداشت کردهاید. اگر منابع اضافی در Docker Hub اضافه نکرده باشید، معمولاً منبع نام کاربری Docker Hub شما خواهد بود.
php
1docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name
به عنوان مثال:
php
1docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 59839a1b7de2 finid/centos-mariadb
نکته: وقتی یک ایمیج را تغییر میدهید، ایمیج جدید به صورت محلی و در کامپیوتر شما ذخیره میشود. در ادامه این مطلب آموزشی، خواهیم دید که چگونه میتوان یک ایمیج را به رجیستریهای Docker مانند Docker وارد کرد. در این صورت، ایمیج شما ممکن است مورد استفاده دیگران نیز قرار گیرد.
پس از اینکه عملیات شما به پایان رسید، فهرستگیری از ایمیجهای Docker موجود در کامپیوتر شما میتواند ایمیج جدید را به شما نشان دهد. همینطور نمونه قبلی ایمیج را در این لیست خواهید دید.
php
1docker images
نمونه خروجی
php
1REPOSITORY TAG IMAGE ID CREATED SIZE23finid/centos-mariadb latest 23390430ec73 6 seconds ago 424.6 MB45centos latest 778a53015523 5 weeks ago 196.7 MB67hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
در مثال بالا، ایمیج جدید centos-mariadb نام دارد. این ایمیج با استفاده از ایمیج کنونی CentOS در Docker Hub ساخته شده است. اختلاف حجم باعث میشود که تغییرات صورتگرفته نشان داده شوند. در این مثال، تغییری که داشتهایم، نصب سرور MariaDB بوده است. بنابراین دفعه بعد که خواستید یک کانتینر با استفاده از CentOS همراه با سرور از پیش نصب شده MariaDB داشته باشید، میتوانید از این ایمیج جدید استفاده کنید. ایمیجها میتوانند از چیزی به نام Dockerfile نیز ساخته شوند. البته مراحل این کار بسیار پیچیده و گسترده هستند و به خارج از مبحث این مطلب کشیده میشوند.
گام ۷) فهرستبندی کانتینرهای Docker
اگر برای مدتزمانی از Docker استفاده کنید، ممکن است چندین کانتینر فعال و غیرعفال را در کامپیوتر خود داشته باشید. برای مشاهده کانتینرهای فعال داریم:
php
1docker ps
خروجی شما چیزی شبیه به این خواهد بود.
php
1CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES23f7c79cc556dd centos "/bin/bash" 3 hours ago Up 3 hours silly_spence
برای اینکه کل کانتینرها، اعم از فعال و غیرفعال را ببینید، از گزینه –a استفاده کنید.
php
1docker ps -a
گزینه –l نیز برای مشاهده اخرین کانتینری است که ساختهاید.
php
1docker ps -l
توقف اجرای یک کانتینر فعال با کمک فرمان زیر بهراحتی امکانپذیر است.
php
1docker stop container-id
شناسه کانتینر از خروجی فرمان docker ps در اختیار قرار میگیرد.
گام ۸) انتقال ایمیجهای Docker به منبع Docker
گام منطقی بعدی پس از ساختن یک ایمیج جدید با استفاده از ایمیج کنونی، به اشتراکگذاشتن آن با چند نفر از دوستانتان است. این کار میتواند در دنیای Docker Hub یا دیگر رجیستریهای Docker که به آن دسترسی دارید، انجام گیرد. در هر صورت، برای انتقال یک ایمیج، باید یک حساب کاربری از رجیستری موردنظرتان داشته باشید.
در این بخش به شما نشان میدهیم که چگونه یک ایمیج Docker را به Docker Hub ارسال کنید.
برای ایجاد یک حساب کاربری در Docker Hub، باید در آن ثبتنام کنید. سپس قبل از ارسال ایمیج، باید به Docker Hub وارد شوید. در این حالت، از شما خواسته میشود که ورود خود را تأیید کنید.
php
1docker login -u docker-registry-username
اگر پسورد را بهدرستی وارد کرده باشید، تأییدیه را با موفقیت انجام میدهید. حالا با فرمان زیر میتوانید ایمیج خود را ارسال نمایید.
این کار ممکن است کمی طول بکشید. نهایتاً نتیجهای مانند زیر خواهید داشت.
php
1The push refers to a repository [docker.io/finid/centos-mariadb]23670194edfaf5: Pushed455f70bf18a086: Mounted from library/centos676a6c96337be1: Mounted from library/centos89...
پس از وارد کردن یک ایمیج به رجیستری، این ایمیج باید در داشبورد حساب کاربری شما لیست شود. درست همانند چیزی که در تصویر زیر دیده میشود.
php
1After pushing an image to a registry, it should be listed on your account’s dashboard, like that show in the image below.
لیست ایمیجها در Docker Hub
اگر تلاش شما برای ارسال ایمیج ناموفق بود، احتمالاً وارد سایت نشدهاید.
php
1The push refers to a repository [docker.io/finid/centos-mariadb]23e3fbbfb44187: Preparing455f70bf18a086: Preparing67a3b5c80a4eba: Preparing897f18b442972b: Preparing10113ce512daaf78: Preparing12137aae4540b42d: Waiting1415unauthorized: authentication required
وارد شوید و دوباره برای ارسال اقدام کنید.
جمعبندی
مباحث مربوط به نصب و استفاده از Docker بسیار فراتر از چیزی است که در این مطلب گنجانده شده است. امّا احتمالاً این برای شروع به کار شما با Docker در CentOS 7 مناسب خواهد بود. همانند بسیاری از پروژههای متنباز، پایگاه کد Docker بهسرعت در حال پیشرفت و توسعه است و بهتر است به صورت مرتبط برای کسب آخرین اطلاعات، صفحه این پروژه را دنبال کنید.