Files
llm/backup_docker_image.md
2025-08-02 17:33:16 +00:00

6.3 KiB
Raw Blame History

Создать ISO-образ напрямую из Docker-контейнера — невозможно, потому что ISO — это образ оптического диска (например, для загрузки ОС), а Docker использует собственный формат образов, основанный на слоях файловой системы.

Однако, вы можете экспортировать Docker-образ в архив (tar), который затем можно перенести на оффлайн-сервер и загрузить локально. Это стандартный и рекомендуемый способ развертывания Docker-образов без интернета.


Цель: развернуть ваш llm-chat на сервере без интернета

🔧 Решение: экспортировать Docker-образ как .tar, перенести его, импортировать


🛠 Шаги: создание и перенос образа

1. Соберите образ (на машине с интернетом)

docker compose build llm-chat

Это создаст образ с именем, например: llm-chat-llm-chat (зависит от папки).
Вы можете задать имя явно в docker-compose.yml:

services:
  llm-chat:
    image: qwen3-8b-awq-offline:latest  # ← добавьте это
    build:
      context: .
      dockerfile: Dockerfile
    # ... остальное

Тогда образ будет называться qwen3-8b-awq-offline:latest.


2. Убедитесь, что образ собран

docker images | grep qwen3

Пример вывода:

qwen3-8b-awq-offline   latest   a1b2c3d4e5f6   5 minutes ago   8.2GB

3. Сохраните образ в .tar архив

docker save qwen3-8b-awq-offline:latest -o qwen3-8b-awq-offline.tar

Архив будет содержать весь образ, включая слои, метаданные и зависимости.
Размер — около 89 ГБ (в зависимости от модели).


4. Скопируйте архив на оффлайн-сервер

Например, через USB, внешний диск или scp:

scp qwen3-8b-awq-offline.tar user@offline-server:/tmp/

5. На оффлайн-сервере: загрузите образ

docker load -i /tmp/qwen3-8b-awq-offline.tar

Проверьте:

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. Запустите

docker compose up -d

Готово! Сервис будет доступен на http://<server-ip>:8080.


📦 Альтернатива: встроить модель в образ (рекомендуется для полной автономности)

Если вы хотите, чтобы всё было в одном образе, включая модель — измените Dockerfile:

Обновите Dockerfile:

# ... предыдущие шаги ...

# Копируем модель внутрь образа
COPY models/Qwen3-8B-AWQ /models/Qwen3-8B-AWQ

ENV MODEL_PATH=/models/Qwen3-8B-AWQ

И уберите volumes: для /models в docker-compose.yml:

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, и копирует всё на удалённый сервер.