Create a VirtualBox VM with Docker-Machine


Warning: requires a little bit IT skills


Here we describe steps for creating a VM with the help of docker-machine, within whose docker-engine is installed allowing to install NMRProcFlow in the wake, the whole in a single shell script. We think it might be useful for those who want to create virtual machines on the fly on their desktop / laptop and then clean it up after have done using it.

We have realized the test on Windows 7/10 Pro 64bits/Cygwin, but no doubt this test can be performed on any Linux or Mac OS X 10.11 or higher operating system without changing anything.. For Windows 7/10, you can try Git Bash in place of Cygwin which is lighter in size. For Windows 10 (only 64bits), see how to install Bash shell command-line tool.

Your host machine just needs a little cpu power (at least 4 cores), memory (at least 2 GB) and free disk space (at least 20 GB). For testing on local data center (e.g. with VMware vSphere), see how to proceed with the right machine driver and then consequently adapt the script and the procedure.

To learn more about Docker-machine, we suggest the Sreenivas Makam's blog and of course the official documentention and especially the "Get started" page.



Requirements

The Oracle VM VirtualBox software along with the Oracle VM VirtualBox Extension Pack must be installed on your machine.


Install Docker Machine

Copy-paste the right command line for your OS at https://github.com/docker/machine/releases/

Note: before executing, you must close the VirtualBox GUI if opened

$ curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-Windows-x86_64.exe > "/usr/bin/docker-machine.exe" && \
 chmod +x "/usr/bin/docker-machine.exe"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   623    0   623    0     0   1068      0 --:--:-- --:--:-- --:--:--  1070
100 27.2M  100 27.2M    0     0  3767k      0  0:00:07  0:00:07 --:--:-- 5466k


Create the shell script

This small shell script creates a VirtualBox VM with the NMRProcFlow installed. When finished, the IP address is given.

#!/bin/sh

VMNAME=npflow
VMDISKSIZE=20000
VMMEMORY=2028
VMCPU=4
DRIVER=virtualbox

/usr/bin/docker-machine create --driver $DRIVER --engine-storage-driver overlay \
      --${DRIVER}-cpu-count "$VMCPU" --${DRIVER}-disk-size "$VMDISKSIZE" --${DRIVER}-memory "$VMMEMORY" $VMNAME

eval $(/usr/bin/docker-machine env $VMNAME)

/usr/bin/docker-machine ls

echo
echo "---"
echo "Install NMRProcFlow on the VM"
echo "---"
/usr/bin/docker-machine ssh $VMNAME "cd /home/docker && wget http://www.nmrprocflow.org/themes/scripts/npflow_cloud.sh && chmod +x ./npflow_cloud.sh && sudo ./npflow_cloud.sh && sudo ./npflow start && sudo ./npflow ps"

echo
echo "---"
echo -n "IP of the VM: "
echo $(/usr/bin/docker-machine ip $VMNAME)
echo "---"
echo


Execute the shell script

Note: before executing, you must close the VirtualBox GUI if opened

sh ./create_dockMach_npflow
Running pre-create checks...
(npflow) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(npflow) Latest release for github.com/boot2docker/boot2docker is v18.05.0-ce
(npflow) Downloading C:\Users\djaco\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.05.0-ce/boot2docker.iso...
(npflow) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(npflow) Copying C:\Users\djaco\.docker\machine\cache\boot2docker.iso to C:\Users\djaco\.docker\machine\machines\npflow\boot2docker.iso...
(npflow) Creating VirtualBox VM...
(npflow) Creating SSH key...
(npflow) Starting the VM...
(npflow) Check network to re-create if needed...
(npflow) Windows might ask for the permission to create a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(npflow) Found a new host-only adapter: "VirtualBox Host-Only Ethernet Adapter #3"
(npflow) Windows might ask for the permission to configure a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(npflow) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(npflow) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: C:\cygwin64\bin\docker-machine.exe env npflow
NAME     ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
npflow   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce

---
Install NMRProcFlow on the VM
---
Connecting to www.nmrprocflow.org (147.100.164.61:80)
Connecting to www.nmrprocflow.org (147.100.164.61:443)
npflow_cloud.sh 100% |*******************************|  2210   0:00:00 ETA

latest: Pulling from nmrprocflow/nmrprocflow
...
Digest: sha256:2fc759c03bad09111a43646a728eb27aa00603c0ad828a3e75dc190fbb6f3eec
Status: Downloaded newer image for nmrprocflow/nmrprocflow:latest
0b31ba3eccf3d62ff7fdbe550890e019bb2c4dfea53957b37e6ca58e005b4fae
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS                  PORTS                NAMES
0b31ba3eccf3        nmrprocflow/nmrprocflow:latest   "/usr/bin/launch-ser…"   1 second ago        Up Less than a second   0.0.0.0:80->80/tcp   npflow

---
IP of the VM: 192.168.99.100
---


Launch the application in your favorite web browser

http://192.168.99.100/npflow/



Manage the machine

Note: before running any docker-machine command, you must close the VirtualBox GUI if opened

# Run this command to configure your shell (cygwin) before execute any docker-machine command
eval $("/usr/bin/docker-machine.exe" env npflow)

# List machines
$ /usr/bin/docker-machine ls
NAME     ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
npflow   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce

# show help about docker-machine
$ /usr/bin/docker-machine
Usage: docker-machine.exe [OPTIONS] COMMAND [arg...]

Create and manage machines running Docker.

Version: 0.15.0, build b48dc28d

Author:
  Docker Machine Contributors - <https://github.com/docker/machine>

Options:
  --debug, -D                                           Enable debug mode
  --storage-path, -s "C:\Users\djaco\.docker\machine"   Configures storage path [$MACHINE_STORAGE_PATH]
  --tls-ca-cert                                         CA to verify remotes against [$MACHINE_TLS_CA_CERT]
  --tls-ca-key                                          Private key to generate certificates [$MACHINE_TLS_CA_KEY]
  --tls-client-cert                                     Client cert to use for TLS [$MACHINE_TLS_CLIENT_CERT]
  --tls-client-key                                      Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]
  --github-api-token                                    Token to use for requests to the Github API [$MACHINE_GITHUB_API_TOKEN]
  --native-ssh                                          Use the native (Go-based) SSH implementation. [$MACHINE_NATIVE_SSH]
  --bugsnag-api-token                                   BugSnag API token for crash reporting [$MACHINE_BUGSNAG_API_TOKEN]
  --help, -h                                            show help
  --version, -v                                         print the version

Commands:
  active                Print which machine is active
  config                Print the connection config for machine
  create                Create a machine
  env                   Display the commands to set up the environment for the Docker client
  inspect               Inspect information about a machine
  ip                    Get the IP address of a machine
  kill                  Kill a machine
  ls                    List machines
  provision             Re-provision existing machines
  regenerate-certs      Regenerate TLS Certificates for a machine
  restart               Restart a machine
  rm                    Remove a machine
  ssh                   Log into or run a command on a machine with SSH.
  scp                   Copy files between machines
  mount                 Mount or unmount a directory from a machine with SSHFS.
  start                 Start a machine
  status                Get the status of a machine
  stop                  Stop a machine
  upgrade               Upgrade a machine to the latest version of Docker
  url                   Get the URL of a machine
  version               Show the Docker Machine version or a machine docker version
  help                  Shows a list of commands or help for one command


Remove the machine

Note: before remove, you must close the VirtualBox GUI if opened

$ docker-machine.exe rm npflow
About to remove npflow
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed npflow