Docker Strange Dev: How I learned to stop worrying and love the VM
A couple of months ago, my laptop died. I remember the day I brought it home for the first time. Still in college. I made a big decision—despite of my marginal finances—to go with the top model. “It should last at least five years,” I convinced myself. Seven years later, I got the news from the certified Apple repair person, “Well, you should just buy a new laptop than trying to fix this one.” So I did.
Now, I have a new laptop, which is currently placed on a pedestal. Watching how fast applications open and close on this laptop makes me cry. The future has arrived. I tell myself, “No! I will not f*** this one up this time! I will never install any software on this laptop ever!” Of course, I am in denial. This pure awesomeness will eventually decay. I predict the rate of decay exponentially accelerated by the number of software installed on the laptop (Disclaimer: No supporting data exists for this assertion—other than my paranoia).
I begin searching for the answer to the quest: Install no software. So I try Docker.
The noticeable difference between using Docker, which runs Linux container, and using the virtual machine (VM) is speed.
Both options provide the ability to isolate software’s running environment from the base operating system. Thus both deliver the desirable paradigm: Build once and run everywhere. And both address my concern—that the base operation system must remain minimal and untouched. However, Docker stands out from the classic VM approach by allowing the cloud application—which is a virtual image with desired software installed—to run within milliseconds. Compare that to the minutes of time it takes to boot a VM instance.
What significance does this difference make?
Docker removes a big chunk of mental roadblock for developers. Thanks to Docker’s superior response time, developers can barely identify the perceptual distinction between running applications on a virtual image (a virtual container, to be precise) and running applications on the base OS. In addition to its responsiveness, Docker appeals to the developers by obsoleting the tedious procedures of booting the VM instance and managing the instance’s life cycle. Unlike previous VM-centric approach, Docker embraces the application-centric design principal. Docker’s command line interface (CLI) below asks us two simple questions:
1. Which image to use?
2. What command to run?
docker run [options] <image> <command>
With Docker, I can type single-line commands to run cloud applications, similar to other Linux commands. Then I will have my databases servers running. I will have my web servers running. I will have my API servers running. And I will have my file servers running. All these are done by using single-line commands. The entire web-stack can now be running on my laptop within seconds. The best part of all this? When I’m done, there will be no trace left on my laptop—as if they never existed. The pure awesomeness prevails.
Running Eucalyptus Console on Docker
For those who want to check out Eucalyptus Console to access Amazon Web Services, here are the steps to launch Eucalyptus Console using Docker on OS X.
Step 1. Install Docker on your laptop
Here is a great link that walks you through how to install Docker on OS X:
Step 2. Pull Eucalyptus Console Docker image repository
Run the command below to pull Eucalyptus Console Docker images (it will take some time to download about 1.5 G image files):
docker pull kyolee310/eucaconsole
Run the command below to verify that the eucaconsole images have been pulled:
Step 3. Update Docker VM’s clock
When running Docker on OS X, make sure that OS X’s clock is synchronized properly. A skewed clock can cause problems for some applications on Docker. In order to fix this issue, you will need to log into the Docker VM and synchronize the clock manually.
You can SSH into Docker VM using the command below:
Once logged in, run the command below to sync the clock:
sudo ntpclient -s -h pool.ntp.org
Run the command below to verify that the clock has been sync’ed
One more patching work to do is to create an empty “/etc/localtime” file so that you can link your OS X’s localtime file to Docker VM’s localtime file at runtime:
sudo touch /etc/localtime
Exit the SSH session:
This issue is being tracked here:
Step 4. Launch Eucalyptus Console via Docker
Run the command below to launch Eucalyptus Console on Docker:
docker run -i -t -v /etc/localtime:/etc/localtime:ro -p 8888:8888 kyolee310/eucaconsole:package-4.0 bash
It’s a shame, but running a live “bash” session is not Docker’s way of doing things, but excuse me for the moment until I figure out how to run Eucalyptus Console properly without using the “service” command.
The command above will open a bash shell session for the eucaconsole image, then run the command below to launch Eucalyptus Console:
service eucaconsole start
Step 5. Open Eucalyptus Console on a browser
Run the command below to find out the IP of Docker VM:
, whose output would look like:
The VM’s Host only interface IP address is: 192.168.59.103
Using the IP above, access Eucalyptus Console at port 8888:
In order to access AWS, you will need to obtain your AWS access key and secret key. Here is the link by AWS on howto:
Step 6. Log into AWS using Eucalyptus Console