DevOps

نصب داکر روی سرور ابری و اجرای اولین کانتینر

داکر همان چیزی است که «روی سیستم من کار می‌کرد!» را از فرهنگ لغت تیم‌ها حذف کرد: اپلیکیشن و همه‌ی وابستگی‌هایش در یک بسته‌ی قابل حمل. و سرور ابری ساعتی بهترین زمین بازی برای آن است — محیط تمیز، در یک دقیقه، به قیمت یک ساندویچ.

چرا داکر + سرور ابری ساعتی؟

  • محیط همیشه تمیز: سرور تازه می‌سازید، کانتینرها را بالا می‌آورید، تست می‌کنید، سرور را حذف می‌کنید — سیستم اصلی‌تان همیشه دست‌نخورده می‌ماند و فقط چند ساعت هزینه داده‌اید.
  • استقرار تکرارپذیر: همان چیزی که روی سرور تست اجرا شد، بایت‌به‌بایت روی سرور اصلی اجرا می‌شود.
  • چند اپ روی یک سرور: هر اپ در کانتینر خودش، بی‌آنکه وابستگی‌هایشان با هم گلاویز شوند.

نصب داکر روی اوبونتو

روش رسمی و همیشه به‌روز، اسکریپت نصب خود داکر است:

curl -fsSL https://get.docker.com | sh
systemctl enable --now docker

تست سلامت:

docker run hello-world

اگر پیام خوش‌آمد دیدید، موتور روشن است. برای آنکه هر بار sudo نزنید، کاربرتان را به گروه docker اضافه کنید (و یک‌بار خارج/وارد شوید):

usermod -aG docker $USER
⚠️ عضویت در گروه docker عملاً دسترسی root می‌دهد — فقط برای کاربر مدیر خودتان انجامش دهید.

اولین کانتینر واقعی: وب‌سرور

docker run -d --name web -p 8080:80 nginx:alpine

ترجمه‌ی دستور: ایمیج سبک nginx:alpine را بگیر، در پس‌زمینه اجرا کن (-d)، و پورت ۸۰ کانتینر را روی پورت ۸۰۸۰ سرور باز کن. حالا http://IP:8080 را در مرورگر ببینید. چند دستور روزمره:

docker ps               # چه چیزهایی در حال اجراست؟
docker logs -f web      # لاگ زنده
docker exec -it web sh  # ورود به داخل کانتینر
docker stop web && docker rm web   # توقف و حذف

Docker Compose: اپ چندسرویسه با یک فایل

اپ واقعی معمولاً چند قطعه دارد — مثلاً وردپرس + دیتابیس. Compose هر دو را با هم تعریف و مدیریت می‌کند. فایل compose.yaml:

services:
  db:
    image: mariadb:11
    environment:
      MARIADB_ROOT_PASSWORD: strong-pass
      MARIADB_DATABASE: wp
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wp
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: strong-pass
    depends_on:
      - db

volumes:
  db_data:

و فقط:

docker compose up -d

یک وردپرس کامل با دیتابیس بالا آمد. docker compose down همه را جمع می‌کند (داده‌ها در volume می‌مانند).

سه نکته که بعداً از خودتان تشکر می‌کنید

  1. داده‌ی مهم فقط در volume. کانتینرها یک‌بارمصرف‌اند؛ هرچه باید بماند (دیتابیس، آپلودها) را در volume یا bind-mount نگه دارید و از همان‌ها بکاپ بگیرید.
  2. تگ نسخه بزنید، نه latest. mariadb:11 قابل پیش‌بینی است؛ latest ممکن است فردا چیز دیگری باشد و استقرارتان را بشکند.
  3. پورت‌ها را آگاهانه باز کنید. هر -p یک درِ عمومی است؛ دیتابیس را هرگز به بیرون map نکنید — سرویس‌های داخل یک Compose، همدیگر را با نام می‌بینند و نیازی به پورت عمومی ندارند. فایروال را هم از چک‌لیست امنیت یادتان نرود.

گردش کار پیشنهادی با سرور ساعتی

یک سناریوی واقعی که مزه‌ی ترکیب داکر و پرداخت ساعتی را نشان می‌دهد:

  1. صبح: سرور ۴ گیگی می‌سازید (۶۰ ثانیه)؛
  2. docker compose up -d — محیط کامل پروژه بالا می‌آید؛
  3. تمام روز توسعه و تست؛
  4. عصر: push به رجیستری/گیت، خروجی از volumeها، حذف سرور؛
  5. هزینه‌ی کل روز: چند ساعت سرور، نه یک ماه.

قدم بعدی

اگر هنوز سروری برای تمرین ندارید، همین حالا یکی بسازید — با پرداخت ساعتی، کل این آموزش کمتر از قیمت یک قهوه تمام می‌شود. برای اجرای مستقیم سایت (بدون داکر) هم آموزش Nginx روی اوبونتو را داریم.

آموزش‌های مرتبط

آماده‌ی تمرین عملی هستی؟

سرور ابری ساعتی مهران هاست در ۶۰ ثانیه تحویل می‌شود — تمرین کن، و فقط بابت همان ساعت‌ها پرداخت کن.