roshan@blog:~$
DevOps DevopsDocker

Docker - Lightweight Linux Container

 ·  Roshan Nagekar  ·  5 min read

Docker: Its a tool that helps you to pack, ship and run any application as a light-weight Linux container. More on https://www.docker.io/

Works best on **Linux kernel 3.8 **Ubuntu 12.04 precise has 3.2 and needs to be upgraded.

Install **Docker with on **Ubuntu 12.04:

sudo apt-get update
sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
sudo reboot

To check docker version

sudo docker version

Client version: 0.11.1

Client API version: 1.11

Go version (client): go1.2.1

Git commit (client): fb99f99

Server version: 0.11.1

Server API version: 1.11

Git commit (server): fb99f99

Go version (server): go1.2.1

Last stable version: 0.11.1

To check info about docker installed

sudo docker info
Containers: 1

Images: 9

Storage Driver: aufs

Root Dir: /var/lib/docker/aufs

Dirs: 11

Execution Driver: native-0.2

Kernel Version: 3.11.0-20-generic

WARNING: No swap limit support

To pull an existing docker image

sudo docker pull <imagename>
sudo docker pull busybox

HelloWorld in docker

sudo docker run busybox echo HelloWorld

Search for an existing image in the index:

docker search <image-name>
sudo docker search stackbrew/ubuntu

NAME                       DESCRIPTION                                     STARS     OFFICIAL   TRUSTED

stackbrew/ubuntu           Barebone ubuntu images                          36

jprjr/stackbrew-node       A stackbrew/ubuntu-based image for Docker,...   2                    [OK]

hcvst/erlang               Erlang R14B04 based on stackbrew/ubuntu         0                    [OK]

stackbrew/ubuntu-upstart                                                   0

Pull an existing image:

sudo docker pull ubuntu

Pulling repository ubuntu

a7cf8ae4e998: Pulling dependent layers

3db9c44f4520: Downloading [=================>                                 ] 22.18 MB/63.51 MB 2m19s

74fe38d11401: Pulling dependent layers

316b678ddf48: Pulling dependent layers

99ec81b80c55: Pulling dependent layers

5e019ab7bf6d: Pulling dependent layers

511136ea3c5a: Download complete

6cfa4d1f33fb: Download complete

To the check the available images:

sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

ubuntu              13.10               5e019ab7bf6d        2 weeks ago         180 MB

ubuntu              saucy               5e019ab7bf6d        2 weeks ago         180 MB

ubuntu              12.04               74fe38d11401        2 weeks ago         209.6 MB

ubuntu              precise             74fe38d11401        2 weeks ago         209.6 MB

ubuntu              12.10               a7cf8ae4e998        2 weeks ago         171.3 MB

ubuntu              quantal             a7cf8ae4e998        2 weeks ago         171.3 MB

ubuntu              14.04               99ec81b80c55        2 weeks ago         266 MB

ubuntu              latest              99ec81b80c55        2 weeks ago         266 MB

ubuntu              trusty              99ec81b80c55        2 weeks ago         266 MB

ubuntu              raring              316b678ddf48        2 weeks ago         169.4 MB

ubuntu              13.04               316b678ddf48        2 weeks ago         169.4 MB

busybox             latest              2d8e5b282c81        2 weeks ago         2.489 MB

ubuntu              10.04               3db9c44f4520        2 weeks ago         183 MB

ubuntu              lucid               3db9c44f4520        2 weeks ago         183 MB

To run a command within an image:

docker run<image> command
sudo docker run ubuntu echo HelloWorld

HelloWorld

To install something on an ubuntu image

sudo docker run apt-get install <package>
find ID of the container
sudo docker ps -l

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES

0dac167b178d        ubuntu:14.04        ps aux              12 minutes ago      Exited (0) 12 minutes ago                       goofy_bell

committing changes made to the images:

docker commit 0da firstcommit

723aa6ead77a14ff05cd2c640163345ec5a36fa9a4c757a6872a1ec919ab9345

To get log of the present container:

sudo docker logs 0dac167b178d

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.0   7132   644 ?        Rs   09:10   0:00 ps aux

To inpect the details of an image

sudo docker inspect <id: 3-4 characters of id will work too>
sudo docker inspect 0da

Push container image to the index

sudo docker push ubuntu

Creating Dockerfile:

All instructions in Dokerfile are in the form of

INSTRUCTION arguments

Instruction are not case sensitive but CAPS are recommended. The first instruction in any Dockerfile is the FROM instruction. The syntax is:

FROM

FROM ubuntu

This will look for the image in **Docker index. You can also search **docker index by the command docker search

Next is the RUN instruction. The RUN instruction will execute any commands on the current image. After executing, it will also commit the changes. The committed image can be used for the next instructions from the Dockerfile. This way the committed changes form a layer of changes just like any other source code control system. Syntax of RUN command:

RUN

RUN apt get install -y apache2

Here the RUN command is equivalent to **docker run image command + **docker commit container_id. Here image will be automatically replaced with the current image and container_id is the result of the previous commit.

Once you have created your Dockerfile you can use docker build to create you image from it. You can use the command in this way.

Create a Dockerfile with the content

FROM ubuntu

RUN apt-get install -y memcached

Save and close the file. If the file is in you r present directory:

docker build .

If the file in in some other location

docker build path/to/file

If passing through STDIN

docker build - < Dockerfile

If passing through github URL

docker build github.com/roshan4074

you can check the container with the command:

sudo docker images

To apply a tag to an image you the command: docker tag

sudo docker tag <container_id>

To comment a code use the "#' symbol followed by the text

To specify the contact info of the Maintainer of the Dockerfile:

MAINTAINER Name contact@email

To trigger a command as soon as a container starts, use ENTRYPOINT instruction

ENTRYPOINT echo "Hello, Container Started"

Another Format to use ENTRYPOINT Instrcution is

ENTRYPOINT ["echo", "Hello, Container Started"]

This is the preferred format

e.g

ENTRYPOINT ["wc", "-l"]

To execute a certain command by a particular user use the command USER

USER roshan

T open a particular port for a process use EXPOSE instruction

EXPOSE 8080

Related Posts

DevOps

Why Nagios Still Has My Heart (Even Though I Use Prometheus Now)

2026

DevOps

I built a pipeline to auto-post my Telegram channel everywhere. Then I stopped.

2026

DevOps

Getting Started with Docker Compose: A Practical Guide

2025