ozbillwang
7/21/2015 - 1:33 PM

vmware AppCatalyst - another docker solution

vmware AppCatalyst - another docker solution

http://networkinferno.net/appcatalyst-so-simple-a-networker-got-it-running

AppCatalyst – So simple a networker got it running

AppCatalyst

AppCatalyst is a thin hypervisor based on VMware Fusion that is targeted at Developers. Developers who want to use container based deployments on Virtual Machines can user AppCatalyst to deploy their workloads. VMware Photon is a minimal Linux Container Host that provides Docker, rkt, and Garden container specification out of the box. It is included in AppCatalyst as the default image.

Where VMware Fusion has a GUI there is none to be found with AppCatalyst. A REST API or CLI are primary touch points to rapidly spinning up and bringing down workloads. With a REST API exposed other automation tools can drive AppCatalyst. Vagrant anyone?

AppCatalyst and the Vagrant plugin for AppCatalyst is free. Go download today if you’re running Mac OS X 10.9 or later.

First steps – Installing

Download and install AppCatalyst
Add the PATH to your current Shell if you desire with:
export PATH=$PATH:/opt/vmware/appcatalyst/bin
or
Browse to /opt/vmware/appcatalyst/bin and run appcatalyst

Executing appcatalyst will yield the following

Overwatch:\~ aburke$ appcatalyst
VMware AppCatalyst Technical Preview June 2015
Build # 2836636
Copyright (C) 2015 VMware Inc.
All Rights Reserved
Usage:
appcatalyst ...
Virtual Machine Operations
vm list     List all available VM IDs.
vm create     Create a VM from the default template.
vm clone     Create a clone of the parent VM.
Virtual Machine Power Operations
vmpower list    List all powered-on VM IDs.
vmpower on     Power on the VM, or resume a suspended VM.
vmpower off     Power off the VM immediately.
vmpower shutdown     Shut down the guest OS.
vmpower suspend     Suspend the VM, saving the current state.
vmpower pause     Pause the VM.
vmpower unpause     Unpause the VM.
Guest OS Operations
guest getip      Get the IP address of the VM.
Checking for updates...
No updates available
As you can see there is a very basic but power CLI.

Furthermore I create a VM very quickly. If I am wanting to develop two different platforms or different virtual machine I can edit my AppCatalyst.conf and change the image if you desire.

Overwatch:~ aburke$ sudo appcatalyst vm create NetworkInferno
Info: Cloned VM from /opt/vmware/appcatalyst/photonvm/photon.vmx to /var/root/Documents/AppCatalyst/NetworkInferno/NetworkInferno.vmx
Validate the list of AppCatalyst VMs

Overwatch:~ aburke$ appcatalyst vm list
Info: VMs found in /Users/aburke/Documents/AppCatalyst
NetworkInferno
Power on the new VM

Overwatch:~ aburke$ sudo appcatalyst vmpower on NetworkInferno
2015-06-24T17:29:26.619| ServiceImpl\_Opener: PID 17246
Info: Completed power op on for VM at /private/var/root/Documents/AppCatalyst/NetworkInferno/NetworkInferno.vmx
Once this has started issue the following to find the IP address of your new Photon VM.

Overwatch:~ aburke$ sudo appcatalyst guest getip NetworkInferno
192.168.113.130
Time to SSH to our box with a pre-built key.

Overwatch:Vagrant aburke$ ssh -i /opt/vmware/appcatalyst/etc/appcatalyst_insecure_ssh_key photon@192.168.113.130<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */</script>
The authenticity of host '192.168.113.130 (192.168.113.130)' can't be established.
RSA key fingerprint is 77:e8:6e:02:72:a2:13:98:f3:36:00:ba:c1:06:ae:22.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.113.130' (RSA) to the list of known hosts.
Last login: Fri Jun 19 20:51:42 2015 from 192.168.217.1
photon [ ~ ]
Now that we are in it is time to see what is installed already.

photon [ ~ ]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
photon [ ~ ]$ sudo docker version
Client version: 1.7.0
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 0baf609
OS/Arch (client): linux/amd64
Server version: 1.7.0
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 0baf609
OS/Arch (server): linux/amd64
Great! I can see I have Docker installed. I could actually run a script that would have automated the pulldown and deployment of a particular Docker container if I wanted to.

AppCatalyst Daemon and REST API

The AppCatalyst framework has a Daemon that can be run. This opens the ability for Vagrant to use AppCatalyst. It also allows an administrator to use the API browser. You can access this via http://localhost:8080.

This is the daemon that allows REST API access to AppCatalyst.

Vagrant UP all the things

First you will need to install the Vagrant AppCatalyst plugin. One of the first things noted if you have used Vagrant previously with Fusion is that it cost money. Vagrant and AppCatalyst plugin is free!

aburke$ vagrant plugin install vagrant-vmware-appcatalyst
Installing the vagrant-vmware-appcatalyst plugin. This can take a few minutes...
Installed the plugin vagrant-vmware-appcatalyst (1.0.1)!
With the plugin installed it is time to initiate the AppCatalyst Daemon.

Overwatch:/ aburke$ /opt/vmware/appcatalyst/bin/appcatalyst-daemon
2015/06/24 20:26:12 DEFAULT_VM_PATH=/Users/aburke/Documents/AppCatalyst
2015/06/24 20:26:12 DEFAULT_PARENT_VM_PATH=/opt/vmware/appcatalyst/photonvm/photon.vmx
2015/06/24 20:26:12 DEFAULT_LOG_PATH=/Users/aburke/Library/Logs/VMware
2015/06/24 20:26:12 PORT=8080
2015/06/24 20:26:12 Swagger path: /opt/vmware/appcatalyst/bin/swagger
2015/06/24 20:26:12 appcatalyst daemon started.
With that started time to deploy two VM’s with Vagrant. This is what my VagrantFile looks like.

Set our default provider for this Vagrantfile to 'vmware_appcatalyst'
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'vmware_appcatalyst'
nodes = [
{ hostname: 'aburke-1', box: 'vmware/photon' },
{ hostname: 'aburke-2', box: 'vmware/photon' }
]
Vagrant.configure('2') do |config|
Configure our boxes with 1 CPU and 512MB of RAM
config.vm.provider 'vmware_gantry' do |v|
v.vmx['numvcpus'] = '1'
v.vmx['memsize'] = '512'
end
Go through nodes and configure each of them.j
nodes.each do |node|
config.vm.define node[:hostname] do |node_config|
node_config.vm.box = node[:box]
node_config.vm.hostname = node[:hostname]
node_config.vm.synced_folder('/Users/aburke/Development', '/development')
end
end
end
With a simple vagrant up –provider=vmware_appcatalyst
we are away. There are two boxes in my Vagrant file that deploy aburke-1 and aburke-2. These virtual machines have 1 vCPU and 512MB ram as defined by numvcpus and memsize.

With the command vagrant ssh aburke-1 I now have access to my machines I have deployed.

Rapid

For a network guy I find this stuff pretty amazing. The possibilities of deploying entire networks are feasible if the virtual machines I were deploying were SRX firewalls or Vyatta routers. I could subsequently deploy a Docker image that is Quagga or running exaBGP and instantly have a service.