# Запуск контейнеров

Присутствует 2 варианта запуска контейнеров:

1. Обычный, через команду `docker run`
2. С помощью файла docker-compose.yml

Обычный запуск достаточно простой, но не удобен. Мы расмотрим 2 вариант, так как он более понятный и его чаще всего используют.

## Пример файла docker-compose.yml

```yaml
services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs
    volumes:
      - /docker/rustdesk/data:/root
    network_mode: host
    depends_on:
      - hbbr
    restart: unless-stopped
  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - /docker/rustdesk/data:/root
    network_mode: host
    restart: unless-stopped
```

Это рабочая настройка контейнера с RustDesk Server, скопированная с моего сервера. 

Пробежимся по параметрам, которые показаны выше.

| Название | Описание |
| :---:    | :------- |
| **services** | Основной параметр, в который вводяться параметры контейнеров. |
| **hbbs** и **hbbr** | Название контейнеров. |
| **container_name** | Назначение основного названия контейнера. |
| **image** |  Путь до образа контейнера `{ХОСТ}/{ОБРАЗ}:{ВЕРСИЯ} |
| **command** | Комманда, которые будет воспроизводиться при старе контейнера. Обычно не указываеться. |
| **volumes** | Точки монтирования каталогов `{ХОСТ}:{КОНТЕЙЕР}`. |
| **network_mode** | Тип проброса сети. |
| **depends_on** | Включение после определенного контейнера. |
| **restart** | Тип перезапуска. |

## Запуск контейнеров

Запуск достаточно простой. Нужно ввести данную команду:

```bash
docker compose up
```

Команда запустит и выведет логи, но не переведет в фоновый режим. Следующая команда запуит в демоне:

```bash
docker compose up -d
```

Во время запуска, если образ не был загружен, Docker автоматически подгрузит по адресу, который был предоставлен в параметре **image**.

!!!warning "Обратите внимание"
    Активный каталог должен быть там, где находиться файл **docker-compose.yml**, когда используете команду, которая начинаеться с `docker compose`.

## Проверка активных контейнеров

Да бы посмотреть какие контейнеры запущены на хосте, используеться данная комманда:

```bash
docker ps
```

!!!info "Пример вывода"
    ```
    ...
    c737f116506f   rustdesk/rustdesk-server:latest          "hbbs"    3 months ago    Up 2 months          hbbs
    ecf717a21f84   rustdesk/rustdesk-server:latest          "hbbr"    3 months ago    Up 2 months          hbbr
    ...
    ```

- **CONTAINER ID** - ID контейнера.
    - **c737f116506f**
- **IMAGE** - Образ, использующий контейнером.
    - **rustdesk/rustdesk-server:latest**
- **COMMAND** - Комманда, работающая в контейнере.
    - **"hbbs"**
- **CREATED** - Когда контейнер создан.
    - **3 months ago**
- **STATUS** - Время работы контейнера.
    - **Up 2 months**
- **PORTS** - Проброшенные порты с контейнера.
    - Отстутвует, так как параметр `network_mode: host` передает весь трафик на хост.
- **NAME** - Имя контейнера.
    - **hbbs**

## Отключение контейнера

Выключение происходит данной коммандой:

```bsah
docker compose stop
```

## Удаление данных контейнера

Это полезно во время очистки или диангостики/восстановления.

```bash
docker compose rm
```

Docker может запросить подтверждение.

## Ссылки

- [Оф. документация Docker Compose](https://docs.docker.com/compose/) - На английском языке.
