Docker
Official web page http://docker.io
Installation
Ubuntu
https://docs.docker.com/installation/ubuntulinux
Windows
- Windows. It will install Boot2Docker management tool with ISO, Virtualbox and MYSYS-git UNIX tools.
- If the installer detects a version of VirtualBox installed, the VirtualBox checkbox will not be checked by default (Windows OS). The VirtualBox cannot be used anymore after updating my VB from 4.3.18 to 4.3.20.
Error in supR3HardenedWinReSpawn
The error may be related to Windows update.
The VB installation messed up. At the end I switch to VMware player. I cannot test Windows's Docker on my Windows machine.
Usage
Basics and docs
https://docs.docker.com/articles/basics/
Note that we need sudo is needed unless it is on a Mac OS.
If docker cannot find an image, it will try to pull it from its repository.
$ sudo docker run -it ubuntu /bin/bash Unable to find image 'ubuntu' locally Pulling repository ubuntu 04c5d3b7b065: Download complete 511136ea3c5a: Download complete c7b7c6419568: Download complete 70c8faa62a44: Download complete d735006ad9c1: Download complete root@ec83b3ac878d:/#
A brief intro to docker virtualization
docker search --help docker search redis docker search -s 100 redis docker pull --help docker pull ubuntu # download all versions of ubuntu docker images # available local container images docker pull centos:latest docker run --help cat /etc/issue # look at the current distr name before running docker docker run -it centos:latest /bin/bash # create a container & execute as a sudo cat /etc/redhat-release yum cd /home touch temp.txt ls exit docker ps # current running processes docker ps -a # show all processes including closed docker restart c85850ed0e13 docker ps # container c85850ed0e13 is running docker attach c85850ed0e13 # log into the system ls /home exit docker ps -a docker rm c85850ed0e13 # delete the container
Dockerizing Applications
$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" $ sudo docker ps -l $ sudo docker logs insane_babbage $ sudo docker stop insane_babbage $ sudo docker ps
The -d flag tells Docker to run the container and put it in the background, to daemonize it.
Web Application/Work with containers
https://docs.docker.com/userguide/usingdocker/
$ sudo docker run -d -P training/webapp python app.py $ sudo docker run -d -p 5000:5000 training/webapp python app.py $ sudo docker ps # find the NAME from the last column # In this case, it is called 'nostalgic_morse' $ sudo docker port nostalgic_morse 5000 $ sudo docker logs -f nostalgic_morse $ sudo docker top nostalgic_morse $ sudo docker stop nostalgic_morse $ sudo docker ps -l $ sudo docker start nostalgic_morse $ sudo docker stop nostalgic_morse $ sudo docker rm nostalgic_morse
Note: Always remember that deleting a container is final!
Work with container images
https://docs.docker.com/userguide/dockerimages/
$ sudo docker search sinatra $ sudo docker pull training/sinatra $ sudo docker run -t -i training/sinatra /bin/bash $ sudo docker commit -m="Added json gem" -a="Kate Smith" 0b2616b0e5a8 ouruser/sinatra:v2 $ sudo docker images $ mkdir sinatra $ cd sinatra $ touch Dockerfile $ sudo docker build -t="ouruser/sinatra:v2" . $ sudo docker push ouruser/sinatra $ sudo docker rmi training/sinatra
- I get an error when I try to launch sinatra on my 32-bit ubuntu (Docker can only be installed through apt-get on 32-bit)
$ sudo docker run -t -i training/sinatra /bin/bash 2014/12/31 02:43:26 exec format error
- I get lots of errors when I run docker build command on my 64-bit Ubuntu.
$ sudo docker build -t="ouruser/sinatra:v2" . Sending build context to Docker daemon 2.56 kB Sending build context to Docker daemon Step 0 : FROM ubuntu:14.04 Pulling repository ubuntu ed5a78b7b42b: Download complete 511136ea3c5a: Download complete fe95bf7d5f50: Download complete 9a4594fe74ea: Download complete 8c4b1edcceea: Download complete ---> ed5a78b7b42b Step 1 : MAINTAINER Kate Smith <[email protected]> ---> Running in 63614919cafd ---> 5bac5869eb36 Removing intermediate container 63614919cafd Step 2 : RUN apt-get update && apt-get install -y ruby ruby-dev ---> Running in 68e8ccfa5f7c Err http://archive.ubuntu.com trusty InRelease Err http://archive.ubuntu.com trusty-updates InRelease Err http://archive.ubuntu.com trusty-security InRelease Err http://archive.ubuntu.com trusty Release.gpg Could not resolve 'archive.ubuntu.com' Err http://archive.ubuntu.com trusty-updates Release.gpg Could not resolve 'archive.ubuntu.com' Err http://archive.ubuntu.com trusty-security Release.gpg Could not resolve 'archive.ubuntu.com' Reading package lists... W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg Could not resolve 'archive.ubuntu.com' W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg Could not resolve 'archive.ubuntu.com' W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg Could not resolve 'archive.ubuntu.com' W: Some index files failed to download. They have been ignored, or old ones used instead. Reading package lists... Building dependency tree... Reading state information... Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: ruby-dev : Depends: ruby1.9.1-dev (>= 1.9.3.194-1) but it is not going to be installed E: Unable to correct problems, you have held broken packages. 2014/12/30 16:03:21 The command [/bin/sh -c apt-get update && apt-get install -y ruby ruby-dev] returned a non-zero code: 100
Link containers together
https://docs.docker.com/userguide/dockerlinks/
Manage data in containers
https://docs.docker.com/userguide/dockervolumes/
Working with Docker hub
https://docs.docker.com/userguide/dockerrepos/
Misc
Access the internet from the container
Run the container with the '--net=host' option
sudo docker run --net=host -it ubuntu /bin/bash