Homework 2

Due March 2


1 Introduction

The purpose of this homework is to provide hands-on experience with hardware and OS virtualization. Homeworks will alternate between written assignments and hands-on homeworks such as this one.

2 Virtual Box

For hardware virtualization, we will be using VirtualBox, which does binary translation to run unmodified Operating Systems as Virtual Machines. You can download VirtualBox for your platform here: https://www.virtualbox.org/wiki/Downloads

2.1 Installing an OS on a new VM

We will use a standard .iso image to install an Operating System onto a Virtual Disk, just like you would install an OS on an actual physical hard disk. We will use Ubuntu as the Operating System (although you can use any OS as you wish). You can download the 64-bit server image http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-server-amd64.iso or the desktop version (with GUI) http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-desktop-amd64.iso

If you have a 32bit OS (or a 32bit CPU), Virtualbox may be unable to run the 64bit versions. You will need to download and use the 32bit versions available at http://www.ubuntu.com/download/alternative-downloads

Create a New VM by clicking on the "New" tab. Give your VM a name, say "ubuntu-vm". For performance reasons, Virtualbox asks the type (Linux/Ubuntu 32-bit).

2.1.1 Memory

The next step is to allocate some hardware for your VM. Give a reasonable amount of memory to your VM. If you are planning to run a desktop VM with GUI, 3 GB is minimum. The memory that you allocate also depends on the total physical RAM available in your system. Memory allocated to the VM cannot be used by the other programs and memory shortage on the host OS can lead to system slow-down. If your system is memory constrained, consider installing the server iso, which should be able to run in 1 GB.

2.1.2 Disk

A virtual machine needs a virtual disk, and you can use a file as a virtual hard drive. Create a virtual disk, and allocate the size. 5-8 GB should suffice. There is a choice of image formats for the virtual disk (vmdk, raw, qcow2, vdi, etc). You can pick any format.

When creating the virtual disk, note the location of the file that you have created. Say you created the virtual disk in /home/user/vbox/vdisk1.vmdk. What is the size of vdisk1.vmdk?

2.1.3 Mount the iso

So far, we've allocated storage and memory and thus created a "blank" virtual machine. To install the OS, we need to attach a CD-drive. Open the Settings for the VM, goto the Storage tab, and add a CD/DVD device. Choose the iso disk downloaded earlier. We now have a "virtual PC" with a CD-ROM drive, memory, and a hard disk.

2.2 Running Your VM

Start your VM. The Ubuntu installer screen should appear since the VM boots from the CD-Drive first. Install Ubuntu as you generally would.

2.3 Post-install

Once the OS is installed, Shut Down the VM or Reboot it. If the installer screen pops up again, the VM is still booting from the CD and not from the hard-disk. Remove the CD-Drive from the settings if the OS was installed successfully. This should now cause the hypervisor to pick the hard-disk to boot from instead of the CD.

Try logging in and running your favourite programs. Try Pausing/UnPausing your VM. What is the difference between power-cycling the VM and pausing/resuming?

Note that if you change the VM settings, you will need to restart the VM

2.3.1 Network access

So far, we have not configured any network interface for the VM. If you need network access for your VM, ensure that the Network Adapter is enabled in the VM settings. It can be of a NAT or a Bridged type. Try both and report which works on your system.

Note the IP address of your host system (sudo ifconfig on the host) and the IP address of the VM by issuing ifconfig inside the VM. What are the IPs?

2.3.2 CPU

Change the processor configuration in the System tab. You can change the number of CPUs exposed to the VM, and also enable/disable hardware virtualization acceleration if your CPU provides it (VT-x/SVM).


3 Docker

3.1 Obtaining Docker

Install docker to your newly created virtualbox image.

Alternatively, you can also try the online docker tutorial https://www.docker.com/tryit/ . You still need to run the tasks mentioned below and report them in your writeup.

Note: You need to run Docker as root. Prefix sudo to all commands or run as root

Check if docker works: docker.io version. What is the version?

3.2 Image repository

All public docker images are in the docker repository. Search for the ubuntu docker images by calling docker.io search ubuntu . Which images are listed?

3.3 Downloading the image

docker pull ubuntu

Verify its downloaded by docker images

3.4 Running a command inside a container

docker run -i -t ubuntu /bin/bash

This spawns the container and runs bash inside it. You can run anything in the container. Examine the process tree inside it by issuing ps inside the container by using docker run: docker run ubuntu ps

Examine the file system tree inside the container. cd / changes into the root directory. Is this the same root directory of the system?

Install some package inside the container : docker run apt-get install -y vim

The container has been changed, now we can save it.

3.5 Saving the container as an image

First, get the ID of the image docker ps -l Say the ID is 6982a9948422 Next, commit the changes you have made: docker commit 698 ubuntu

You now have a new docker image which you can re-use, share etc.

3.6 Resource utilization

Now observe the process tree outside the container by calling ps. Does the container show up here?

See the hardware resources granted to the container by using the docker inspect $image-id command. What is the CPU/memory allocated to the container?

4 What to hand in

Write up about your experiences in running Virtualbox and Docker.

  • Which VirtualBox features did you try?
  • What is the size of the virtual disk on the host? Issue df in the VM and report the size of the file-system that the VM sees.
  • How long (approximately) does it take to pause and unpause a running VM?
  • Which networking option (NAT/Bridged) worked for you?
  • How much RAM and disk space did you allocate to the VM?
  • Did you install docker in the VM or try the online tutorial?
  • Which docker commands did you try?
  • Compare the time required to start a container vs. starting a VM.
  • Explore file system inside the container and examine if the root(/) is shared between the container and the system.
  • Compare the ps output inside the container vs when run for the entire system.
  • What is the CPU/memory allocated to the container?

Author: prateeks

Created: 2015-02-23 Mon 13:57

Emacs 24.3.1 (Org mode 8.2.7c)

Validate