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
Unknown said…
Good article on Docker, content is good and very informative. thank you for sharing.

Best Regards,
CourseIng - DevOps Training in Hyderabad
Sharmi Ammu said…
This is really a nice and informative, containing all information and also has a great impact on the new technology.
Cloud Computing Courses
Cloud computing course in Chennai

Popular posts from this blog

Access multiple Databases in JPA

According to JPA specification we can define multiple "persistence-unit" elements (i.e. like below) in persistence.xml file and can easily refer them inside Dao layers as this. public class PolarDaoImpl {     @PersistenceContext(unitName="PolarPU")     protected EntityManager entityManager; -- } public class BearDaoImpl {     @PersistenceContext(unitName="BearPU")     protected EntityManager entityManager; -- } Checkout sample persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">     <!-- Database 1 -->     <persistence-unit name="PolarPU" transaction-type="RESOURCE_LOCAL">         <

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    Co

Reuse JPA Entities as DTO

Note : Major design advantages of JPA Entities are they can detached and used across tiers and networks and later can by merged. Checkout this new way of querying entities in JPA 2.0 String ql = " SELECT new prepclass2.Employee (e.firstname, e.lastname) FROM Employee e "; List<Employee> dtos = em.createQuery(ql).getResultList(); The above query loads all Employee entities but with subset of data i.e. firstname, lastname. Employee entity looks like this. @Entity @Table(name="emp") public class Employee implements Serializable {     private static final long serialVersionUID = 1L;     @Id     @GeneratedValue(strategy = GenerationType.AUTO)     private Long id;     @Column     private String firstname;     @Column     private String lastname;     @Column     private String username;     @Column     private String street;     @Column     private String city;     @Column     private String state;     @Column     private String zipc