Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это руководство поможет вам понять, как перенести приложения из Docker Compose в Aspire, выделяя основные концептуальные различия и предоставляя практические примеры для распространенных сценариев миграции.
Общие сведения о различиях
Хотя Docker Создание и Aspire на первый взгляд могут показаться похожими, они служат различным целям и работают на разных уровнях абстракции.
Docker Создание vs Aspire
| Docker Создать | Aspire | |
|---|---|---|
| Основная цель | Оркестрация контейнеров | Оркестрация на стадии разработки и композиция приложений. |
| Объем | Контейнер-ориентированный | Мультиресурс (контейнеры, проекты, .NET облачные ресурсы). |
| Конфигурация | На основе YAML | Основанный на C#, строго типизированный. |
| Целевая среда | Любая Docker среда выполнения | Разработка и облачное развертывание. |
| Обнаружение служб | Обнаружение контейнеров на основе DNS | Встроенное обнаружение служб с переменными среды. |
| Опыт разработки | Управление контейнерами вручную | Интегрированные средства, панель мониторинга и телеметрия. |
Дополнительные сведения см. в справочнике по API Compose to AppHost.
Основные концептуальные сдвиги
При миграции из Docker Compose в Aspire, следует учитывать следующие концептуальные различия:
- С YAML на C#: конфигурация переходит от декларативного YAML к императивному строго типизированному коду C#.
- От контейнеров к ресурсам: Aspire управляет не только контейнерами, но .NET и проектами, исполняемыми файлами, параметрами, всеми ресурсами.
- От вручную управляемой сети к обнаружению сервисов: Aspire автоматически настраивает строки обнаружения сервисов и подключения.
- От пробелов в разработке до интегрированного интерфейса: Aspire предоставляет панель мониторинга, телеметрию и интеграцию отладки.
Полное сопоставление Docker синтаксиса Compose YAML с Aspire вызовами API C#, см. в Docker справочнике API Compose to Aspire AppHost.
Связанные ссылки:
Распространенные шаблоны миграции
В этом разделе показаны практические сценарии миграции, которые, скорее всего, возникают при переходе из Docker Compose в Aspire. Каждая модель показывает полный пример Docker Compose со своим эквивалентом Aspire, подчеркивая ключевые различия и преимущества миграции.
Подразумеваемые шаблоны включают:
- Веб-приложения с несколькими службами с компонентами интерфейса, API и базы данных.
- Контейнерные службы с использованием существующих Docker образов.
- Стратегии управления переменными среды и конфигурацией.
- Пользовательские сети и тома для постоянного хранения данных и изолирования служб.
Эти примеры представляют наиболее распространенные варианты использования, но Aspireгибкость позволяет выполнять многие другие сценарии. Если конкретный вариант использования не рассматривается здесь, вы можете объединить эти шаблоны или ознакомиться с полным справочником по API выше.
Веб-приложение с несколькими службами
Docker Пример составления:
version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
depends_on:
- api
environment:
- API_URL=http://api:5000
api:
build: ./api
ports:
- "5000:5000"
depends_on:
- database
environment:
- ConnectionStrings__DefaultConnection=Host=database;Database=myapp;Username=postgres;Password=secret
database:
image: postgres:15
environment:
- POSTGRES_DB=myapp
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=secret
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Aspire эквивалентный:
var builder = DistributedApplication.CreateBuilder(args);
// Add the database
var database = builder.AddPostgres("postgres")
.WithEnvironment("POSTGRES_DB", "myapp")
.AddDatabase("myapp");
// Add the API project
var api = builder.AddProject<Projects.MyApp_Api>("api")
.WithReference(database);
// Add the frontend project
var frontend = builder.AddProject<Projects.MyApp_Frontend>("frontend")
.WithReference(api);
builder.Build().Run();
Основные различия:
-
Зависимости служб:
depends_onстановитсяWithReference(), которое также настраивает обнаружение служб. - Переменные среды: строки подключения автоматически создаются и инжектируются.
- Контекст сборки: контекст сборки может использовать Dockerfiles, проекты, .NETNode.js приложения и многое другое вместо просто Dockerfile сборок.
- Сохраняемость данных: тома автоматически управляются Aspire.
Службы на основе контейнеров
Docker Пример составления:
version: '3.8'
services:
web:
build: .
ports:
- "8080:8080"
depends_on:
- redis
- postgres
redis:
image: redis:7
ports:
- "6379:6379"
postgres:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Aspire эквивалентный:
var builder = DistributedApplication.CreateBuilder(args);
// Add backing services
var cache = builder.AddRedis("redis");
var database = builder.AddPostgres("postgres", password: "secret")
.AddDatabase("main");
// Add the containerized web application
var web = builder.AddContainer("web", "myapp:latest")
.WithHttpEndpoint(port: 8080, targetPort: 8080)
.WithReference(cache)
.WithReference(database);
builder.Build().Run();
Переменные среды и конфигурация
Docker Подход составления:
services:
app:
image: myapp:latest
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/myapp
- REDIS_URL=redis://cache:6379
- API_KEY=${API_KEY}
- LOG_LEVEL=info
Aspire подход:
var builder = DistributedApplication.CreateBuilder(args);
// Add external parameter
var apiKey = builder.AddParameter("apiKey", secret: true);
var database = builder.AddPostgres("db")
.AddDatabase("myapp");
var cache = builder.AddRedis("cache");
var app = builder.AddContainer("app", "myapp:latest")
.WithReference(database) // Automatically sets DATABASE_URL
.WithReference(cache) // Automatically sets REDIS_URL
.WithEnvironment("API_KEY", apiKey)
.WithEnvironment("LOG_LEVEL", "info");
builder.Build().Run();
Основные различия:
- Строки автоматического подключения: URL-адреса базы данных и кэша создаются автоматически.
- Типизированные параметры: внешняя конфигурация использует строго типизированные параметры вместо подстановки переменных среды.
- Обнаружение служб. Ссылки автоматически настраивают правильные конечные точки службы.
Пользовательские сети и тома
Docker Пример составления:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- app_data:/data
- ./config:/app/config:ro
networks:
- backend
worker:
image: myworker:latest
volumes:
- app_data:/shared
networks:
- backend
networks:
backend:
volumes:
app_data:
Aspire эквивалентный:
var builder = DistributedApplication.CreateBuilder(args);
// Create a named volume
var appData = builder.AddVolume("app-data");
var app = builder.AddContainer("app", "myapp:latest")
.WithVolume(appData, "/data")
.WithBindMount("./config", "/app/config", isReadOnly: true);
var worker = builder.AddContainer("worker", "myworker:latest")
.WithVolume(appData, "/shared");
builder.Build().Run();
Основные различия:
- Упрощенная сеть: Aspire автоматически обрабатывает сети контейнеров.
- Управление томами. Именованные тома создаются и управляются с помощью модели ресурсов.
-
Привязочные монтирования: каталоги хоста можно смонтировать с помощью
WithBindMount().
Связанные ссылки:
- Docker Спецификация Compose
- Aspire Обзор AppHost
- Добавьте Dockerfiles в модель вашего приложения
Стратегия миграции
Для успешной миграции из Docker Compose в Aspire требуется систематический подход. Следующие шаги предоставляют проверенную методологию перемещения приложений, минимизируя нарушения и обеспечивая правильную работу всех компонентов в новой среде.
1. Оценка текущей настройки
Перед миграцией выполните инвентаризацию Docker настроек Compose:
- Службы: определение всех служб, включая базы данных, кэши, API и веб-приложения.
- Зависимости: построение карты зависимостей служб из объявлений.
- Сохраняемость данных: каталог всех томов и привязываемых подключений, используемых для хранения данных.
- Переменные среды: вывод списка всех переменных конфигурации и секретов.
- Пользовательские сети: определение любых пользовательских требований к сети и конфигураций.
2. Создайте Aspire AppHost
Начните с создания проекта Aspire :
dotnet new aspire-apphost -o MyApp.AppHost
3. Постепенно переносить службы
Перенос служб по одному, начиная с резервных служб (баз данных, кэшей), а затем приложений:
- Добавьте такие службы, как PostgreSQL, Redis, и другие компоненты инфраструктуры.
- Преобразование .NET приложений в ссылки на проекты для улучшения интеграции.
-
Преобразуйте другие контейнеры, используя
AddContainer()для существующих Docker образов. -
Настройте зависимости с
WithReference(), чтобы установить связи служб. - Настройте переменные среды и параметры для управления конфигурацией.
4. Обработка миграции данных
Для постоянных данных:
- Используйте
WithVolume()именованные тома, которые должны сохранять данные. - Используйте
WithBindMount()для монтирования каталога узла, если требуется прямой доступ к файлам узла. - Следует рассмотреть использование
WithDataVolume()для устойчивости базы данных с автоматическим управлением томами.
5. Тестирование и проверка
- Aspire Запустите AppHost и проверьте правильность запуска всех служб.
- Проверьте панель мониторинга, чтобы подтвердить работоспособность службы и состояние подключения.
- Убедитесь, что взаимодействие между службами работает должным образом.
- Протестируйте существующие клиентские приложения, чтобы обеспечить совместимость.
Связанные ссылки:
- Docker Контрольный список по составлению миграции
- Создание первого Aspire приложения
- Aspire Обзор тестирования
Устранение неполадок миграции
При миграции из Docker Compose на Aspire вы можете столкнуться с некоторыми распространенными проблемами. В этом разделе приводятся решения для часто встречающихся проблем и рекомендаций по устранению неполадок, возникающих во время процесса миграции.
Распространенные проблемы и решения
Обнаружение служб не работает
- Убедитесь, что вы используете
WithReference()для установления зависимостей между службами. - Убедитесь, что службы используют правильные имена переменных среды для подключений.
- Проверьте панель мониторинга, чтобы проверить правильность внедрения переменных среды.
Сбой подключений к базе данных
Убедитесь, что база данных полностью запущена до того, как зависимые службы попытаются подключиться.
Используйте
WaitFor()для обеспечения правильного порядка запуска:var api = builder.AddProject<Projects.Api>("api") .WithReference(database) .WaitFor(database);
Проблемы с монтированием томов
- Используйте абсолютные пути для привязок, чтобы избежать проблем с определением путей.
- Убедитесь, что каталог узла существует и имеет соответствующие разрешения перед подключением.
- Рекомендуется использовать именованные тома вместо привязок, где это возможно для повышения переносимости.
Конфликты портов
- Aspire автоматически назначает порты, чтобы избежать конфликтов между службами.
- Используйте
WithHttpEndpoint()для указания пользовательских портов при необходимости для внешнего доступа. - Проверьте панель мониторинга, чтобы найти действительно назначенные порты во время разработки.
Связанные ссылки:
- Docker Часто задаваемые вопросы о Compose
- Нездоровая контейнерная среда выполнения
- Не удалось найти среду выполнения контейнеров podman в WSL
- Aspire Обзор панели мониторинга
Дальнейшие шаги
После миграции в Aspire:
- Изучите Aspire интеграции для замены пользовательских конфигураций контейнеров.
- Настройте проверки работоспособности для более эффективного мониторинга.
- Настройте данные телеметрии для наблюдения.
- Узнайте о вариантах развертывания для рабочих сред.
- Попробуйте протестировать распределенное приложение.
См. также
- Aspire Обзор
- Стрим AspiriFridays
- Aspire Обзор оркестрации
- Docker Создание улучшений в Aspire версии 9.3
- Добавьте Dockerfiles в модель вашего приложения