Getting started with Docker

So you have docker installed (using my installer hopefully?), and you want to know how to begin.

This should get you started in creating your first Docker instance.

First off, let's install Docker.

Previously, I had posted my Docker installers, so we are going to use those for this exercise. I have broken out the instructions for both Mac and Debian-based when needed.

Installation (sudo required)

Mac

curl -s bman.io/i/install_dockermac|sudo bash  

or

curl -s https://gist.githubusercontent.com/bhgraham/9dced0918dc20edd1484/raw/744e2f3ec355dc9a9310527c77234dbb2a192cde/install_dockermac | sudo bash  

Debian-based

curl -s bman.io/i/install_dockerdeb|sudo bash  

or

curl -s https://gist.githubusercontent.com/bhgraham/ed9f8242dc610b1f38e5/raw/58c162147be40c53a8a35b525e62dea86f49ebec/install_dockerdeb | sudo bash  

GIT

To make use of common best practices, we are going to need to use revision control. We will need a directory to initialize a GIT repository. For our exercise we are going to use the project name, exampledocker.

mkdir exampledocker && cd exampledocker  
git init  

Dockerfile

Using your preferred editor (nano, vim, eg.), you need to create a file named Dockerfile with the following contents:

FROM    debian:stable

MAINTAINER MyName <me@wherever.com>

# Build dependencies
RUN apt-get -y update

# Install some common tools needed.
RUN apt-get install -y -q curl git-core apt-utils sudo libwww-perl vim htop wget

# Setup timezone, notice in this example, we 
# perform multiple operations within the same
# RUN by ending the lines with \, this ensures
# You create a single build step for this operation.
RUN \  
  cp /usr/share/zoneinfo/America/Chicago /etc/localtime && \
  echo "America/Chicago" > /etc/timezone;

# Bash / sh link
RUN ln -sf /bin/bash /bin/sh;

# Say you want a file with predefines set,
# like for a file in /etc, you can do it like so.
RUN echo moo > /tmp/moo

# When the container is run, which directory do 
# you want it dropped into?
WORKDIR  /opt/

# Now we are going to set the command executed when 
# the container is run.
CMD ["/bin/bash"]  

Save that file and then add it to git.

git add Dockerfile  
git commit -m "Initial Dockerfile commit"  

Docker build and run

Now we will test out our Dockerfile by building it with the following command.

docker build -t exampledocker .  

Next you will see a ton of output showing whats going on. It begins like so, but I won't show the guts of it.

Sending build context to Docker daemon  2.56 kB  
Sending build context to Docker daemon  
Step 0 : FROM debian:stable  
debian:stable: The image you are pulling has been verified  
798202714a7c: Downloading 78.93 MB/90.17 MB 7s  

...

Removing intermediate container 66a45bcf45ac  
Step 8 : CMD /bin/bash  
 ---> Running in aa69d44c9867
 ---> e885d8e03847
Removing intermediate container aa69d44c9867  
Successfully built e885d8e03847  

Now that it is built, let's check to be sure it exists with the docker images command.

docker images exampledocker  
REPOSITORY     TAG     IMAGE ID      CREATED         VIRTUAL SIZE  
exampledocker  latest  e885d8e03847  6 minutes ago  203.5 MB

As we have set the command and the directory at the end of the Dockerfile, running the next command should drop you into a bash shell in /opt.

docker run -i -t --rm exampledocker  

The -i is interactive, -t allocates a pseudo-tty and --rm removes the container when you exit. I would recommend using --rm while you are still developing or else it gets messy fast.

The result should look like this:

root@1d14c22b52ab:/opt#  

At this point you have successfully created and run your first container using Docker. Just type exit to quit the container and remove it.

Check to be sure the container ended with the docker ps command. Just look for Exited (0)

docker ps -a | grep dockerexample  

That's it. You have now successfully created and run a docker container on your local machine.

I will be writing a future article and going in depth on collaboration with Docker and using the Docker Hub. Having it in GIT from the start helps. As always, if you have any questions or comments, drop them on the post comments.

If you need any other help you may want to use man or check here:

https://docs.docker.com/reference/commandline/cli/