Запустите Docker на своем VPS за несколько минут
Контейнеры на сервере, который принадлежит вам. Закажите VPS, вставьте несколько команд из официального репозитория Docker и через пару минут выполните первый docker compose up.
Что можно делать с Docker на своем VPS
Один сервер — столько контейнеров, сколько на нем поместится. Приложение, база, очередь и обратный прокси работают рядом, каждый в своем контейнере, со своими зависимостями.
Разворачивайте весь стек приложения одним файлом
Берите готовые образы вместо настройки с нуля
Выкатывайте обновления, не теряя данные
Собирайте микросервисную архитектуру на одном сервере
Восстанавливайтесь после перезагрузки быстрее
Запускайте Docker без root-привилегий
Выберите тариф VPS для Docker
Сам Docker Engine почти не требует ресурсов, поэтому тариф подбирайте под то, что работает внутри контейнеров. Рекомендуем начинать со Start VPS: 2 ядра и 2 ГБ RAM оставляют запас для системы и роста нагрузки. Для типичного compose-стека с базой данных и обратным прокси лучше выбрать Medium VPS с 4 ГБ RAM.
- 41 СтранаОт$10.19 / 1 месяц$9.68 с is*smart
- Xeon 2x2.20 GHz CPU
- 2 Gb RAM
- 30GB SSD Диск
- 3 Tb Трафик
- 41 СтранаОт$21.24 / 1 месяц$20.18 с is*smart
- Xeon 3x2.20 GHz CPU
- 4 Gb RAM
- 40GB SSD Диск
- Не учитывается Трафик
- 41 СтранаОт$33.99 / 1 месяц$32.29 с is*smart
- Xeon 4x2.20 GHz CPU
- 8 Gb RAM
- 50GB SSD Диск
- Не учитывается Трафик
Сделайте ваш VPS/VDS сервер еще мощнее
Ознакомьтесь с возможностями изменения конфигурации вашего VPS. Вы можете приобрести дополнительное дисковое пространство, увеличить производительность процессора, добавить RAM память, а также воспользоваться дополнительными услугами без перехода на новый тариф.
Как развернуть Docker на VPS
От чистого Ubuntu до работающего Docker-стека за HTTPS — пять шагов.
Шаг 01 — Закажите VPS и подключитесь
Выберите VPS с Ubuntu в локации рядом с вашими пользователями или внешними API, к которым обращаются контейнеры, и подключитесь по SSH. Команды ниже выполняются в root-шелле.
ssh root@your-server-ipЕсли вход под root отключен, подключитесь под своей учетной записью и выполните sudo -i.
Шаг 02 — Установите Docker Engine и Compose
Установите Docker Engine и плагин Compose из официального apt-репозитория Docker:
apt updateapt install ca-certificates curlinstall -m 0755 -d /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg \ -o /etc/apt/keyrings/docker.ascchmod a+r /etc/apt/keyrings/docker.asc tee /etc/apt/sources.list.d/docker.sources <<EOFTypes: debURIs: https://download.docker.com/linux/ubuntuSuites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")Components: stableArchitectures: $(dpkg --print-architecture)Signed-By: /etc/apt/keyrings/docker.ascEOF apt updateapt install docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-pluginsystemctl enable --now dockerdocker run --rm hello-worldШаг 03 — Направьте домен на VPS
Создайте A-запись, которая указывает домен приложения на VPS. Caddy сможет получить HTTPS-сертификат только после того, как домен начнет корректно резолвиться.
Type: AName: appValue: your-server-ipРазрешите входящий TCP-трафик на портах 80 и 443 — в файрволе сервера и в панели управления провайдера.
Шаг 04 — Опишите Docker-стек
Создайте каталог проекта:
mkdir -p /opt/docker-appcd /opt/docker-appСоздайте .env и замените пример на длинный URL-безопасный пароль:
POSTGRES_PASSWORD=replace-with-a-long-random-stringСоздайте Caddyfile:
app.yourdomain.com { reverse_proxy app:8080}Создайте compose.yaml. Замените your-org/your-app:1.4.2 на образ и версию вашего приложения.
services: app: image: your-org/your-app:1.4.2 restart: unless-stopped environment: DATABASE_URL: postgres://app:${POSTGRES_PASSWORD}@db:5432/app depends_on: db: condition: service_healthy db: image: postgres:16 restart: unless-stopped environment: POSTGRES_DB: app POSTGRES_USER: app POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - db-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U app -d app"] interval: 5s timeout: 5s retries: 10 caddy: image: caddy:2 restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy-data:/data - caddy-config:/config volumes: db-data: caddy-data: caddy-config:Порты на хосте публикует только Caddy. Приложение и база остаются доступны лишь внутри приватной сети Compose.
Шаг 05 — Запустите стек
Защитите файл с переменными, поднимите контейнеры и проверьте их статус:
chmod 600 .envdocker compose up -ddocker compose psCaddy сам получает и продлевает HTTPS-сертификат и перенаправляет HTTP-запросы на HTTPS. Именованные тома сохраняют данные базы и сертификаты Caddy при пересоздании контейнеров.
Частые проблемы
- Приложение стартует раньше, чем готова база — обычный depends_on гарантирует порядок запуска, но не готовность. Добавьте базе health check и зависимость с condition: service_healthy, как выше.
- Опубликованные порты игнорируют ufw — Docker обрабатывает трафик контейнеров в таблице nat, до цепочек, которые использует ufw, поэтому порт отвечает даже тогда, когда ufw считает его закрытым. Публикуйте только прокси: привязка к 127.0.0.1 — это тоже публикация порта, просто ограниченная loopback-интерфейсом.
- Загрузка образов начинает отваливаться посреди деплоя — Docker Hub разрешает 100 запросов за 6 часов на IPv4-адрес или подсеть IPv6 /64 без авторизации и 200 за 6 часов на бесплатном аккаунте Personal. Выполните docker login на сервере перед деплоем, который тянет много образов.
- Данные пропали после пересоздания контейнера — то, что лежит в writable-слое, исчезает вместе с контейнером. Постоянные данные держите в именованном томе или bind mount.