Over a million developers have joined DZone.

Git, Windows, and Docker

Docker? And Windows? Surely you jest! Ends up, not so much anymore. Find out how to integrate Windows and Docker into your development flow here.

· Integration Zone

Visually compose APIs with easy-to-use tooling. Learn how IBM API Connect provides near-universal access to data and services both on-premises and in the cloud, brought to you in partnership with IBM.

Linux and open source designs are increasingly leading the technology industry in innovation, and it's been exciting for the WinDocks team to bring the power of Docker containers to the Windows community. Since the launch of WinDocks earlier this year, support of automated Build and Test has emerged as one of the top use-cases.In this article we explore the use of Git with containers to deliver fast, integrated .NET and SQL Server environments.

Why Docker?

Docker defines an API for working with application containers and a method of application packaging that includes all software dependencies. Docker is becoming a formal standard through the Linux Foundation and has become a cross-platform design with collaboration between Microsoft and Docker. The Microsoft implementation, however, follows the Linux container design and relies on a shell for configuring application behavior. A shell-based container works well for Windows console apps, Windows services, and most .NET apps, but it won't work for SQL Server and other Windows applications. We discuss the differences between the WinDocks and Microsoft container designs here. In this exercise, we'll use WinDocks containers.

WinDocks provides containers with support of .NET and SQL Server, on Windows 8, Windows 10, Windows Server 2012, and Windows Server 2016. All editions of SQL Server are supported from SQL Server 2008 through SQL Server 2016. SQL Server container instances allow more to be done on any given server or set of licensed cores and complies with Microsoft's per-server and per-core licensing.

The Setup

We'll use a public repo on Github.com to pull a .NET application and show how it is integrated with a SQL Server container. The result is a simple workflow for developers or testers. The tooling is particularly useful for DBAs, who provide updated SQL Server images and allow the respective teams to self-service integrated environments.

We used a Windows 8.1 laptop with SQL Server 2014 for this exercise, with the WinDocks Community Edition (a free downloadable edition of WinDocks). WinDocks detects and installs on the Windows OS and configures SQL Server support based on the edition of SQL Server installed. The WinDocks Community Edition is also available in preconfigured Vs through Amazon’s AWS Marketplace. To get started: Install Git on your WinDocks host, and install WinDocks Community Edition.

Tools for Developer and Tester Self-Service

Windows containers are tools for developers or testers to self-service integrated environments. A user can set up (and delete) SQL Server containers, with DBA approved SQL image, in seconds, and a team can work on identical isolated instances on a shared VM. Containers are easily deleted and replaced and are ideal for destructive testing. Containers provide user and process isolation for applications, and .NET and SQL Server containers benefit from namespace isolation.

A Windows container host needs configurable support for "administrative" processes, such as mounting a network hosted database or support of third-party storage systems (such as NetApp SnapManager). WinDocks includes support for configuring administrative processes via the \Windocks\config\node.cfg file. Git requires administrative privileges, and we included Windows commands to support Git (see image below). You will see "RUN_AS_ADMIN_CMD" used later to support Git commands.

Gitclone Blog Image 1 650 x200.png 


Two public GitHub repos are used. GitDockerFile is the DockerFile that will clone our .NET application (DotNetSample). The GitDockerFile also includes a PowerShell script that we'll use later.

Open a command prompt as Admin and clone the GitDockerFile to your local machine:

Gitclone Blog Image 2 650 x175.png 

Use File Explorer to open the DockerFile. The DockerFile defines a sequence of commands that are executed sequentially by the Docker daemon. DockerFiles begin with the base image, and in this case, refers to the .NET-4.5 image. The second step "Git Clones" the DotNetSample repo to the container. The third step copies the web.config file into the container.

Gitclone Blog Image 3 650 x100.png 

Build an Integrated .NET + SQL Server Environment

Refer to both images below for the sequence in creating an integrated .NET + SQL Server container environment. There are three steps:

  1. Create and start the SQL Server container.

  2. Edit the web.config file to include the SQL port and password.

  3. Launch the .NET application.

Once the SQL Server container is running, open the TestGitClone folder (that was cloned from the Git repo), and open the web.config file using notepad. Edit the IP address, port, and sa password as shown. When updated, build the .NET container.

Gitclone Blog Image 4 650 x 250.png 

The sequence of building the two containers is shown below. The Docker Build incorporates the Git clone in the building of the .NET application. The final step is to start the .NET application.

Gitclone Blog Image 5 650 x 200.png 

Congratulations, you've built a fully integrated container environment. Open a browser and navigate to the localhost:10004\dotnetsample to see the integrated environment. The SQL Server container is accessible through SQL Server Management Studio and other tools.

The WinDocks base .NET image includes a similar instance of the .NET application, so in this case, we actually have two applications running in the container. This isn't a recommended practice, but it doesn't affect the purpose of this exercise. The base image application is accessible at: localhost:10004

Gitclone Blog Image 6 650 x 320.png 

Using PowerShell to Build Integrated .NET + SQL Server Environments

An alternative to the Docker command line is to use a PowerShell script. A sample script was included in the earlier Git Clone (GitDockerFile): Link.ps1. Open the script and note that parameters are included for the WinDocks host IP address, the reference to the TestGitClone folder, and the SQL Server image. Modify these if needed, but don't change the reference to the standard Docker daemon port of 2375!

There are a variety of ways to run PowerShell scripts in UnRestricted mode.

Gitclone Blog Image 7 650 x 170.png 

The script automates the same workflow as discussed earlier. The script starts by launching a SQL Server container, starts the container, parses the port and SQL sa password, and updates the web.config file. Once the web.config file is updated, the script builds and starts the .NET container.

In less than a minute, a fully integrated environment is ready. These containers can easily be deleted and replaced just as quickly.

Gitclone Blog Image 8 650 x 370.png

Visually compose APIs with easy-to-use tooling. Learn how IBM API Connect provides near-universal access to data and services both on-premises and in the cloud, brought to you in partnership with IBM.


Published at DZone with permission of Paul Stanton, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}