نصب Docker و Docker Compose روی اوبونتو (روش رسمی)

برای نصب آخرین نسخهٔ پایدار Docker بهتر است از مخزن رسمی خود Docker استفاده کنید نه بستهٔ docker.io قدیمی اوبونتو. این راهنما نصب کامل همراه با Compose را قدم‌به‌قدم انجام می‌دهد.

DevOpsمقدماتی8 دقیقه

۱حذف بسته‌های قدیمی

اگر نسخهٔ قدیمی داکر نصب بوده، حذفش کنید (اگر چیزی نصب نبود خطای «not installed» طبیعی است).

bash
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove -y $pkg; done

۲افزودن مخزن رسمی Docker

کلید GPG و مخزن را اضافه کنید.

bash
sudo apt-get update
sudo apt-get install -y 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

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

۳نصب Docker Engine و Compose

بستهٔ docker-compose-plugin دستور docker compose (با فاصله) را می‌دهد.

bash
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
docker --version && docker compose version

۴اجرا بدون sudo

کاربر را به گروه docker اضافه کنید و دوباره وارد شوید.

bash
sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-world

عضویت در گروه docker تقریباً معادل دسترسی root است؛ فقط به کاربران مورد اعتماد بدهید.

۵محدود کردن اندازهٔ لاگ کانتینرها

بدون این تنظیم لاگ کانتینرها می‌توانند دیسک را پر کنند.

bash
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" }
}
EOF
sudo systemctl restart docker

۶هشدار مهم: داکر و فایروال

داکر خودش قوانین iptables می‌سازد و پورت‌هایی که با -p منتشر می‌کنید حتی با ufw هم از بیرون باز می‌مانند. برای دیتابیس‌ها و سرویس‌های داخلی همیشه به 127.0.0.1 متصل کنید.

bash
# ناامن: از بیرون در دسترس
docker run -d -p 3306:3306 mysql

# امن: فقط روی خود سرور
docker run -d -p 127.0.0.1:3306:3306 mysql

در تجربهٔ بسیاری از سرورها، دیتابیس با -p 3306:3306 به اینترنت باز و هک شده است.

۷بررسی و پاک‌سازی

وضعیت کانتینرها و فضای دیسک را ببینید و منابع بلااستفاده را پاک کنید.

bash
docker ps -a
docker system df
docker system prune -f

پرسش‌های پرتکرار دربارهٔ نصب Docker و Docker Compose روی اوبونتو (روش رسمی)

تفاوت docker-compose و docker compose چیست؟

docker-compose (با خط تیره) نسخهٔ قدیمی پایتونی است و docker compose (با فاصله) پلاگین جدید و پشتیبانی‌شدهٔ خود Docker است. برای پروژه‌های جدید از نسخهٔ با فاصله استفاده کنید.