Docker یکی از پلتفرمهای مدیریت سرور و اجرای برنامهها در محیطهای ایزولهشده است که در مقایسه با ماشینهای مجازی (VM)، کانتینرهای Docker بسیار سبکتر، سریعتر و کممصرفتر هستند، زیرا هسته سیستمعامل میزبان را به اشتراک میگذارند. در این مطلب میخواهیم نحوه مدیریت سرور با Docker را آموزش دهیم؛ پیش از آن یک نگاه کوتاه به مزایای استفاده از این سیستم بیندازید.
مزایای استفاده از Docker را در لیست زیر خلاصه کردهایم:
- ایزولهسازی برنامهها بدون نیاز به ماشین مجازی
- قابلیت انتقال بین محیطهای توسعه، تست و تولید
- مدیریت خودکار منابع و استفاده بهینه از سختافزار
البته برای بالا بردن حداکثری عملکرد Docker انتخاب سختافزار خیلی مهم است. اگر نگران این موضوع هستید باید بدانید که بسیاری از مدیران سیستم به دنبال خرید سرور hp به عنوان یک انتخاب مطمئن هستند.
⏲ مدت زمان تخمینی مطالعه: 7 دقیقه
فهرست موضوعات
مدیریت سرور با Docker: نصب و راهاندازی اولیه
در این قسمت یاد میگیرید که مدیریت سرور با Docker چگونه است. از نصب و راهاندازی اولیه گرفته تا شبکهسازی، مدیریت دادهها، استقرار و امنیت را پوشش میدهیم. این راهنما برای کسانی است که میخواهند Docker را از پایه بیاموزند.
نصب Docker
برای نصب Docker در سیستمهای مبتنی بر لینوکس، میتوانید دستورات زیر را اجرا کنید:
curl -fsSL https://get.docker.com | sh
- sudo systemctl enable –now docker
بررسی موفقیتآمیز بودن نصب
برای اطمینان از نصب صحیح Docker، میتوانید دستور زیر را اجرا کنید:
- docker –version
اگر خروجی چیزی شبیه به Docker version 24.0.2, build abcdef نمایش داده شد، یعنی مراحل نصب را با موفقیت طی کردهاید.
اجرای اولین کانتینر (Hello World)
برای اینکه ببینیم Docker درست کار میکند، اولین کانتینر خود را اجرا میکنیم:
- docker run hello-world
با اجرای این دستور، Docker تصویر hello-world را جستجو و در صورت عدم وجود، آن را از Docker Hub دانلود میکند. سپس یک کانتینر از این تصویر اجرا و یک پیام تأیید نمایش داده میشود.
ایجاد و مدیریت کانتینرها
Docker از کانتینرها برای اجرای برنامهها استفاده میکند. کانتینرها، محیطهای ایزولهشدهای هستند که شامل همه چیزهایی که برای اجرای یک برنامه نیاز دارید (کتابخانهها، وابستگیها و کد برنامه) هستند.
ساخت یک وبسرور با Nginx در Docker
فرض کنیم میخواهیم یک سرور HTTP با Nginx راهاندازی کنیم. برای این کار، ابتدا باید یک Dockerfile ایجاد کنیم.
در پوشه پروژه، یک فایل جدید به نام Dockerfile بسازید و محتوای زیر را در آن قرار دهید:
- FROM nginx
- COPY ./public /usr/share/nginx/html
ساخت تصویر و اجرای کانتینر
- docker build -t my-web-server .
- docker run –name web-server -d -p 8080:80 my-web-server
- docker build -t my-web-server . → ساخت تصویر Docker
- docker run –name web-server -d -p 8080:80 my-web-server → اجرای کانتینر
اکنون میتوانید در مرورگر، آدرس http://localhost:8080 را باز کنید و خروجی Nginx را مشاهده کنید.
بیشتر بخوانید: چگونه میزان استفاده از منابع سرور را مانیتور کنیم؟
کار با Docker Images
تصاویر (Images) در Docker الگوهایی فقط خواندنی هستند که از آنها برای ساخت کانتینرها استفاده میشود.
مدیریت تصاویر Docker
برای مشاهده تمام تصاویر موجود روی سیستم خود، دستور زیر را اجرا کنید:
- docker images
حذف یک تصویر
اگر دیگر نیازی به یک تصویر ندارید، میتوانید آن را حذف کنید:
- docker rmi my-web-server
دانلود تصویر از Docker Hub
برای دریافت یک تصویر جدید، از دستور docker pull استفاده کنید. مثلاً برای دانلود آخرین نسخه اوبونتو:
- docker pull ubuntu
مدیریت چندین کانتینر با Docker Compose
برای اجرای چندین سرویس بهصورت همزمان (مثلاً یک وبسرور و یک دیتابیس) ، از Docker Compose استفاده میکنیم.
نمونه فایل docker-compose.yml برای Nginx و MySQL:
version: ‘3’
services:
web:
image: nginx
ports:
– “8080:80”
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: rootpass
برای اجرای سرویسها فقط دستور زیر را تایپ کنید:
- docker-compose up -d
در آخر هم مشاهده لاگها به وسیله دستور زیر قابل اجرا است:
- docker-compose logs –f
شبکهسازی در Docker
برای اینکه کانتینرهای مختلف بتوانند بهصورت ایمن و مستقیم با هم ارتباط داشته باشند، میتوان یک شبکه خصوصی ایجاد کرد:
ایجاد یک شبکه و اتصال کانتینرها به آن
docker network create my-network
docker run –name web-server –network my-network -d my-web-server
docker run –name db-server –network my-network -d mysql
مدیریت دادهها با Volume و Bind Mounts
کانتینرها بهطور پیشفرض دادهها را بهصورت موقتی ذخیره میکنند. برای ذخیرهسازی دائمی، از Volumes یا Bind Mounts استفاده میشود.
ایجاد و استفاده از Volume
docker volume create my-volume
docker run -v my-volume:/var/lib/mysql -d mysql
استفاده از Bind Mounts برای توسعه زنده
docker run –name web-server -d -p 8080:80 -v $(pwd)/public:/usr/share/nginx/html my-web-server
با این روش، تغییرات در پوشه public بهصورت زنده در کانتینر اعمال میشود.
استقرار و مقیاسپذیری
بهروزرسانی سرویس بدون Downtime را میخواهیم در این قسمت از مطلب مرور کنیم.
برای بهروزرسانی بدون وقفه، ابتدا نسخه جدیدی از تصویر خود بسازید:
- docker build -t my-web-server:v2 .
سپس آن را در کنار نسخه قدیمی اجرا کنید:
- docker run –name web-server-v2 -d -p 8081:80 my-web-server:v2
پس از اطمینان از عملکرد صحیح نسخه جدید، کانتینر قدیمی را حذف کنید:
- docker stop web-server && docker rm web-server
مقیاسپذیری با Docker Compose نیز با کد زیر انجام میشود:
docker-compose up –scale web=3 -d
نکات امنیتی در Docker
مدیریت سرور با Docker راحت و کاربردی است، اما اگر اصول امنیتی را رعایت نکنید، سیستمتان در برابر تهدیدهای امنیتی آسیبپذیر میشود. در این بخش نکات مهم برای افزایش امنیت در استفاده از Docker را بررسی میکنیم.
بیشتر بخوانید: سرعت کلاک پردازنده چیست؟ و آموزش رفع اورکلاک
عدم اجرای کانتینرها با دسترسی root
بهصورت پیشفرض بیشتر کانتینرهای Docker با دسترسی root اجرا میشوند. این یعنی اگر یک کانتینر آسیبپذیر باشد، به کل سیستم دسترسی پیدا میکند. برای جلوگیری از این مشکل همیشه یک کاربر محدود برای اجرای کانتینرها تعیین کنید.
برای اجرای یک کانتینر با یک کاربر محدود، میتوانید از گزینه –user استفاده کنید:
- docker run –user 1001 -d my-web-server
نکته مهم: عدد 1001 شناسه کاربری (UID) یک کاربر عادی در سیستم شما است.
محدود کردن منابع CPU و RAM برای هر کانتینر
اگر منابع پردازنده و حافظه (RAM) برای کانتینرها محدود نشود، یک کانتینر میتواند تمام منابع سیستم را مصرف کند و باعث کندی یا حتی از کار افتادن سرور شود.
برای محدود کردن میزان RAM و CPU یک کانتینر، از گزینههای زیر استفاده کنید:
- docker run –memory=”500m” –cpus=”1″ -d my-web-server
عدم استفاده از تصاویر غیررسمی و ناشناخته
همیشه از تصاویر رسمی و تأییدشده در Docker Hub یا منابع معتبر استفاده کنید، زیرا برخی تصاویر ناشناس ممکن است دارای کدهای مخرب باشند و امنیت سرور شما را تهدید کنند.
قبل از دانلود یک تصویر، بررسی کنید که آیا از یک منبع معتبر است یا خیر:
- docker pull nginx:latest
نتیجهگیری
مدیریت سرور با Docker مقیاسپذیر و کارآمد است و میتوانید برنامههای خود را در محیطهای ایزوله اجرا کنید و بدون دغدغه ناسازگاریهای سیستمی، آنها را در محیطهای مختلف مستقر کنید.
اگر قصد بهبود عملکرد سیستمهای Docker خود را دارید و بودجه کافی را ندارید، پیشنهاد میشود به خرید سرور استوک hp توجه کنید.
در صورتی که تجربهای در زمینه مدیریت سرور با Docker داشتهاید، خوشحال میشویم با ما و دوستانتان به اشتراک بگذارید.