cp.lv — VPS, выделенные и облачные серверы

cp.lv (LANGMARKET LLP) — хостинг-провайдер: VPS, выделенные и облачные серверы на NVMe с выбором ОС, полным root-доступом и поддержкой 24/7. Тест-период до оплаты: выделенные серверы — 5 дней, VPS и облако — 5 часов.

Contact Info
LANGMARKET LLP
Rīga, Latvija

+371 00 000 000

Follow Us

Личный кабинет

Язык

Установка и базовая настройка Docker и docker compose на VPS

Установка и базовая настройка Docker и docker compose на VPS

Запустить на сервере одной командой (сначала проверьте содержимое скрипта ниже):

curl -sSL https://cp.lv/scripts/ustanovit-docker-vps.sh | sudo bash

…или через wget:

wget -qO- https://cp.lv/scripts/ustanovit-docker-vps.sh | sudo bash

Содержимое скрипта ustanovit-docker-vps.sh:

#!/usr/bin/env bash
set -e
export DEBIAN_FRONTEND=noninteractive

# 1. Удаление старых версий
sudo apt-get remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true

# 2. Официальный репозиторий Docker
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 3. Установка Docker Engine и плагинов
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker

# 4. Запуск без sudo (применится после нового входа по SSH)
sudo usermod -aG docker $USER

# 5. Ограничение размера логов контейнеров
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

# 6. Проверка
sudo docker run hello-world
docker compose version
echo "Docker готов. Перезайдите по SSH, чтобы работать без sudo."

Docker упаковывает приложение и его зависимости в контейнер, который одинаково работает на любом сервере. Ниже — установка Docker Engine и плагина docker compose из официального репозитория на Ubuntu 22.04/24.04. Не используйте пакет docker.io из стандартного репозитория Ubuntu — он часто устаревший.

Шаг 1. Удаление старых версий

sudo apt remove docker docker-engine docker.io containerd runc 2>/dev/null
sudo apt update

Шаг 2. Подключение официального репозитория Docker

sudo apt install ca-certificates curl gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

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

Шаг 3. Установка Docker Engine и плагинов

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin -y

Включите автозапуск и проверьте работу:

sudo systemctl enable --now docker
sudo docker run hello-world

Если вывелось «Hello from Docker!» — движок работает.

Шаг 4. Запуск Docker без sudo

Добавьте своего пользователя в группу docker, чтобы не писать sudo перед каждой командой:

sudo usermod -aG docker $USER
newgrp docker
docker ps

Изменение группы применяется после нового входа в сессию SSH.

Шаг 5. Проверка docker compose

В современном Docker compose — это подкоманда, а не отдельный бинарник:

docker compose version

Создайте простой стек. Файл docker-compose.yml:

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    restart: unless-stopped
    volumes:
      - ./site:/usr/share/nginx/html:ro

Запуск и проверка:

mkdir site && echo "<h1>It works</h1>" > site/index.html
docker compose up -d
curl http://localhost:8080

Остановить и удалить стек:

docker compose down

Полезные команды на каждый день

Задача Команда
Список контейнеров docker ps -a
Логи сервиса docker compose logs -f web
Обновить образы docker compose pull && docker compose up -d
Очистить мусор docker system prune -a
Использование диска docker system df

Автообновление и безопасность

  • Ограничьте размер логов, чтобы контейнеры не забили диск. Откройте файл /etc/docker/daemon.json в редакторе:
sudo nano /etc/docker/daemon.json

Содержимое файла:

{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" }
}

Либо создайте файл целиком одной командой — скопируйте и вставьте в консоль:

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.

  • Не публикуйте порты БД наружу (5432, 3306) без необходимости — оставляйте их во внутренней сети compose.
  • Регулярно обновляйте образы: уязвимости чаще всего в устаревших версиях.

Частые вопросы

Чем отличается docker-compose от docker compose? Старый docker-compose (с дефисом) — отдельный Python-бинарник v1, снят с поддержки. Новый docker compose (плагин v2) ставится вместе с движком и рекомендуется.

Нужен ли swap для Docker? На сервере с малым объёмом RAM swap помогает пережить пики сборки образов. 1–2 ГБ swap обычно достаточно.

Как автоматически запускать контейнеры после перезагрузки? Укажите restart: unless-stopped в compose-файле и убедитесь, что сервис Docker включён: systemctl is-enabled docker.

Docker занял весь диск — как почистить? docker system prune -a удалит неиспользуемые образы, контейнеры и сети. Тома удаляются флагом --volumes (осторожно с данными).

Docker любит быстрый диск и запас памяти под сборки. Подходящие конфигурации — на странице аренда VPS, а под контейнерные проекты возьмите VPS для Docker.

Ольга Наумова

Ольга Наумова

Ведущий DevOps-инженер. Автоматизирует развёртывание серверов и настраивает KVM-доступ, чтобы клиенты запускались за минуты.