Getting Going With Docker

UPDATE: Looks like this post is moot as of today 3/24/2016 due to Docker for Mac and Docker for Windows betas coming out

While interviewing for a new gig I was asked to use memcached and they had suggested standing up a docker instance. I have been using docker pretty regularly now after learning much from my previous co-workers and practical usage.

So, on OSX you can install the docker-machine and docker brew formulas with homebrew. (If you are not using homebrew and cask to manage your installations on OSX you are missing out). I use VirtualBox as my VM hosting tool.

If you haven’t installed (tapped) cask for application (non-CLI, GUI apps) installations, you should do it now:

brew tap caskroom/cask

Now install the items:

brew cask install virtualbox
brew install docker-machine docker

On Linux you don’t need docker-machine as you can just use docker directly, but on OSX you need the set up a Linux host through a VM tool like Virtualbox. You need to setup your docker-machine with the following command:

docker-machine create --driver virtualbox default

This creates the docker host on virtualbox and names it default. So when you run docker-machine ls you will see something like the following:

› docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.10.3

I created a Dockerfile to create the docker image with the following content:

FROM ubuntu:latest
MAINTAINER Jason Meridth <jmeridth@gmail.com>

RUN apt-get update && \
    apt-get install -y memcached && \
    apt-get clean

EXPOSE 11211

CMD ["-u", "root", "-m", "1000"]
USER daemon
ENTRYPOINT memcached

This Dockerfile will do the following:

  • create a new image based on the latest Ubuntu docker image on DockerHub.
  • set the maintainer to myself
  • update the instance
  • install memcached
  • cleanup the update/install
  • expose port 11211 from the instance
  • run the arguments against the entry point (memcached)
  • set user to daemon
  • set entry point to be memcached

After the docker host is create I then built the image with the following command:

docker build -t memcached_img .

-t lets you set a tag on the image so you can use that instead of the unique ID when creating the instance.

To see the new image you run the following:

docker images

and you’ll see something like:

› docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
memcached_img       latest              ad3d86685ca8        57 minutes ago      211.4 MB
ubuntu              latest              97434d46f197        4 days ago          188 MB

Note: To delete the image you would use the docker rmi memcached_img command.

I then created the docker instace based on the new docker image with the following command:

docker run -name memcached_ins -d -p 45001:11211 memcached_img

You should receive the sha of your new container instance. To see the instance information run docker ps. The result is

› docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
18c82cd27a2d        memcached_img       "/bin/sh -c memcached"   5 seconds ago       Up 5 seconds        0.0.0.0:45001->11211/tcp   memcached_ins

As you can see this shows the mapping from the host port of 45001 to the container instance port of 11211 (defaul for memcached).

Note: You may need to add the -a argument to the docker ps command to see all container instances (including the ones not currently running).

Jason Meridth

jmeridth

My name is Jason Meridth. I am a continuously learning senior software developer/devops/team lead/development manager trying to not let best be the enemy of better. I reserve the right to change my mind upon obtaining more information. I am also the owner and principal software consultant at Meridth, LLC. If you have any software, hardward, networking, process, etc needs please don't hesitate to reach out to me.

Raspberry Pi Kubernetes Cluster - Part 2

Howdy again.Alright, my 8 port switch showed up so I was able to connect my raspberry 3B+ boards to my home network. I plugged it in wit...… Continue reading

Raspberry Pi Kubernetes Cluster - Part 1

Published on April 07, 2018

SSH - Too Many Authentication Failures

Published on March 28, 2018