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 http://us.archive.ubuntu.com trusty InRelease Hit http://security.ubuntu.com trusty-security InRelease Hit http://us.archive.ubuntu.com trusty-updates InRelease Hit http://security.ubuntu.com trusty-security/main Sources #---- SNIP ----# Ign http://us.archive.ubuntu.com trusty/restricted Translation-en_US Ign http://us.archive.ubuntu.com trusty/universe Translation-en_US Reading package lists... Done hifi@docker-xx:~$
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: apt-transport-https 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 http://us.archive.ubuntu.com/ubuntu/ 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://p80.pool.sks-keyservers.net:80 --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://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D gpg: requesting key 2C52609D from hkp server p80.pool.sks-keyservers.net gpg: key 2C52609D: public key "Docker Release Tool (releasedocker) <docker@docker.com>" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) hifi@docker-xx:~$
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 https://apt.dockerproject.org/repo 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 docker-engine: Installed: (none) Candidate: 1.10.1-0~trusty Version table: 1.10.1-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages 1.10.0-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages 1.9.1-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages 1.9.0-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages #---- SNIP ----# 1.5.0-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages hifi@docker-xx:~$
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: yubico-piv-tool The following NEW packages will be installed: aufs-tools cgroup-lite docker-engine git git-man liberror-perl libsystemd-journal0 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: https://hub.docker.com For more examples and ideas, visit: https://docs.docker.com/userguide/ hifi@docker-xx:~$
!!!!BONUS ROUND!!!!
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 docker:x:999:hifi
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.