Tuesday, February 16, 2016

REDUX!! Now asking for handouts

Docker Install - Because it changed that much from 1.9 to 1.10

Well let us get started on this roller coaster of a ride where programmers only think about themselves and screw their fanboys and haters in one shot.
There is not a simple install script you can curl to install docker any longer, someone though this booger needed to be picked.

So with this forking I am going to be doing the installation on Ubuntu, and screw all the other platforms.

First off, you are installing software, on a linux box, that can destroy the world. Make sure you have root access.

Step one, run apt-get update, to get the latest everything cached.

hifi@docker-xx:~$ sudo apt-get update 
Ign trusty InRelease
Hit trusty-security InRelease
Hit trusty-updates InRelease
Hit trusty-security/main Sources            
#---- SNIP ----# 
Ign trusty/restricted Translation-en_US           
Ign trusty/universe Translation-en_US             
Reading package lists... Done                                                  

Once that is done, we need to make sure that our brand new install of ubuntu has the correct version of the CA Certificates along with the ability to allow apt sources to use https.

hifi@docker-xx:~$ sudo apt-get install apt-transport-https ca-certificates
Reading package lists... Done
Building dependency tree       
Reading state information... Done
ca-certificates is already the newest version.
The following packages will be upgraded:
1 upgraded, 0 newly installed, 0 to remove and 113 not upgraded.
Need to get 25.0 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 trusty-updates/main apt-transport-https amd64 1.0.1ubuntu2.11 [25.0 kB]
Fetched 25.0 kB in 0s (93.4 kB/s)        
(Reading database ... 56619 files and directories currently installed.)
Preparing to unpack .../apt-transport-https_1.0.1ubuntu2.11_amd64.deb ...
Unpacking apt-transport-https (1.0.1ubuntu2.11) over (1.0.1ubuntu2.10) ...
Setting up apt-transport-https (1.0.1ubuntu2.11) ...

The third step on this immortal journey to install docker is to get the docker apt-key from their host, on port 80.

hifi@docker-xx:~$ sudo apt-key adv --keyserver hkp:// --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo: unable to resolve host docker-xx
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.Z1iwzQ8sE8 --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp:// --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
gpg: requesting key 2C52609D from hkp server
gpg: key 2C52609D: public key "Docker Release Tool (releasedocker) <>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Next we want to add our special location, you know the place, yeah that is right.

hifi@docker-xx:~$ sudo touch /etc/apt/sources.list.d/docker.list 
hifi@docker-xx:~$ sudo vim /etc/apt/sources.list.d/docker.list 
deb ubuntu-trusty main

The final step is to recommend that the apt-cache policy be set to always select the latest version of the docker-engine, so lets do that, just because we were told to. We also need to do an apt-get before we can set the cache policy

hifi@docker-xx:~$ sudo apt-get update # let this run!!
hifi@docker-xx:~$ sudo apt-cache policy docker-engine
  Installed: (none)
  Candidate: 1.10.1-0~trusty
  Version table:
     1.10.1-0~trusty 0
        500 ubuntu-trusty/main amd64 Packages
     1.10.0-0~trusty 0
        500 ubuntu-trusty/main amd64 Packages
     1.9.1-0~trusty 0
        500 ubuntu-trusty/main amd64 Packages
     1.9.0-0~trusty 0
        500 ubuntu-trusty/main amd64 Packages
#---- SNIP ----# 
     1.5.0-0~trusty 0
        500 ubuntu-trusty/main amd64 Packages

The docs say to install linux-image-extras-$(`uname -r`)  and apparmor here, but every time i have checked, they have been installed.
So do as you want, it is your life to crash and burn.

FINALLY!!! we are at the docker install steps!!
So let us use the power of the mighty apt-get install docker-engine to install docker-engine

But first! make sure you do apt-get update, again and again and again.

Now let's hit the sudo apt-get install docker-engine

What the docs do not warn you about are all the extra stuff that needs to be installed.
It requires git, and the git world of packages, but it also requires a second round of tools for the different file systems and cgroups. Remember not everything is required.

hifi@docker-xx:~$ sudo apt-get install docker-engine
sudo: unable to resolve host docker-xx
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  aufs-tools cgroup-lite git git-man liberror-perl libsystemd-journal0
Suggested packages:
  git-daemon-run git-daemon-sysvinit git-doc git-el git-email git-gui gitk
  gitweb git-arch git-bzr git-cvs git-mediawiki git-svn
Recommended packages:
The following NEW packages will be installed:
  aufs-tools cgroup-lite docker-engine git git-man liberror-perl
0 upgraded, 7 newly installed, 0 to remove and 112 not upgraded.
Need to get 12.3 MB of archives.
After this operation, 65.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
#---- SNIP ----# 
cgroup-lite start/running
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
Processing triggers for ureadahead (0.100.0-16) ...
hifi@docker-xx:~$ sudo docker --version 
Docker version 1.10.1, build 9e83765

And after all this, I miss the curl install, oh well, it was a good life of not knowing what my server was doing.

Last step, do the docker test, docker run hello-world

hifi@docker-xx:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
03f4658f8b78: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:

For more examples and ideas, visit:


If you don't give two flying monkeys about security, you can add your user to the docker group with the simple groupmod -aG docker hifi
Replace hifi with your user name, because I am hifi, you are not.

hifi@docker-xx:~$ sudo usermod -aG docker hifi
hifi@docker-xx:~$ cat /etc/group | grep docker

In short, they other version should work in a similar manner, this was for Ubuntu 14.04 because I care about the world.
Please note, I was able to use sudo to do all of these commands in both text, and the video at the beginning.

In closing, there are things, things change, read the updated documents, they will update them eventually.