FluentDocker est une bibliothèque pour interagir avec docker-machine, docker-compose et docker. Il prend en charge le docker pour Windows, docker pour Mac, docker machine et Linux natif. Cette bibliothèque est disponible sur nuget Ductus.FluentDocker et la prise en charge du test ms est disponible sur Ductus.FluentDocker.MsTest.
La bibliothèque est divisée en trois couches:
- Interactions Docker Binaries – Commandes statiques et environnement docker.
- Services – couche de service mince pour gérer les machines, les conteneurs, etc.
- Fluent API – API pour construire/découvrir des services à utiliser.
Voici quelques-unes des principales fonctionnalités de FluentDocker :
- Gestion des conteneurs Docker : FluentDocker offre des méthodes pour créer, démarrer, arrêter et supprimer des conteneurs Docker de manière simple et rapide.
- Gestion des images Docker : FluentDocker permet de télécharger, de construire et de publier des images Docker, ainsi que de gérer les tags et les référentiels d’images.
- Gestion des réseaux Docker : FluentDocker offre des méthodes pour créer, configurer et gérer des réseaux Docker, ainsi que pour connecter des conteneurs à des réseaux.
- Gestion des volumes Docker : FluentDocker permet de créer, de monter et de gérer des volumes Docker pour stocker les données des conteneurs.
- Intégration avec les outils de test : FluentDocker peut être utilisé avec des outils de test tels que xUnit et NUnit pour automatiser les tests de logiciels utilisant Docker.
Monter un docker avec Redis dans des tests unitaires
Ajouter un docker compose dans le projet
version: '3' networks: app-tier: driver: bridge services: redis: image: 'bitnami/redis:latest' environment: - ALLOW_EMPTY_PASSWORD=yes - REDIS_PORT_NUMBER=7000 ports: - '7000:7000' networks: - app-tier
Ajouter un Class Fixture (Tests réalisés au moyen de xunit)
public class DockerFixture : IDisposable { private ICompositeService? CompositeService { get; } public DockerFixture() { CompositeService = new Builder() .UseContainer() .UseCompose() .FromFile("./docker-compose.yml") .RemoveOrphans() .Build() .Start(); } public void Dispose() { CompositeService?.Stop(); CompositeService?.Remove(true); } }
Classe de tests
public class TestWithFluentDocker : IClassFixture<DockerFixture> { #region fields private static readonly ConnectionMultiplexer Redis = ConnectionMultiplexer.Connect( new ConfigurationOptions { EndPoints = {"localhost:7000"} }); #endregion #region [Fact] public void TestRedis() { var db = Redis.GetDatabase(); var pong = db.Ping(); Assert.IsNotNull(db); } #endregion }