6.3 KiB
Создать 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
Архив будет содержать весь образ, включая слои, метаданные и зависимости.
Размер — около 8–9 ГБ (в зависимости от модели).
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.ymlqwen3-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захватит всё- На оффлайн-сервере не нужно копировать модель отдельно
- Но образ будет очень большим (~8–9 ГБ)
❌ Почему нельзя сделать ISO?
- ISO — это образ диска, обычно для загрузки ОС
- Docker работает с контейнерами, а не виртуальными машинами
- Чтобы использовать ISO, нужно делать виртуальную машину с Docker внутри
Если вам обязательно нужен ISO, то:
Вариант: создать VM с предустановленным Docker и образом
- Создайте виртуальную машину (например, в VirtualBox)
- Установите Ubuntu + Docker + NVIDIA драйверы
- Загрузите туда Docker-образ и
docker-compose.yml - Экспортируйте 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, и копирует всё на удалённый сервер.