آموزش Docker از صفر تا حرفهای؛ راهنمای کامل استفاده از Docker در سرورها و زیرساختهای مدرن
فهرست مطالب
Docker چیست؟
Docker یک پلتفرم متنباز برای ایجاد، اجرا و مدیریت نرمافزارها در محیطهای ایزوله شده به نام Container است. این فناوری به توسعهدهندگان و مدیران سیستم اجازه میدهد برنامهها را به همراه تمام وابستگیها و تنظیمات مورد نیاز، در یک بسته قابل انتقال اجرا کنند.
در روشهای سنتی، نصب یک نرمافزار روی سرور ممکن است به دلیل تفاوت نسخه کتابخانهها، تنظیمات سیستمعامل یا وابستگیهای نرمافزاری با مشکل مواجه شود. Docker این مشکل را با ایجاد یک محیط مستقل برای هر برنامه حل میکند.
به زبان ساده:
Docker مانند یک محیط بستهبندی شده است که برنامه، فایلهای مورد نیاز، کتابخانهها و تنظیمات آن را داخل یک Container قرار میدهد تا در هر سروری با کمترین تغییر اجرا شود.
چرا Docker اهمیت دارد؟
امروزه بسیاری از شرکتها به سمت معماریهای مدرن مانند Microservices، Cloud Computing و DevOps حرکت کردهاند. در این معماریها نیاز به سرعت بالا در توسعه، تست و انتشار نرمافزار بسیار مهم است.
Docker باعث میشود تیمهای توسعه و زیرساخت بتوانند برنامهها را سریعتر منتشر کنند و مشکلات مربوط به تفاوت محیط توسعه و سرور عملیاتی کاهش پیدا کند.
مهمترین مزایای Docker:
- اجرای سریع نرمافزارها
- کاهش مصرف منابع نسبت به Virtual Machine
- قابلیت انتقال آسان برنامه بین سرورها
- سازگاری بالا با Cloud Platformها
- مدیریت سادهتر سرویسهای متعدد
- مناسب برای CI/CD و DevOps
- جداسازی سرویسها از یکدیگر
تفاوت Docker و ماشین مجازی (Virtual Machine)
یکی از سوالات مهم در حوزه مجازیسازی این است که Docker چه تفاوتی با VMware، Hyper-V یا سایر فناوریهای Virtualization دارد.
در ماشینهای مجازی، برای هر سیستم یک سیستمعامل کامل نصب میشود؛ اما Docker از Kernel سیستمعامل اصلی استفاده کرده و فقط محیط اجرای برنامه را جدا میکند. به همین دلیل Containerها بسیار سبکتر و سریعتر هستند.
| ویژگی | Virtual Machine | Docker Container |
|---|---|---|
| سیستمعامل | برای هر VM یک OS جدا | اشتراک Kernel سیستمعامل |
| مصرف منابع | زیاد | کمتر |
| سرعت اجرا | کندتر | بسیار سریع |
| مناسب برای | اجرای سیستمعامل کامل | اجرای سرویس و Application |
معماری Docker چگونه کار میکند؟
Docker دارای معماری Client-Server است. در این معماری کاربر از طریق Docker CLI دستورات را ارسال میکند و Docker Engine وظیفه ایجاد و مدیریت Containerها را بر عهده دارد.
اجزای اصلی معماری Docker:
- Docker Client
- Docker Host
- Docker Engine
- Docker Image
- Docker Container
- Docker Registry
Docker Client
Docker Client همان ابزار خط فرمان Docker است که مدیر سیستم با استفاده از آن دستوراتی مانند ساخت Container، دانلود Image و مدیریت سرویسها را اجرا میکند.
Docker Host
Docker Host سروری است که Docker Engine روی آن نصب شده و Containerها در آن اجرا میشوند. این سرور میتواند یک سیستم لینوکس، ماشین مجازی یا سرور ابری باشد.
Docker Registry
Registry محلی برای ذخیره و دریافت Docker Imageها است. معروفترین Registry عمومی، Docker Hub است که هزاران Image آماده برای سرویسهای مختلف ارائه میدهد.
Docker Image چیست؟
یکی از مهمترین مفاهیم در Docker، مفهوم Image است. Docker Image یک فایل آماده و فقط خواندنی (Read Only) است که شامل تمام اطلاعات مورد نیاز برای اجرای یک برنامه میشود. این اطلاعات شامل سیستمعامل پایه، کتابخانهها، فایلهای تنظیمات و نرمافزار مورد نظر است.
Containerها از روی Image ساخته میشوند. به عبارت دیگر، Image مانند یک الگو یا Template عمل میکند و هر تعداد Container که نیاز داشته باشید میتوانید از یک Image ایجاد کنید.
مثال ساده:
فرض کنید قصد دارید یک وبسرور Nginx راهاندازی کنید. به جای نصب دستی Nginx و تنظیم فایلهای مورد نیاز، کافی است Image مربوط به Nginx را دریافت کرده و یک Container از روی آن ایجاد کنید.
دستور مشاهده Imageهای موجود
docker images
دریافت Image از Docker Hub
docker pull nginx
این دستور آخرین نسخه Image مربوط به Nginx را از Docker Hub دریافت میکند.
Docker Container چیست؟
Container محیط اجرایی Docker است که یک برنامه درون آن اجرا میشود. Container از روی Image ساخته میشود اما برخلاف Image، قابلیت اجرا، توقف، حذف و مدیریت دارد.
هر Container یک محیط مستقل دارد و پردازشها، فایلها و تنظیمات آن از سایر Containerها جدا هستند. این ویژگی باعث میشود چندین سرویس مختلف بدون ایجاد تداخل روی یک سرور اجرا شوند.
ویژگیهای Docker Container:
- ایزوله بودن سرویسها
- راهاندازی بسیار سریع
- مصرف کم منابع
- قابلیت انتقال بین سرورها
- مدیریت ساده با Command Line
- امکان اجرای چند نسخه متفاوت از یک سرویس
ساخت اولین Container
docker run nginx
با اجرای این دستور، Docker یک Container جدید از Image مربوط به Nginx ایجاد کرده و وبسرور را اجرا میکند.
نمایش Containerهای فعال
docker ps
نمایش تمام Containerها
docker ps -a
Dockerfile چیست؟
Dockerfile یک فایل متنی است که دستورالعمل ساخت یک Docker Image اختصاصی را مشخص میکند. با استفاده از Dockerfile میتوان فرآیند نصب، پیکربندی و آمادهسازی یک نرمافزار را خودکار کرد.
در محیطهای حرفهای DevOps معمولاً تمام تنظیمات برنامه داخل Dockerfile قرار داده میشود تا هر زمان نیاز بود بتوان همان محیط را دوباره ایجاد کرد.
نمونه ساده Dockerfile
FROM ubuntu RUN apt update RUN apt install nginx -y CMD ["nginx","-g","daemon off;"]
در این مثال ابتدا یک Image پایه Ubuntu انتخاب شده، سپس Nginx نصب شده و در نهایت سرویس Nginx هنگام اجرای Container فعال میشود.
ساخت Image از Dockerfile
docker build -t my-nginx .
Docker Volume چیست؟
به صورت پیشفرض اطلاعات داخل Container با حذف Container از بین میروند. برای ذخیره دائمی اطلاعات از Volume استفاده میشود.
Volumeها برای سرویسهایی مانند Database، فایل سرور، WordPress و برنامههایی که نیاز به نگهداری اطلاعات دارند بسیار مهم هستند.
کاربردهای Volume:
- ذخیره اطلاعات MySQL و PostgreSQL
- نگهداری فایلهای کاربران
- پشتیبانگیری آسانتر
- اشتراک فایل بین چند Container
ایجاد Volume
docker volume create data_volume
اجرای Container با Volume
docker run -v data_volume:/data nginx
Docker Network چیست؟
Docker Network امکان ارتباط بین Containerها و همچنین ارتباط Container با شبکه خارجی را فراهم میکند. در یک معماری Microservice معمولاً چندین Container وجود دارد که باید با یکدیگر ارتباط داشته باشند.
انواع Network در Docker
- Bridge Network – شبکه پیشفرض Docker
- Host Network – استفاده مستقیم از شبکه میزبان
- Overlay Network – مناسب Cluster و Docker Swarm
- None Network – بدون ارتباط شبکهای
نمایش Networkها
docker network ls
نصب Docker روی سیستمعاملهای مختلف
برای استفاده از Docker ابتدا باید Docker Engine روی سیستم نصب شود. Docker بیشتر در محیطهای Linux Server مانند Ubuntu، Debian و CentOS استفاده میشود؛ اما امکان نصب آن روی Windows و استفاده در محیطهای توسعه نیز وجود دارد.
نصب Docker روی Ubuntu Server
Ubuntu یکی از محبوبترین سیستمعاملها برای اجرای Docker در سرورها است. مراحل نصب شامل بروزرسانی سیستم، نصب پیشنیازها، اضافه کردن Repository رسمی Docker و نصب Docker Engine است.
sudo apt update sudo apt install ca-certificates curl gnupg sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker
پس از نصب، برای بررسی صحت عملکرد Docker میتوان دستور زیر را اجرا کرد:
docker version
تست اجرای Docker:
docker run hello-world
این دستور یک Container آزمایشی اجرا میکند تا مشخص شود Docker به درستی نصب شده است.
دستورات مهم و کاربردی Docker
مدیریت Docker بیشتر از طریق Command Line انجام میشود. آشنایی با دستورات اصلی برای مدیران سیستم و مهندسان شبکه که با سرورها کار میکنند بسیار مهم است.
مشاهده وضعیت Docker
systemctl status docker
مشاهده Containerهای فعال
docker ps
توقف یک Container
docker stop container_name
حذف Container
docker rm container_name
مشاهده Logهای Container
docker logs container_name
Docker Compose چیست؟
Docker Compose ابزاری برای مدیریت چندین Container به صورت همزمان است. در پروژههای واقعی معمولاً یک برنامه فقط یک سرویس نیست؛ بلکه شامل Web Server، Database، Cache و سرویسهای مختلف است.
با Docker Compose میتوان تمام سرویسها را داخل یک فایل YAML تعریف کرد و با یک دستور همه آنها را اجرا یا متوقف کرد.
مزایای Docker Compose:
- مدیریت آسان چند Container
- تعریف زیرساخت به صورت کد
- مناسب برای محیط توسعه و Production
- راهاندازی سریع پروژهها
- کاهش خطای انسانی در تنظیمات
نمونه فایل docker-compose.yml
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
database:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: password
در این مثال دو سرویس ایجاد شده است. یک Container برای Nginx و یک Container برای MySQL که به صورت همزمان اجرا میشوند.
اجرای Docker Compose
docker compose up -d
متوقف کردن سرویسها
docker compose down
کاربرد Docker در سرورها و زیرساخت شبکه
Docker فقط یک ابزار برنامهنویسی نیست؛ بلکه در زیرساخت شبکه و مدیریت سرورها نیز کاربردهای فراوانی دارد. بسیاری از سازمانها از Docker برای اجرای سرویسهای شبکهای، مانیتورینگ، امنیت و مدیریت زیرساخت استفاده میکنند.
نمونه سرویسهایی که با Docker اجرا میشوند:
- Web Server مانند Nginx و Apache
- Database مانند MySQL و PostgreSQL
- سیستمهای مانیتورینگ مانند Zabbix و Grafana
- Git Server
- VPN Server
- Application Server
- سیستمهای Logging مانند ELK Stack
Docker در محیط VMware و مجازیسازی
در بسیاری از سازمانها Docker روی ماشینهای مجازی VMware ESXi اجرا میشود. این معماری ترکیبی باعث میشود سازمانها هم از مزایای Virtualization و هم از سرعت Containerها استفاده کنند.
معماری رایج:
- Physical Server
- VMware ESXi Hypervisor
- Linux Virtual Machine
- Docker Engine
- Application Containers
امنیت Docker و بهترین روشهای محافظت از Containerها
با وجود مزایای فراوان Docker، امنیت در محیطهای Container بسیار مهم است. اگر تنظیمات امنیتی به درستی انجام نشود، یک Container آسیبپذیر میتواند باعث ایجاد خطر برای کل سرور شود.
مدیران سیستم و مهندسان DevOps باید علاوه بر مدیریت Containerها، موارد امنیتی مانند محدود کردن دسترسیها، بررسی Imageها، مدیریت پورتها و بروزرسانی مداوم Docker را در نظر بگیرند.
مهمترین نکات امنیتی Docker:
- استفاده از Imageهای معتبر
- بروزرسانی منظم Docker Engine
- عدم اجرای Container با دسترسی Root در صورت امکان
- محدود کردن پورتهای باز
- استفاده از Firewall
- بررسی آسیبپذیری Imageها
- مدیریت صحیح Secretها و Passwordها
- استفاده از Networkهای جداگانه برای سرویسها
مدیریت مصرف CPU و RAM در Docker
یکی از مزیتهای Docker امکان کنترل منابع مصرفی Containerها است. در یک سرور ممکن است چندین سرویس مختلف اجرا شود و اگر محدودیتی برای مصرف منابع تعیین نشود، یک Container میتواند تمام CPU یا RAM سرور را مصرف کند.
محدود کردن RAM برای Container
docker run -m 512m nginx
در این مثال حداکثر حافظه مصرفی Container برابر با 512 مگابایت تعیین شده است.
محدود کردن CPU
docker run --cpus="1" nginx
این دستور اجازه استفاده بیشتر از یک هسته پردازنده را به Container نمیدهد.
Backup و Restore در Docker
اگرچه Containerها قابل حذف و ایجاد مجدد هستند، اما اطلاعات مهم مانند دیتابیسها، فایلهای کاربران و تنظیمات برنامهها باید به صورت منظم Backup شوند.
روشهای Backup در Docker:
- Backup گرفتن از Volumeها
- Export کردن Container
- ذخیره Image اختصاصی
- استفاده از Backupهای خودکار
- ذخیره اطلاعات در Storage جداگانه
Export کردن Container
docker export container_name > backup.tar
Import کردن Backup
docker import backup.tar
Docker در DevOps و CI/CD
یکی از دلایل محبوبیت Docker، نقش مهم آن در فرآیندهای DevOps است. تیمهای توسعه و عملیات میتوانند با استفاده از Containerها فرآیند Build، Test و Deployment را سریعتر و استانداردتر انجام دهند.
مزایای Docker در DevOps:
- ایجاد محیط یکسان برای Development و Production
- تست سریع نسخههای جدید نرمافزار
- کاهش خطاهای Deploy
- افزایش سرعت انتشار نرمافزار
- امکان Rollback سریع
- هماهنگی با ابزارهایی مانند Jenkins و GitLab CI
Docker Swarm و Kubernetes چیست؟
زمانی که تعداد Containerها افزایش پیدا میکند، مدیریت دستی آنها دشوار میشود. برای مدیریت تعداد زیادی Container از ابزارهای Orchestration مانند Docker Swarm و Kubernetes استفاده میشود.
Docker Swarm
Docker Swarm ابزار داخلی Docker برای مدیریت Cluster از چندین Docker Host است. این فناوری امکان ایجاد سرویسهای توزیعشده، Load Balancing و مدیریت ساده Containerها را فراهم میکند.
Kubernetes
Kubernetes یک پلتفرم قدرتمند برای مدیریت Containerها در مقیاس بسیار بزرگ است و امروزه در بسیاری از Cloud Providerها و دیتاسنترهای بزرگ استفاده میشود.
مقایسه کوتاه:
- Docker: اجرای Container
- Docker Compose: مدیریت چند Container
- Docker Swarm: مدیریت Cluster ساده
- Kubernetes: مدیریت حرفهای Container در مقیاس بزرگ
سوالات متداول آموزش Docker
آیا Docker جایگزین VMware است؟
خیر. Docker و VMware دو فناوری متفاوت هستند. VMware برای اجرای ماشینهای مجازی کامل استفاده میشود، در حالی که Docker برای اجرای سرویسها در محیط Container کاربرد دارد. بسیاری از سازمانها از Docker روی ماشینهای مجازی VMware استفاده میکنند.
آیا Docker فقط برای برنامهنویسان است؟
خیر. مدیران شبکه، مهندسان سرور، متخصصان DevOps و Cloud نیز از Docker برای مدیریت سرویسهای زیرساختی استفاده میکنند.
آیا Docker برای سرورهای Production مناسب است؟
بله. بسیاری از شرکتهای بزرگ از Docker و Kubernetes برای اجرای سرویسهای حیاتی در محیط Production استفاده میکنند.
برای یادگیری Docker چه پیشنیازهایی لازم است؟
آشنایی با Linux، شبکه، دستورات Command Line، مفاهیم سرور و مجازیسازی مسیر یادگیری Docker را بسیار آسانتر میکند.
جمعبندی آموزش Docker
Docker یکی از مهمترین فناوریهای دنیای مدرن زیرساخت و DevOps است که روش مدیریت و اجرای نرمافزارها را تغییر داده است. با استفاده از Containerها میتوان سرویسها را سریعتر، امنتر و با مصرف منابع کمتر اجرا کرد.
برای مدیران شبکه و سرورها، یادگیری Docker یک مهارت ارزشمند محسوب میشود؛ زیرا امروزه بسیاری از سرویسهای سازمانی، Cloud Platformها، سیستمهای مانیتورینگ و نرمافزارهای تحت وب بر پایه Container اجرا میشوند.
نتیجه نهایی:
یادگیری Docker به متخصصان شبکه و زیرساخت کمک میکند تا سرویسهای بیشتری را با سرعت بالاتر، هزینه کمتر و قابلیت مدیریت بهتر روی سرورها اجرا کنند. ترکیب Docker با VMware، Kubernetes، CI/CD و Cloud یکی از مسیرهای اصلی آینده فناوری اطلاعات است.
مقالات مرتبط
پیشنهاد مطالعه:
برای یادگیری کامل زیرساختهای مدرن، پیشنهاد میشود مقالات Docker، Kubernetes، Linux Server، VMware و DevOps را به صورت زنجیرهای مطالعه کنید تا دید کاملی از معماریهای Cloud و دیتاسنتر به دست آورید.