نصب Docker و اجرای برنامه با Docker Compose در اوبونتو

با Docker Compose میتوانید تنظیم اجرای برنامه را در یک فایل نگه دارید. این آموزش روی اوبونتوی تازه و پشتیبانیشده، یک وبسرور نمونه را اجرا میکند. برای سروری که Docker یا برنامهٔ واقعی دارد، ابتدا وضعیت و بکاپ را بررسی کنید؛ بستهها یا دادههای موجود را کورکورانه حذف نکنید.
۱. نسخه و پیشنیازها
cat /etc/os-release
uname -m
docker --version
docker compose version
اگر Docker نصب نیست، دو دستور آخر خطا میدهند که طبیعی است. نسخهٔ اوبونتو و معماری باید در فهرست پشتیبانی رسمی Docker باشند. نصبهای قدیمی و بستههای متعارض را مطابق مستند رسمی بررسی کنید؛ این مقاله فرض میکند ماشین تازه است.
۲. نصب از مخزن رسمی Docker
دستورهای زیر کلید و مخزن رسمی را اضافه میکنند. قبل از اجرا، محتوای فایل موجود docker.sources را بررسی کنید تا تنظیم قبلی را ناخواسته جایگزین نکنید:
sudo apt update
sudo apt install ca-certificates curl
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
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
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
سپس وضعیت را بررسی کنید:
sudo systemctl status docker --no-pager
sudo docker version
sudo docker compose version
در این آموزش از sudo استفاده میکنیم. عضویت در گروه docker دسترسی بسیار قدرتمندی به میزبان میدهد؛ آن را معادل یک دسترسی عادی و بیخطر تلقی نکنید.
۳. پروژهٔ نمونه بسازید
mkdir -p ~/px-demo/html
cd ~/px-demo
printf "<h1>PXCloud Docker test</h1>\n" > html/index.html
nano compose.yaml
محتوای زیر را در compose.yaml قرار دهید. فاصلهگذاری YAML مهم است. برچسب stable-alpine برای مثال آموزشی است؛ در محیط عملیاتی نسخه یا digest بررسیشده را ثابت کنید:
services:
web:
image: nginx:stable-alpine
ports:
- "127.0.0.1:8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
۴. اجرا و بررسی نتیجه
sudo docker compose config
sudo docker compose up -d
sudo docker compose ps
curl http://127.0.0.1:8080/
sudo docker compose logs --tail=50 web
دستور up در صورت نیاز ایمیج را دانلود میکند. باید متن صفحهٔ آزمایشی را ببینید. پورت 8080 عمداً فقط روی localhost منتشر شده و از اینترنت مستقیم باز نمیشود. برای نمایش امن در مرورگر رایانه، میتوانید از تونل SSH استفاده کنید یا پس از طراحی دسترسی، Nginx را بهعنوان reverse proxy تنظیم کنید.
۵. فایلها و دادهٔ پایدار
پوشهٔ html روی میزبان باقی میماند و فقط خواندنی به کانتینر متصل شده است. دادهای که صرفاً داخل لایهٔ نوشتنی کانتینر باشد ممکن است با جایگزینی کانتینر از بین برود. برای دیتابیس، volume مناسب و بکاپ سازگار لازم است؛ داشتن volume خودِ بکاپ نیست. رمزها را در فایل عمومی یا مخزن کد قرار ندهید.
۶. توقف و بهروزرسانی
sudo docker compose stop
sudo docker compose start
برای بهروزرسانی، ابتدا بکاپ و تغییرات نسخه را بررسی کنید، سپس در محیط آزمایشی pull و up را امتحان کنید:
sudo docker compose pull
sudo docker compose up -d
این کار ممکن است کانتینر را دوباره بسازد. دستور down کانتینر و شبکهٔ پروژه را جمع میکند؛ افزودن -v میتواند volumeها را هم حذف کند. در این آموزش از -v و پاکسازی عمومی prune استفاده نمیکنیم.
۷. فایروال و خطاهای رایج
پورتهای منتشرشدهٔ Docker ممکن است از قواعد معمول UFW عبور کنند. قبل از تغییر 127.0.0.1 به انتشار عمومی، محدودیتهای Docker و فایروال بیرونی را بررسی و از شبکهٔ دیگر تست کنید. اگر port already allocated دیدید، با ss سرویس اشغالکننده را پیدا کنید؛ آن را حدسی متوقف نکنید. برای permission denied مسیر volume، مالکیت و مجوزها را بررسی کنید و از chmod 777 بهعنوان راهحل عمومی استفاده نکنید.
آموزشهای UFW، Nginx و SSL و بکاپ لینوکس مکمل این مطلباند.
منابع و ادامهٔ یادگیری
مبنای مثالهای سرور، اوبونتو ۲۴٫۰۴ LTS است؛ نام سرویسها و روش نصب در توزیعهای دیگر ممکن است متفاوت باشد. تصویر مقاله مفهومی است. این دستورها هنگام تهیهٔ مقاله روی سرویس واقعی مشتری اجرا نشدهاند.
منابع رسمی: نصب رسمی Docker، Docker Compose، فایروال Docker
برای انتخاب زیرساخت، سرورهای لینوکس و چکلیست خرید VPS را ببینید. آموزشهای مکمل در مرکز آموزش پرشین کلود در دسترساند.


