Контейнеризация позволяет изолировать приложение и его окружение, обеспечивая предсказуемое выполнение на любом сервере. Для приложений на Fresh, разработанных на Deno, Docker предоставляет возможность упаковать весь стек зависимостей и настроек в единый контейнер.
Для работы требуется установленный Docker Engine. После установки проверяется корректность установки командой:
docker --version
Также рекомендуется установить Docker Compose для управления многоконтейнерными проектами, хотя для простого приложения Fresh это необязательно.
Проект на Fresh обычно имеет следующую структуру:
my-fresh-app/
├─ routes/
├─ islands/
├─ components/
├─ static/
├─ main.ts
├─ import_map.json
├─ deno.json
Главная точка входа — main.ts. Для контейнеризации
необходимо обеспечить, чтобы Docker мог запускать Deno и читать все
необходимые файлы конфигурации.
Dockerfile описывает шаги по сборке контейнера:
# Использование официального образа Deno
FROM denoland/deno:latest
# Установка рабочей директории
WORKDIR /app
# Копирование файлов проекта в контейнер
COPY . .
# Разрешение прав на выполнение для Deno
RUN deno cache main.ts
# Открытие порта для приложения
EXPOSE 8000
# Команда для запуска приложения
CMD ["run", "--allow-net", "--allow-read", "main.ts"]
Ключевые моменты:
deno cache main.ts позволяет заранее
загрузить зависимости и ускорить запуск контейнера.--allow-net и
--allow-read задают минимальные
необходимые права для работы приложения Fresh.Для уменьшения размера образа рекомендуется использовать многоступенчатую сборку:
FROM denoland/deno:alpine-1.37.0 as builder
WORKDIR /app
COPY . .
RUN deno cache main.ts
FROM denoland/deno:alpine-1.37.0
WORKDIR /app
COPY --from=builder /app /app
EXPOSE 8000
CMD ["run", "--allow-net", "--allow-read", "main.ts"]
Это позволяет кэшировать зависимости на этапе сборки и использовать минимальный образ на финальной стадии.
Для проектов, которые требуют подключения к базе данных или другим
сервисам, создается файл docker-compose.yml:
version: '3.9'
services:
app:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
command: deno run --allow-net --allow-read main.ts
Преимущества Docker Compose:
Для корректной работы статических файлов и сохранения данных рекомендуется использовать тома Docker:
volumes:
static-data:
В контейнере можно монтировать локальные папки проекта:
volumes:
- ./static:/app/static
Это позволяет обновлять статические ресурсы без пересборки образа.
Для сборки образа используется команда:
docker build -t fresh-app .
Запуск контейнера:
docker run -p 8000:8000 fresh-app
С Docker Compose команды упрощаются:
docker-compose up --build
Для мониторинга контейнера применяются стандартные Docker-инструменты:
docker logs <container_id> —
просмотр логов приложения.docker exec -it <container_id> sh
— доступ внутрь контейнера для отладки.docker ps — проверка запущенных
контейнеров.Также возможно подключение стандартных инструментов Deno, таких как встроенный инспектор для дебага.
--allow-* флаги.Контейнеризация позволяет не только изолировать приложение Fresh, но и стандартизировать процесс развертывания на разных окружениях, облегчая CI/CD и масштабирование.