Docker چیست؟
Docker یک Container Runtime است. یعنی به شما اجازه میدهد برنامهها را همراه با تمام وابستگیهایشان (کتابخانهها، تنظیمات، باینریها) داخل چیزی به نام Container اجرا کنید.
چند نکته مهم:
- Container ماشین مجازی نیست.
- Container کرنل سیستمعامل میزبان را استفاده میکند.
- سبکتر، سریعتر و قابلحملتر از VM است.
مرحله 1: بهروزرسانی سیستم
sudo apt update && sudo apt upgrade -yمرحله 2: نصب وابستگیها
sudo apt install ca-certificates curlمرحله 3: اضافهکردن GPG Key رسمی Docker
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.ascمرحله 4: اضافهکردن Docker Repository
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOFمرحله 5: نصب Docker Engine
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginمرحله 6: بررسی نصب
docker --versionاگر نسخه Docker نمایش داده شد، نصب موفق بوده.
اجرای Docker بدون sudo
بهصورت پیشفرض Docker نیاز به sudo دارد. برای راحتی کار:
sudo usermod -aG docker $USER
newgrp docker بعد از این مرحله یا باید logout/login کنی یا از newgrp استفاده کنی.
اجرای اولین کانتینر
تست با hello-world
sudo docker run hello-worldاگر پیغام خوشآمدگویی Docker را دیدی، همهچیز درست کار میکند.
Image و Container دقیقاً چه هستند؟
Image
Image یک قالب فقطخواندنی است. مثل Blueprint. مثال:
nginx
mysql
redisContainer
Container یک نمونه در حال اجرا از Image است.
تشبیه ساده:
Image = Class
Container = Objectاجرای یک کانتینر واقعی (مثال Nginx)
docker run -d -p 8080:80 --name my-nginx nginxتوضیح پارامترها:
--name <نام کانتینر> -p 8080:80 <پورت متصل به سیستم> -d <اجرا در پس زمینه>حال اگر مرورگر را باز نمایید:
http://localhost:8080صفحه پیشفرض Nginx را میبینی.
دستورات پرکاربرد Docker
نمایش کانتینرهای در حال اجرا:
docker psنمایش همه کانتینرها:
docker ps -aتوقف کانتینر:
docker stop my-nginxحذف کانتینر:
docker rm my-nginxDocker Compose چیست و چرا به آن نیاز داریم؟
فرض کنید:
یک وباپ دارید
یک دیتابیس دارید
یک Redis دارید
اجرای تکتک این سرویس ها با docker run هم خستهکننده است هم غیرقابل نگهداری.
Docker Compose آمده تا بگوید:
«همه سرویسها را در یک فایل تعریف کن و با یک دستور بالا بیاور»
Docker Compose چگونه کار میکند؟
Docker Compose از یک فایل YAML به نام docker-compose.yml استفاده میکند.
مثال ساده:
version: "3.9"
services:
web:
image: nginx
ports:
- "8080:80"
redis:
image: redis:7
و اجرا:
docker compose up -dمزایای Docker Compose
- تعریف زیرساخت بهصورت کد (Infrastructure as Code)
- اجرای همه سرویسها با یک دستور
- مدیریت راحت شبکه و وابستگیها
- مناسب محیط توسعه و تست
نصب Docker از مخازن رسمی Ubuntu
Docker علاوهبر مخزن رسمی خودش، در مخازن پیشفرض Ubuntu هم با نام پکیج docker.io در دسترس است و میتوان آن را بهصورت زیر نصب کرد:
sudo apt update && sudo apt install docker.io docker-compose-v2این روش کار میکند و Docker بدون مشکل اجرا میشود، اما تفاوتهای مهمی با نصب از مخزن رسمی Docker دارد که دانستن آنها ضروری است.
تفاوت Docker مخازن Ubuntu با مخزن رسمی Docker
پکیج docker.io معمولاً نسخهای قدیمیتر از Docker را ارائه میدهد
مخزن رسمی Docker همیشه آخرین نسخه پایدار را منتشر میکند
Ubuntu تمرکز زیادی روی پایداری دارد، نه بهروز بودن. به همین دلیل ممکن است نسخه Docker موجود در مخازن Ubuntu چند ماه عقبتر باشد.
چه زمانی نصب از مخازن Ubuntu منطقی است؟
مناسب است اگر:
- سرور شما قدیمی یا کاملاً محدود است
- سیاست سازمان فقط اجازه استفاده از مخازن رسمی سیستمعامل را میدهد
- Docker نقش حیاتی در زیرساخت شما ندارد
مناسب نیست اگر:
- در نقش DevOps یا توسعهدهنده هستید
- از Docker Compose استفاده میکنید
- محیط توسعه یا آموزش میسازید
- میخواهید رفتار Docker شما با مستندات رسمی یکی باشد
جمعبندی این بخش
- Docker از مخازن Ubuntu قابل نصب است
- اما برای بیشتر سناریوهای توسعه و DevOps پیشنهاد نمیشود
- برای کار جدی و یادگیری صحیح، استفاده از مخزن رسمی Docker انتخاب بهتری است