add backup instruction

This commit is contained in:
2025-08-02 17:33:16 +00:00
parent 4b70054e86
commit 3afcc87977

177
backup_docker_image.md Normal file
View File

@@ -0,0 +1,177 @@
Создать **ISO-образ** напрямую из Docker-контейнера — **невозможно**, потому что **ISO** — это образ оптического диска (например, для загрузки ОС), а Docker использует **собственный формат образов**, основанный на слоях файловой системы.
Однако, вы можете **экспортировать Docker-образ в архив (tar)**, который затем можно перенести на **оффлайн-сервер** и загрузить локально. Это стандартный и рекомендуемый способ развертывания Docker-образов без интернета.
---
### ✅ Цель: развернуть ваш `llm-chat` на сервере **без интернета**
### 🔧 Решение: экспортировать Docker-образ как `.tar`, перенести его, импортировать
---
## 🛠 Шаги: создание и перенос образа
### 1. Соберите образ (на машине с интернетом)
```bash
docker compose build llm-chat
```
> Это создаст образ с именем, например: `llm-chat-llm-chat` (зависит от папки).
> Вы можете задать имя явно в `docker-compose.yml`:
```yaml
services:
llm-chat:
image: qwen3-8b-awq-offline:latest # ← добавьте это
build:
context: .
dockerfile: Dockerfile
# ... остальное
```
Тогда образ будет называться `qwen3-8b-awq-offline:latest`.
---
### 2. Убедитесь, что образ собран
```bash
docker images | grep qwen3
```
Пример вывода:
```
qwen3-8b-awq-offline latest a1b2c3d4e5f6 5 minutes ago 8.2GB
```
---
### 3. Сохраните образ в `.tar` архив
```bash
docker save qwen3-8b-awq-offline:latest -o qwen3-8b-awq-offline.tar
```
> Архив будет содержать **весь образ**, включая слои, метаданные и зависимости.
> Размер — около 89 ГБ (в зависимости от модели).
---
### 4. Скопируйте архив на оффлайн-сервер
Например, через USB, внешний диск или `scp`:
```bash
scp qwen3-8b-awq-offline.tar user@offline-server:/tmp/
```
---
### 5. На оффлайн-сервере: загрузите образ
```bash
docker load -i /tmp/qwen3-8b-awq-offline.tar
```
Проверьте:
```bash
docker images | grep qwen3
```
---
### 6. Настройте `docker-compose.yml` на оффлайн-сервере
Убедитесь, что на оффлайн-сервере:
- Установлен **Docker** и **Docker Compose**
- Установлен **NVIDIA Container Toolkit** (для GPU)
- Драйвера NVIDIA работают (`nvidia-smi`)
Разместите:
- `docker-compose.yml`
- `qwen3-8b-awq-offline.tar` → загружен через `docker load`
- Папку `models/` с моделью `Qwen3-8B-AWQ` (она **не входит в образ**, если вы монтируете её как volume!)
- Папки `app`, `cache` и т.д.
> ⚠️ **ВАЖНО**: Модель (`./models/Qwen3-8B-AWQ`) **не включена в Docker-образ**, потому что вы её монтируете через volume.
> Значит, вы **должны вручную скопировать папку `models`** на оффлайн-сервер.
---
### 7. Запустите
```bash
docker compose up -d
```
Готово! Сервис будет доступен на `http://<server-ip>:8080`.
---
## 📦 Альтернатива: встроить модель в образ (рекомендуется для полной автономности)
Если вы хотите, чтобы **всё было в одном образе**, включая модель — измените `Dockerfile`:
### Обновите `Dockerfile`:
```dockerfile
# ... предыдущие шаги ...
# Копируем модель внутрь образа
COPY models/Qwen3-8B-AWQ /models/Qwen3-8B-AWQ
ENV MODEL_PATH=/models/Qwen3-8B-AWQ
```
И уберите `volumes:` для `/models` в `docker-compose.yml`:
```yaml
volumes:
# - ./models:/models ← УДАЛИТЬ эту строку!
- ./app:/app
# ...
```
Тогда:
- Модель будет **внутри образа**
- `docker save` захватит всё
- На оффлайн-сервере не нужно копировать модель отдельно
- Но образ будет **очень большим** (~89 ГБ)
---
## ❌ Почему нельзя сделать ISO?
- ISO — это образ диска, обычно для загрузки ОС
- Docker работает с **контейнерами**, а не виртуальными машинами
- Чтобы использовать ISO, нужно делать **виртуальную машину с Docker внутри**
Если вам **обязательно нужен ISO**, то:
### Вариант: создать VM с предустановленным Docker и образом
1. Создайте виртуальную машину (например, в VirtualBox)
2. Установите Ubuntu + Docker + NVIDIA драйверы
3. Загрузите туда Docker-образ и `docker-compose.yml`
4. Экспортируйте VM как `.iso` или `.ova`
Но это **тяжеловесно и неэффективно** по сравнению с простым `.tar` + Docker.
---
## ✅ Рекомендуемый итоговый workflow
| Этап | Команда |
|------|--------|
| Сборка | `docker compose build` |
| Сохранение | `docker save qwen3-8b-awq-offline:latest -o qwen3.tar` |
| Перенос | `scp qwen3.tar user@offline:/tmp` |
| На оффлайн | `docker load -i /tmp/qwen3.tar` |
| Запуск | `docker compose up -d` |
---
Если хотите, могу подготовить **автоматический скрипт**, который делает `build`, `save`, и копирует всё на удалённый сервер.