> ## Documentation Index
> Fetch the complete documentation index at: https://wiki.lumiweb.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# Docker

> Установка Docker и запуск контейнеров

Docker запускает программы в изолированных «коробках» (контейнерах): внутри лежит сама программа и всё, что ей нужно. Не надо вручную доставлять библиотеки и подбирать версии — взял готовый образ, запустил, работает. Удалил контейнер — система осталась чистой. Вместо десятка команд по инструкции обычно одна-две, и сервис уже крутится.

На сервере Lumi ты по умолчанию работаешь под `root` (IP и пароль — в карточке сервера в боте), а образ по умолчанию — Ubuntu 22.04, так что официальный скрипт ниже ставится без лишних шагов.

<Note>
  Команды актуальны на момент написания. Перед установкой сверься с официальным сайтом [docs.docker.com](https://docs.docker.com/engine/install/) — синтаксис иногда меняется.
</Note>

## Установка

<Steps>
  <Step title="Скачай официальный скрипт">
    Самый быстрый способ — официальный скрипт. Он сам определит твою систему (Ubuntu или Debian) и поставит свежий Docker:

    ```bash theme={"system"}
    curl -fsSL https://get.docker.com -o get-docker.sh
    ```
  </Step>

  <Step title="Запусти скрипт">
    ```bash theme={"system"}
    sh get-docker.sh
    ```

    <Tip>
      Если хочешь контролировать процесс — поставь Docker из официального репозитория. Способ длиннее, но даёт точный контроль над источником пакетов. Полная инструкция для Ubuntu и Debian — на [docs.docker.com](https://docs.docker.com/engine/install/).
    </Tip>
  </Step>

  <Step title="Проверь, что всё работает">
    ```bash theme={"system"}
    docker run hello-world
    ```

    Docker скачает крошечный тестовый образ и запустит его. Если увидел сообщение `Hello from Docker!` — установка прошла успешно.
  </Step>
</Steps>

## Базовые команды

<AccordionGroup>
  <Accordion title="Запустить контейнер">
    Запустить контейнер в фоне с пробросом порта (наружный порт `8080` → порт `80` внутри контейнера):

    ```bash theme={"system"}
    docker run -d -p 8080:80 nginx
    ```

    Здесь `-d` — фоновый режим (detached), `-p` — проброс порта, `nginx` — имя образа.
  </Accordion>

  <Accordion title="Посмотреть запущенные контейнеры">
    ```bash theme={"system"}
    docker ps
    ```
  </Accordion>

  <Accordion title="Посмотреть логи контейнера">
    По имени или ID из `docker ps`:

    ```bash theme={"system"}
    docker logs ИМЯ_КОНТЕЙНЕРА
    ```
  </Accordion>

  <Accordion title="Остановить и удалить контейнер">
    ```bash theme={"system"}
    docker stop ИМЯ_КОНТЕЙНЕРА
    docker rm ИМЯ_КОНТЕЙНЕРА
    ```
  </Accordion>

  <Accordion title="Посмотреть скачанные образы">
    ```bash theme={"system"}
    docker images
    ```
  </Accordion>
</AccordionGroup>

## Docker Compose

Когда сервису нужно несколько контейнеров (например, приложение + база данных) или просто длинная команда запуска с кучей параметров — её неудобно держать в голове. Docker Compose позволяет описать всё в одном файле `compose.yaml` и поднимать одной командой.

<Note>
  В актуальной версии Docker Compose встроен в Docker как плагин и вызывается через `docker compose` (без дефиса). Старая самостоятельная утилита `docker-compose` (с дефисом) устарела — в новых установках её нет.
</Note>

Пример `compose.yaml` — веб-сервер на порту 8080:

```yaml theme={"system"}
services:
  web:
    image: nginx
    ports:
      - "8080:80"
    restart: unless-stopped
```

Положи файл в отдельную папку, зайди в неё и подними сервис в фоне:

```bash theme={"system"}
docker compose up -d
```

Остановить и удалить всё, что описано в файле:

```bash theme={"system"}
docker compose down
```

<Warning>
  Если контейнер пробрасывает порт наружу (флаг `-p` или блок `ports`), этот порт становится доступен из интернета. Открывай в файрволе только те порты, что реально нужны, и закрывай панели управления паролем. Настройка файрвола: [Файрвол (ufw)](/vps/firewall).
</Warning>

Lumi отвечает за сервер и сеть; настройку софта делаешь ты. Сеть/порт не работают — [@lumisup\_robot](https://t.me/lumisup_robot).

## Куда дальше

<CardGroup cols={2}>
  <Card title="n8n" icon="diagram-project" href="/vps/n8n">
    Автоматизация процессов — запускается через Docker.
  </Card>

  <Card title="Своя LLM" icon="robot" href="/vps/llm">
    Нейросеть на сервере через Ollama.
  </Card>
</CardGroup>
