Compétence Images Conteneur
Cette compétence extrait chaque référence d'image conteneur du dépôt produit microsoft/aspire et écrit un fichier JSON structuré dans microsoft/aspire.dev à :
src/frontend/src/data/container-images.json
Ce JSON est consommé par les composants Astro sur le site aspire.dev pour afficher un catalogue navigable de toutes les images conteneur utilisées par les intégrations d'hébergement Aspire.
Modèle de code source
Toutes les métadonnées d'images conteneur dans microsoft/aspire résident dans des classes statiques nommées *ContainerImageTags (ou *ContainerImageTags.cs). Chaque fichier suit un modèle strict et cohérent :
internal static class <Nom>ContainerImageTags
{
public const string Registry = "<hôte-registre>";
public const string Image = "<chemin-image>";
public const string Tag = "<tag>";
// Certains fichiers ont des images compagnons supplémentaires, par exemple :
public const string <Compagnon>Registry = "<hôte-registre>";
public const string <Compagnon>Image = "<chemin-image>";
public const string <Compagnon>Tag = "<tag>";
}
Où les trouver
Tous les fichiers correspondant au motif glob :
src/**/ContainerImageTags.cs
src/**/*ContainerImageTags.cs
Ceux-ci couvrent de nombreux projets, y compris (sans s'y limiter) :
| Projet | Fichier |
|---|---|
Aspire.Hosting.Redis | RedisContainerImageTags.cs |
Aspire.Hosting.PostgreSQL | PostgresContainerImageTags.cs |
Aspire.Hosting.SqlServer | SqlServerContainerImageTags.cs |
Aspire.Hosting.MongoDB | MongoDBContainerImageTags.cs |
Aspire.Hosting.MySql | MySqlContainerImageTags.cs |
Aspire.Hosting.Kafka | KafkaContainerImageTags.cs |
Aspire.Hosting.RabbitMQ | RabbitMQContainerImageTags.cs |
Aspire.Hosting.Nats | NatsContainerImageTags.cs |
Aspire.Hosting.Garnet | GarnetContainerImageTags.cs |
Aspire.Hosting.Valkey | ValkeyContainerImageTags.cs |
Aspire.Hosting.Seq | SeqContainerImageTags.cs |
Aspire.Hosting.Qdrant | QdrantContainerImageTags.cs |
Aspire.Hosting.Keycloak | KeycloakContainerImageTags.cs |
Aspire.Hosting.Oracle | OracleContainerImageTags.cs |
Aspire.Hosting.Milvus | MilvusContainerImageTags.cs |
Aspire.Hosting.Elasticsearch | ElasticsearchContainerImageTags.cs |
Aspire.Hosting.Yarp | YarpContainerImageTags.cs |
Aspire.Hosting.Azure.Storage | StorageEmulatorContainerImageTags.cs |
Aspire.Hosting.Azure.CosmosDB | CosmosDBEmulatorContainerImageTags.cs |
Aspire.Hosting.Azure.ServiceBus | ServiceBusEmulatorContainerImageTags.cs |
Aspire.Hosting.Azure.EventHubs | EventHubsEmulatorContainerImageTags.cs |
Aspire.Hosting.Azure.SignalR | SignalREmulatorContainerImageTags.cs |
Aspire.Hosting.Azure.AppConfiguration | AppConfigurationEmulatorContainerImageTags.cs |
Aspire.Hosting.Azure.Functions | DurableTaskSchedulerEmulatorContainerImageTags.cs |
Aspire.Hosting.Azure.Kusto | AzureKustoEmulatorContainerImageTags.cs |
Important : De nouveaux packages d'hébergement peuvent être ajoutés à tout moment. Découvrez toujours les fichiers dynamiquement — ne vous fiez jamais à une liste codée en dur.
Procédure d'extraction
Étape 1 — Cloner ou accéder au dépôt aspire à HEAD
# Si vous travaillez en local :
git clone --depth 1 https://github.com/microsoft/aspire.git /tmp/aspire
Étape 2 — Trouver tous les fichiers ContainerImageTags
find /tmp/aspire/src -name '*ContainerImageTags.cs' -type f
Étape 3 — Analyser chaque fichier
Pour chaque fichier, extrayez tous les groupes d'images. Un seul fichier peut définir plusieurs images (principale + compagnons). Les règles d'analyse sont :
- Image principale : Champs nommés exactement
Registry,Image,Tag. - Images compagnons : Champs avec un préfixe, par exemple
PgAdminRegistry,PgAdminImage,PgAdminTag— regroupez-les par le préfixe partagé. - Tags alternatifs : Champs comme
TagVNextPreview,ManagementTag— incluez-les comme variantes de tag supplémentaires sur la même image. - Propriétés statiques vs champs const : La plupart utilisent
public const string, mais certains (par ex. Kusto) utilisentpublic static string { get; }. Gérez les deux. - Tags calculés : Certains tags sont calculés, par exemple
public const string ManagementTag = $"{Tag}-management";— résolvez-les à leur valeur littérale. - Dérivez
aspirePackageà partir du nom du répertoire du projet (par exemplesrc/Aspire.Hosting.Redis/→Aspire.Hosting.Redis). - Dérivez
sourceFilecomme le chemin relatif par rapport à la racine du dépôt.
Étape 4 — Construire le JSON
Chaque entrée dans le tableau de sortie représente une image conteneur distincte :
[
{
"aspirePackage": "Aspire.Hosting.Redis",
"name": "Redis",
"registry": "docker.io",
"image": "library/redis",
"tag": "8.6",
"fullImage": "docker.io/library/redis:8.6",
"sourceFile": "src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
"sourceUrl": "https://github.com/microsoft/aspire/blob/main/src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
"isCompanion": false,
"companionOf": null,
"alternateTags": []
},
{
"aspirePackage": "Aspire.Hosting.Redis",
"name": "Redis Commander",
"registry": "docker.io",
"image": "rediscommander/redis-commander",
"tag": "latest",
"fullImage": "docker.io/rediscommander/redis-commander:latest",
"sourceFile": "src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
"sourceUrl": "https://github.com/microsoft/aspire/blob/main/src/Aspire.Hosting.Redis/RedisContainerImageTags.cs",
"isCompanion": true,
"companionOf": "Redis",
"alternateTags": []
},
{
"aspirePackage": "Aspire.Hosting.Azure.CosmosDB",
"name": "Émulateur CosmosDB",
"registry": "mcr.microsoft.com",
"image": "cosmosdb/linux/azure-cosmos-emulator",
"tag": "stable",
"fullImage": "mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:stable",
"sourceFile": "src/Aspire.Hosting.Azure.CosmosDB/CosmosDBEmulatorContainerImageTags.cs",
"sourceUrl": "https://github.com/microsoft/aspire/blob/main/src/Aspire.Hosting.Azure.CosmosDB/CosmosDBEmulatorContainerImageTags.cs",
"isCompanion": false,
"companionOf": null,
"alternateTags": ["vnext-preview"]
}
]
Définitions des champs
| Champ | Type | Description |
|---|---|---|
aspirePackage | chaîne | Le nom du package NuGet / projet (nom du répertoire sous src/) |
name | chaîne | Nom convivial. Pour les images principales, dérivez-le du nom de la classe (supprimez le suffixe ContainerImageTags / EmulatorContainerImageTags, divisez le PascalCase). Pour les images compagnons, dérivez-le du préfixe/type compagnon (par exemple PgAdmin*, RedisCommander*) plutôt que uniquement du nom de la classe. |
registry | chaîne | Hôte du registre de conteneurs (par exemple docker.io, mcr.microsoft.com, ghcr.io, quay.io, container-registry.oracle.com) |
image | chaîne | Chemin de l'image dans le registre |
tag | chaîne | Tag principal |
fullImage | chaîne | Référence d'image complète : {registry}/{image}:{tag} |
sourceFile | chaîne | Chemin relatif vers le fichier source dans microsoft/aspire |
sourceUrl | chaîne | Lien permanent GitHub vers le fichier source sur la branche main |
isCompanion | booléen | true s'il s'agit d'une image compagnon/outillage (par exemple pgAdmin, Kafka UI, phpMyAdmin) |
companionOf | chaîne ? | Nom de l'image principale que celle-ci accompagne, ou null |
alternateTags | chaîne[] | Toutes les constantes de tag supplémentaires définies pour cette image (par exemple vnext-preview, management) |
Étape 5 — Trier et écrire
Triez le tableau par aspirePackage (croissant), puis par isCompanion (principale d'abord), puis par name (croissant).
Écrire dans : src/frontend/src/data/container-images.json
Liste de validation
Après avoir généré le fichier, vérifiez :
- Chaque fichier
*ContainerImageTags.csdanssrc/est représenté - Pas d'entrées en double (même
registry+image+tag+aspirePackage) - Toutes les valeurs
fullImagesont bien formées (registry/image:tag) - Les images compagnons sont correctement liées à leur image principale
- Le JSON est valide et correctement formaté (indentation de 2 espaces)
- Le fichier est trié selon les règles ci-dessus
Consommation des données dans Astro
Le fichier JSON à src/frontend/src/data/container-images.json peut être importé directement dans les composants Astro :
import containerImages from '../data/container-images.json';
Cela suit le même modèle que les fichiers de données existants comme aspire-integrations.json, samples.json, et github-stats.json dans le même répertoire.
Liaison vers le contenu connexe
Chaque entrée d'image conteneur peut être croisée avec :
- La documentation d'intégration à
src/frontend/src/data/integration-docs.json(correspondance suraspirePackage) - Les intégrations NuGet à
src/frontend/src/data/aspire-integrations.json(correspondance surtitle≈aspirePackage) - Le lien vers le fichier source retour vers
microsoft/aspirepour les contributeurs
Règles importantes
- Découvrez toujours les fichiers dynamiquement — de nouveaux packages d'hébergement sont ajoutés fréquemment.
- Analysez les modèles de propriétés
constetstatic— les deux existent dans le code source. - Résolvez l'interpolation de chaîne dans les valeurs de tag calculées (par exemple
$"""{Tag}-management"""). - N'incluez pas les images de devcontainer, les images de test uniquement, ou les images du répertoire
playground/. - Extrayez uniquement du répertoire
src/les fichiers correspondant à*ContainerImageTags.cs. - Le dépôt aspire.dev est un site Astro — le fichier de données réside à côté des autres données JSON consommées par les composants.