code that currently powers the dotCloud PaaS • Original version written in Python (like dotCloud PaaS), now written in Go • It’s a young project (~6 months), but with a huge community.
project inside of dotCloud • March 21, 2013 Solomon gives Docker lightning talk a PyCon US • March 27, 2013 Docker 0.1 released to Public • September 4, 2013 Docker merged into Openstack for the Havana release • September 19, 2013 Partnership with Red Hat around OpenShift • September 27, 2013 Docker 0.6.3 released
150+ Contributors • 50,000+ docker index pull • 100’s of projects built on top of Docker – UIs (DockerUI, Shipyard, Dockland…) – Open Source PaaS (DEIS, Flynn, Dokku…) – Continuous Deployment (Strider…) • 1700’s Dockerized applications on Github
easily create lightweight, portable, self-sufficient containers from any application. The same container that a developer builds and test on a laptop can run at scale, in production, on VMs, OpenStack cluster, public clouds and more.”
within another Linux system • A container is a group of processes on a Linux box, put together is an isolated environment • From the inside, it looks like a VM • From the outside, it looks like normal processes • “chroot on steroids”
https://get.docker.io/builds/\ Linux/x86_64/docker-latest $> chmod +x docker • Run the docker daemon $> sudo ./docker –d & • Use your own system startup script
$> docker run busybox rm /etc/passwd • The file is still there ?? $> docker run busybox cat /etc/passwd • Commit the newly created to an image $> docker ps –n=2 #get the container’s id $> docker commit <id> vieux/broken-busybox • The file is gone $> docker run vieux/broken-busybox cat /etc/passwd
the public index $> docker search apache $> docker pull creack/apache2 • Run the image and check the ports $> docker run –d creack/apache2 $> docker ps • Expose public ports $> docker run –d –p 8888:80 –p 4444:443 creack/apache2 $> docker ps
a volume $> $ID=(docker run –d –v /var/lib/mysql vieux/mysql) • So you can re use it in another container $> docker run –d –volumes-from=$ID vieux/mysql • Bind mounts $> docker run –d –v /home/vv:/home <image> • Supports read only / read write $> docker run –d –v host/path:container/path:rw <image>
local $> docker build –t=gcm . • Test local $> docker run –p 49200:8080 gcm http://localhost:49200 • Change some files • Rebuild & test $> docker build –t=gcm . $> docker run –p 49200:8080 gcm