Running Microgateway 10.5 in a Windows Container

Introduction

The Microgateway 10.5 scripting does not support the creation of Docker files for building Docker images running as Windows containers. This tutorial describes how to run Microgateway 10.5 in a Windows Container by applying a simple custom Dockerfile.

Set up the Docker Environment

Setting up your Windows environment requires the following steps:

  • Install DockerDesktop
  • Switch DockerDesktop to Windows Containers

Further details can be obtained from the Docker and Windows documentation.

Create the Docker Image

The first step for creating the Docker image is to pull the base Windows nano image that matches your Windows hosts:

> docker pull mcr.microsoft.com/windows/nanoserver:1809

Make sure that your Windows image version matches the kernel version of your Windows machine.

After that a Microgateway instance has to be created from the Windows Microgateway intallation:

> microgateway.bat createInstance --instance "C:\Users\user\Work\API Microgateway\Windows\Microgateway.zip"

The --instance parameter needs to point to a file outside your Microgateway installation.  Then, move to your directory "C:\Users\user\Work\API Microgateway\Windows" and unzip Microgateway.zip:  The unzip should create a Microgateway directory within C:\Users\user\Work\API Microgateway\Windows. 

Add the following Dockerfile to the directory "C:\Users\user\Work\API Microgateway\Windows":

FROM mcr.microsoft.com/windows/nanoserver:1809 
COPY Microgateway c:\\Microgateway 
WORKDIR c:\\Microgateway 
CMD ["microgateway-jre-win\\bin\\java", "-jar", "microgateway-server.jar", "start", "-p", "9090"]

With the Dockerfile the image can be built by executing the following command in the directory "C:\Users\user\Work\API Microgateway\Windows":

> docker build -t mcgw-windows .

The docker images command should show the resulting image: 

> docker images

REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
mcgw-windows                           latest              cfe1e568754a        2 days ago          338MB
mcr.microsoft.com/windows/nanoserver   1809                96b4b0f16026        2 weeks ago         251MB

Run Empty Microgateway Container

To verfiy that the image creation has worked according to plan, start a Microgateway Docker container without any APIs:

> docker run -d -p 9090:9090 -name microgateway mcgw-windows:latest

The state of the running container can be checked with docker ps:

> docker ps

REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
mcgw-windows                           latest              cfe1e568754a        2 days ago          338MB
mcr.microsoft.com/windows/nanoserver   1809                96b4b0f16026        2 weeks ago         251MB

The Microgateway state itself can be checked via the following curl command: 

> curl http://localhost:9090/rest/microgateway/status

{
    "description": "webMethods Microgateway",
    "publisher": "Software AG",
    "version": "10.5.0.5.189"
}

The empty Microgateway container can be stopped and removed via docker rm:

> docker rm -f microgateway

Provisioning of APIs

Let's assume an API Gateway is running on sample-host and holds the API EmployeeService. A Microgateway pulling the EmployeeService from the API Gateway can be started as follows: 

> docker run -p 9090:4485 --env mcgw_api_gateway_url=http://sample-host:5555/rest/apigateway --env mcgw_api_gateway_user=Administrator --env mcgw_api_gateway_password=manage --env mcgw_downloads_apis=EmployeeService --name microgateway mcgw-windows

Once the Microgateway Windows container is up and running the following curl command shows the deployed API.  

> curl http://localhost:9090/rest/microgateway/assets 

{
    "apis": [{
        "apiName": "EmployeeService",
        "apiVersion": "1",
        "type": "REST",
        "systemVersion": 1,
        "id": "85d4683b-84f6-42d7-89cb-e909c4d9a245",
        "httpEndpoint": "http:\/\/301ad9842cbe:9090\/gateway\/EmployeeService\/1",
        "httpsEndpoint": "",
        "scopes": [],
        "policyActions": [
            {
                "name": "Enable HTTP \/ HTTPS",
                "stageKey": "transport",
                "id": "72a4c3d9-29f7-4b4a-9088-f442e6170496",
                "global": "false",
                "description": "",
                "protocol": ["http"]
            },
            {
                "name": "Straight Through Routing",
                "stageKey": "routing",
                "id": "3c9899d4-d4d4-454d-a64b-e1bf8f9eab6e",
                "global": "false",
                "description": "",
                "endpointUri": ["http:\/\/sample-host:19084\/EmployeeService\/${sys:resource_path}"]
            },
            {
                "name": "Default Callback URL Replacer Action for API ",
                "id": "callbackURLReplacer",
                "global": "false"
            }
        ]
    }],
    "applications": [],
    "policies": [],
    "aliases": [],
    "authserver": []
}

The Microgateway Windows container is now running and ready to serve API requests.

Dockerfile (210 Bytes)