Docker – Intro

Intro

Docker provides an integrated technology suite that enables development and IT operations teams to build, ship, and run distributed applications anywhere.

“Docker wasn’t on anyone’s roadmap in 2014, it is on everyone’s roadmap for 2015”

Terminology

  • Docker Images – blueprints of our application
  • Docker Container – created from docker images and are real instances of our application
  • Docker Daemon – building, running and distributing Docker images
  • Docker Client – Run on our local machine and connect to the daemon
  • Docker Hub – a registry of docker images

Installation

Quick and easy install script provided by Docker:

If you’re looking for detailed steps or how to install on different Windows / OSX please check https://docs.docker.com/

If you’re running docker under Linux you need to run

to avoid: Cannot connect to the Docker daemon. Is the docker daemon running on this host? Log out and log in back. This ensures your user is running with the correct permissions.

On Linux the 3.10.x kernel is the minimum requirement for Docker. For OSX 10.8 “Mountain Lion” or newer is required.

Both OSX and Windows require Docker Toolbox to be installed in order to be able to run docker containers.

Early versions of Docker Toolbox require you to install a VM with Docker Machine using the VirtualBox provider:

However the latest versions of Docker Toolbox will take care of this part. You can check Docker-machine version and status and ip:

Docker Images

Docker at its core is a way to separate an application and the dependencies needed to run it from the operating system itself. To make this possible Docker uses containers and images.

A Docker image is basically a template for a filesystem. When you run a Docker image, an instance of this filesystem is made live and runs on your system inside a Docker container. By default this container can’t touch the original image itself or the filesystem of the host where Docker is running. It’s a self-contained environment.

Let’s search the official Ubuntu docker image.

Limit the search to Ubuntu images with at least 1000 stars/rating:

  • docker run – run and interact with the image:

View previous images and history:

or

Remove docker instance:

 

While you can use the docker rmi command to remove specific images, there’s a tool called docker-gc that will clean up images that are no longer used by any containers in a safe manner.

  • docker load loads an image from a tar archive as STDIN, including images and tags (as of 0.7).
  • docker save saves an image to a tar archive stream to STDOUT with all parent layers, tags & versions (as of 0.7).
  • docker history shows history of image.
  • docker tag tags an image to a name (local or registry).

 

Containers

Docker containers wrap up your application in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in.

Containers are for software, not for data

Docker containers are consumables. Docker containers should be used to scale applications, for firing more app servers with the same setup etc. Data belongs onto the filesystem but not into a container that can neither be cloned in an easy way nor incrementally backed up in a reasonable way. Containers are for software, not for data.

Docker container commands

If you want to map a directory on the host to a docker container, docker run -v $HOSTDIR:$DOCKERDIR. Also see Volumes.

  • docker start starts a container so it is running.
  • docker stop stops a running container.
  • docker restart stops and starts a container.
  • docker pause pauses a running container, “freezing” it in place.
  • docker unpause will unpause a running container.
  • docker wait blocks until running container stops.
  • docker kill sends a SIGKILL to a running container.
  • docker attach will connect to a running container.
  • docker logs gets logs from container. (You can use a custom log driver, but logs is only available for json-file and journald in 1.10)
  • docker inspect looks at all the info on a container (including IP address).
  • docker events gets events from container.
  • docker port shows public facing port of container.
  • docker top shows running processes in container.
  • docker stats shows containers’ resource usage statistics.
  • docker diff shows changed files in the container’s FS.
  • docker stats --all shows a running list of containers.

Additional links:

  1. https://docs.docker.com/linux/
  2. https://docs.docker.com/engine/understanding-docker/#how-does-a-docker-image-work
  3. https://docs.docker.com/engine/userguide/containers/usingdocker/