Written by Andrew Colin Kissa
We’re happy to announce the availability of Docker support on our VPS installations.
In this blog post, we aim to introduce you to Docker one of
the most exciting and powerful open-source projects that has sprung up in the recent
In a nutshell, Docker offers you the tools to package everything that forms an
application, allowing you to deploy the application effortless across systems and
machines both virtual and physical.
Just as Java was write once run anywhere, Docker allows you to setup once and
The Docker project uses mostly existing Linux functionality mainly, LXC (Linux containers), device-mapper, aufs (a union file system).
https://registry.hub.docker.com/ lets you browse popular docker images. The most popular ones are ready-to-use development environments: a tomcat, mysql, memcached, android software development, ssh-able base centos and ubuntu images.
These Docker images make docker very attractive for developers wanting to have a quick play with new technologies.
Docker is also a great option for developers wanting to build an easily deployable application. For example, see the wordpress docker below!
How it works
The main parts of the Docker system are:
- Docker daemon - This manages the LXC containers on a host
- Docker client - This is used to interact with the Docker daemon
- Docker Index - This is a repository of Docker images
The above tools are used to create the Docker applications which consist of:
- Docker containers - These are directories containing everything needed to run
- an application.
- Dockerfiles - Scripts for automating the building of Docker applications
- Docker images - Snapshots of Docker applications or Base Operating Systems
So why is every one raving about Docker ? The short answer is:
Docker is light weight, allows you to port applications across systems and
hardware with ease while containing those applications and running them in
their own secure sandboxed environments
Ease of use
The whole process of porting applications is based on Docker containers which
as just simple directories that can be copied across to different systems or
Docker reuses mostly existing kernel functionality and Linux libraries, simply
glueing the existing tools. Docker makes use of LXC technology which provides
for virtualisation without the overhead of other virtualisation technologies.
Using LXC Docker is able to contain applications limiting resources, not allowing
access beyond their own file-system as well as process isolation.
By using Docker containers, applications are able to work anywhere they are
Because it is filesystem based it is easy to take snapshots, perform rollbacks
similar to using a version control system
A lot more can be said about Docker, to get the full low down refer to the
To get started with using Docker on your Rimu VPS, you need to change your
kernel to 3.12.27 or later which will be 'Docker'-enabled.
Docker is supported on the following versions of Ubuntu:
- Ubuntu Trusty 14.04 (LTS) (64-bit)
- Ubuntu Precise 12.04 (LTS) (64-bit)
apt-get update apt-get install docker.io lxc ln -sf /usr/bin/docker.io /usr/local/bin/docker sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
Docker is supported on the following versions of Centos:
- CentOS-7 (64-bit)
yum install docker yum install docker-io lxc service docker start chkconfig docker on
Docker would need to be manually installed on Debian 7.0 Wheezy (64-bit)
Follow the Ubuntu 12.04 instructions per http://docs.docker.com/installation/ubuntulinux/#ubuntu-precise-1204-lts-64-bit
Using with Docker
All interaction with the Docker system is via the *docker* command this
command needs to be run as a privileged user or using sudo.
To see the list of all available docker commands run:
This should return:
Usage: docker [OPTIONS] COMMAND [arg...] -H=[unix:///var/run/docker.sock]: tcp://host:port to bind/connect to or unix://path/to/socket to use A self-sufficient runtime for linux containers. Commands: attach Attach to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders from a container's filesystem to the host path diff Inspect changes on a container's filesystem events Get real time events from the server export Stream the contents of a container as a tar archive history Show the history of an image images List images import Create a new filesystem image from the contents of a tarball info Display system-wide information inspect Return low-level information on a container kill Kill a running container load Load an image from a tar archive login Register or log in to a Docker registry server logout Log out from a Docker registry server logs Fetch the logs of a container port Lookup the public-facing port that is NAT-ed to PRIVATE_PORT pause Pause all processes within a container ps List containers pull Pull an image or a repository from a Docker registry server push Push an image or a repository to a Docker registry server restart Restart a running container rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save an image to a tar archive search Search for an image on the Docker Hub start Start a stopped container stop Stop a running container tag Tag an image into a repository top Lookup the running processes of a container unpause Unpause a paused container version Show the Docker version information wait Block until a container stops, then print its exit code
Search for images
Searching for a docker image:
docker search ubuntu
Downloading an image:
To download an image from a Docker index
docker pull ubuntu
To list all the images on your system
Listing Docker containers
To list all running Docker containers
To list all running and non-running Docker containers
docker ps -l
Starting Docker containers
To start a Docker container
docker run [image name] [command to run] docker run ubuntu /bin/bash
Stopping a Docker container
To stop a Docker container
docker stop [container ID] docker stop c4ff7513909d
Example Docker Application
The CentOS Project provides a number of sample Dockerfiles which you may use
either as templates or as examples to teach yourself Docker. These Dockerfiles
are available on github
For this example i will be using the WordPress Application for Centos6.
To begin we need to clone the git repository by running the following:
cd /usr/local/src git clone https://github.com/CentOS/CentOS-Dockerfiles.git
Change to the directory containing the Dockerfile for Centos6
Build the Docker image, replace ** with your username
docker build -rm -t /wordpress:centos6 .
The above command will run several commands in the DockerFile to setup
a working WordPress site for you, to see the commands run look at the
Dockerfile inside the directory or online
Now that you have a Docker image you need to run the image:
CID=$(docker run -d -p 80 -p 22 /wordpress:centos6)
The variable $CID contains the image's ID which we use later, now that
our image is running lets get the mysql and wordpress passwords by looking
at the logs.
echo "$(docker logs $CID | grep password)"
Now we can find the port mapped on the host to the port 80 in the application
by running the following command.
docker port $CID 80
In my case the port is 49156 so i can now open the browser and connect to the
host IP address on that port, On connection i get the wordpress install page
i can now fill in the form and finalise the setup.
Thats it you have WordPress running in no time