FluentDocker

Use docker, docker-compose local and remote in tests and your .NET core/full framework apps via a FluentAPI

APACHE-2.0 License

Stars
1.3K
Committers
33

Bot releases are hidden (Show)

FluentDocker - Compatability with netcore 2.0

Published by mariotoffia over 6 years ago

The fluentdocker library now uses multiple versions of the net core framework in it's dependency and therefore if used in a core 2.0 project it do no longer require old 1.1 dlls. This is achieved by adding core 2.0 as additional target and is included in nugget package in addition to 1.1 and full framework 4.5

FluentDocker - Bugfix in Hosts.Discover

Published by mariotoffia almost 7 years ago

Fixed bug in Hosts.Discover where it required docker-machine. Now it skips docker-machine if not present and just detects the native docker daemon.

FluentDocker - Improve Binary Discovery Performance

Published by mariotoffia almost 7 years ago

Now it just enumerates files with docker to get the initialization performance better.

It also adheres, again, to the DOCKER_TOOLBOX_INSTALL_PATH when searching for binaries.

FluentDocker - 2.2.6

Published by mariotoffia almost 7 years ago

Relaxed the amount of docker binaries to require. Now it only requires that docker or docker.exe is in the path. The other two; docker-compose and docker-machine is now optional and will only debug log when not found.

FluentDocker - Bugfix Linux Docker Binary Search

Published by mariotoffia almost 7 years ago

Completely rewrote the search for docker binaries. This is much more flexible. Tested on windows and somewhat on Linux. I currently have no Mac so that part is completely untested.

FluentDocker - DigitalOcean Machine Inspect Fix

Published by mariotoffia about 7 years ago

This is a fix for DigitalOcean that do not reply with DiskSize and CPU in the driver object.

It is released as nuget packages version 2.2.3.

FluentDocker - Bugfix machine release

Published by mariotoffia over 7 years ago

A initial bugfix for docker-machine functionality.

There still are issues with docker-machine since it will complain about not being able to contact the daemon. It works but the tests fails. This needs to be addressed later on.

For now it works and may be used.

FluentDocker - Net Core Support

Published by mariotoffia over 7 years ago

Thanks to smudge202 a .NET Core version of the FluentDocker now exists.
Many thanks for that!

FluentDocker - 2.2.0

Published by mariotoffia over 8 years ago

Better cope with IPv6 - this is a patch release - same restrictions applies as with 2.1.0.

FluentDocker - 2.1.1

Published by mariotoffia over 8 years ago

Switched to .NET Framework 4.5.1. This release contains lots of breaking changes. Do not use if you're not planning on 3.0.0. When the 3.0.0 release is done, it will contain info of everything that have changed.

Use this only if you must have 4.5.1 support

FluentDocker - 2.1.0

Published by mariotoffia over 8 years ago

With this release it is possible to define Dockerfiles in a fluent API and build them on the fly. It is possible to build new images and create new containers within the same fluent build. This release also comes with support for querying images from the host service.

Checkout the FluentMultiContainerTests to se the build in action:

using (var services = new Builder()
          // Define custom node image to be used
          .DefineImage("mariotoffia/nodetest")
          .ReuseIfAlreadyExists()
          .DefineFrom("ubuntu").Maintainer("Mario Toffia <[email protected]>")
          .Run("apt-get update &&",
            "apt-get -y install curl &&",
            "curl -sL https://deb.nodesource.com/setup | sudo bash - &&",
            "apt-get -y install python build-essential nodejs")
          .Run("npm install -g nodemon")
          .Add("embedded:Ductus.FluentDockerTest/Ductus.FluentDockerTest.MultiContainerTestFiles/package.txt",
            "/tmp/package.json")
          .Run("cd /tmp && npm install")
          .Run("mkdir -p /src && cp -a /tmp/node_modules /src/")
          .UseWorkDir("/src")
          .Add("index.js", "/src")
          .ExposePorts(8080)
          .Command("nodemon", "/src/index.js").Builder()
          // Redis Db Backend
          .UseContainer().WithName("redis").UseImage("redis").Builder()
          // Node server 1 & 2
          .UseContainer().WithName("node1").UseImage("mariotoffia/nodetest").Link("redis").Builder()
          .UseContainer().WithName("node2").UseImage("mariotoffia/nodetest").Link("redis").Builder()
          // Nginx as load balancer
          .UseContainer().WithName("nginx").UseImage("nginx")
          .Link("node1", "node2").CopyOnStart(nginx, "/etc/nginx/nginx.conf").ExposePort(80).Builder()
          .Build().Start())
        {
          Assert.AreEqual(4, services.Containers.Count);

          var ep = services.Containers.First(x => x.Name == "nginx").ToHostExposedEndpoint("80/tcp");
          Assert.IsNotNull(ep);

          var round1 = $"http://{ep.Address}:{ep.Port}".Wget();
          Assert.AreEqual("This page has been viewed 1 times!",round1);

          var round2 = $"http://{ep.Address}:{ep.Port}".Wget();
          Assert.AreEqual("This page has been viewed 2 times!", round2);
        }
FluentDocker - 2.0.0

Published by mariotoffia over 8 years ago

Completely Rewritten to reduce the amount of NuGet packages. As a trade off it now requires docker to be installed on the host that the FluentDocker executes on.

It supports docker-machine, native (Linux) docker, and docker for windows beta. Only tested on window machine though!
On Mac you can in theory both run the beta emulated native and docker machine at the same time (not tested). This dual support do not exist on windows since hyperv and virtualbox cannot coexist on windows.

The design is a three layer design where each layer is extremely thin:

  • Command Layer - static commands to execute against the binaries
    • Resolve docker binaries
    • Execute and parse the responses.
  • Service Layer - thin services representing each entity e.g. machine, container etc.
  • Fluent API - builders to build configuration to create services

This allows for interacting with docker machine and create new docker hosts on the fly and running containers on different machines. Support for explicit drivers such as cloud providers will come at a later stage.

Badges
Extracted from project README
Quality Gate Status Build status NuGet NuGet NuGet