Skip to main content

HyperForm: A Practical Guide to Docker For Windows Administrators






Linux & Docker has succeeded in finding a place alongside Windows in many enterprise environments. More than ever before, Windows administrators need to be familiar with Linux & Docker and understand the relative strengths and weaknesses of the two platforms. Written for the Windows administrator, this guide provides practical information on integrating Linux, Docker, and Windows.
At the writing of this guide Docker container tech for Windows is in the Tech-Preview state. And it will take even more time for most of the official docker images to be available for Windows. 
In this guide, we'll be focussing on automation of the following workflows.

  1. Docker Containers running on top of Linux Virtual Machines.
  2. Linux Virtual Machines running on top of Hyper-V
  3. Windows Virtual Machines running on top of Hyper-V



First, let's quickly glance over Docker terminology and container lifecycle.
  • Image
    • Is a container snapshot just like in a virtualization world a VM checkpoint or a VM snapshot. 
    • Refer to docker image documentation for more details.
  • Repository
    • Provides a standard interface for storing and retrieving images. 
    • e.g. Docker Hub, Nexus, Artifactory, Quay.io
  • Container
    • Wraps a piece of software (e.g. MySQL, IIS) in a complete filesystem that contains everything needed to run: code, runtime, system tools, system libraries - Anything that can be installed on a server.
  • Container Lifecycle
    • Just like VM, container supports similar lifecycles states like Start, Stop, Restart, Pause, Snapshot, Destroy etc.



Secondly, It is important to use proper management products to administer Docker, Linux, and Windows environments. Having direct access to Hosts and Docker CLI gives unprecedented access with no access controls, policies, governance, and ability to support multi-tenancy.


A quick introduction to HyperForm (DCHQ) from HyperGrid - HyperForm is a Hybrid Cloud/Container Management platform.

  • Seamlessly works with Docker Ecosystem supports.
    • Docker Engine
    • Swarm
    • Docker-Compose
    • Docker-Machine
    • Docker-Volumes
    • Weave (Networking)
    • Repository etc



  • Seamlessly works with Hyper-V. 
    • Register a Hyper-V or Hyper-V Failover Cluster.


















  • Build-in Orchestrator can provision Windows, Linux based VM's on Hyper-V.
    • UI based workflow for provisioning VM's.
    • Simplifies and introduces Cloud-Provider like discipline for "Instance Types".

    • Text Template based workflow for provisioning VM'





















    • Build-In Ops Module can do real-time monitoring, scripting of both Windows, Linux VM's.












































Governance & Access-controls
    • Seamlessly control which Users are entitled to provision VM on the registered Hyper-V.
    • Control what VM templates and blueprints are allowed.
    • Control whether a user can request custom VM.
    • Optionally enforce Approvals for VM requests.
    • Set Max VM's that can be provisioned on the Hyper-V.
    • Ability to set Custom Quota per user/groups.



Lastly, let's deploy Docker containers on provisioned VM's. Note: Multiple VM's can be grouped into a single Cluster which can optionally have an overlay network (Weave, Swarm) for the container to discover each other and communicate across hosts.


  • The Cluster/DataCenter view in HyperForm






  • The Library view in HyperForm

















  • Customize and deploy "Wordpress with MySQL" image.










































  • Deployed Application and Management options.
    • Seamlessly real-time monitoring, and alerts of containers
    • In-browser Terminal
    • Scale-out, Scale-in individual nodes
    • Update, Refresh running container.
    • Access to logs, timeline etc


















Conclusion

Containerizing enterprise applications is still a challenge mostly because existing application composition frameworks do not address complex dependencies, external integrations or application life-cycle management tasks post-provision.

HyperForm, available in hosted and on-premise versions, addresses all of these challenges and simplifies the containerization of enterprise applications through an advanced application composition framework that extends Docker Compose supporting
  • advanced plug-ins that can be invoked at more than 20 different lifecycle stages to enable service discovery, on-the-fly containerization and application storage automation, and
  • data injection to support complex application dependencies.

To run & manage the simple Docker ASP.NET "Hello MVC" and “Hello Web” applications on 18 different clouds and virtualization platforms (including HyperGrid, vSphere, OpenStack, AWS, Rackspace, Microsoft Azure, Google Compute Engine, DigitalOcean, IBM SoftLayer, etc.), make sure that you either:


Comments

Rod said…
Hello Intesar,

Thanks for the excellent write up.
I use HyperForm mainly on CentOS/UBuntu baremetal but it's nice to know it works just as well on Hyper-V VMs. Having a central tool where one can perform container orchestration, app modeling combined with features such as LDAP and Jenkins integration make HyperForm a very versatile tool in the DevOps space.

Thanks,
Rod

Popular posts from this blog

JPA 2 new feature @ElementCollection explained

@ElementCollection is new annotation introduced in JPA 2.0, This will help us get rid of One-Many and Many-One shitty syntax.

Example 1: Stores list of Strings in an Entity

@Entity
public class Users implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
@ElementCollection
    private List<String> certifications = new ArrayList<String>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public List<String> getCertifications() {
        return certifications;
    }

    public void setCertifications(List<String> certifications) {
        this.certifications = certifications;
    }
..
}

        Users u = new Users();
        u.getCertifications().add("Sun Certified Java Programmer");
        em.persist(u);

Generated Tables

   Users
Column --> ID
    Row             1

Users_CERTIFICATIONS

Validating CSV Files

What is CsvValidator ?
  A Java framework which validates any CSV files something similar to XML validation using XSD.

Why should I use this ?
  You don't have to use this and in fact its easy to write something your own and also checkout its source code for reference.

Why did I write this ?
  Some of our projects integrate with third party application which exchanges information in CSV files so I thought of writing a generic validator which can be hooked in multiple projects or can be used by QA for integration testing.

What is the license clause ?
GNU GPL v2

Are there any JUnit test cases for me checkout ?
 Yes, source

How to integrate in my existing project ?

Just add the Jar which can be downloaded from here CsvValidator.jar and you are good.

Instantiate CsvValidator constructor which takes these 3 arguements

         // filename is the the file to be validated and here is a sample         // list - defines all the fields in the above csv file ( a field has index, type, isOptional, rege…

ArrayList vs LinkedList vs HashSet Performance Comparision

ConclusionsInserting & Reading sequentially from Collection prefer LinkedList/ArrayListInserting & Reading/Deleting by Search/equals from Collection prefer HashSetInserting, ArrayList & LinkedList performs best while HashSet takes double the timeReading, HashSet performs best while ArrayList & LinkedList are marginally lessDeleting, HashSet performs 10 times better than ArrayList & ArrayList performs 4 times better than LinkedList. LinkedList is slow because of sequencial search Bottom line : unless you are not going to iterate using for(Integer i : list ) then prefer HashSet
Inserting/Reading/Deleting integer's from zero till countJDK7Collectionactioncounttime msArrayListInsert1000/1LinkedListInsert1000/1HashSetInsert1000/1ArrayListInsert100005LinkedListInsert100004HashSetInsert100007ArrayListInsert10000011LinkedListInsert10000011HashSetInsert10000021ArrayListGet/Read1000LinkedListGet/Read1000HashSetGet/Read1000ArrayListGet/Read100004LinkedListGet/Read100003Has…