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?