Victor Vieux at Docker Paris Meetup #1
-
Upload
docker-inc -
Category
Documents
-
view
171 -
download
11
Transcript of Victor Vieux at Docker Paris Meetup #1
![Page 1: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/1.jpg)
Docker Paris meetup #1 – 10/02/2013
Victor Vieux, dotCloud Inc. @vieux
![Page 2: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/2.jpg)
Outline
• Intro to Docker • Installing Docker • Basic commands • Demo: Simple deployment • Questions
![Page 3: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/3.jpg)
Quick survey
• How many people have heard of Docker before this Meetup ?
• How many people have tried Docker ? • How many people are using Docker in
production ?
![Page 4: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/4.jpg)
Introduction to Docker
![Page 5: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/5.jpg)
Origins of Docker • Docker is a rewrite of similar 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.
![Page 6: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/6.jpg)
Docker Timeline • January 2013 Docker started as an internal 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
![Page 7: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/7.jpg)
In the first 6 months
• 6000+ Github stars • 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
![Page 8: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/8.jpg)
What is Docker ?
“Docker is an open-source engine to 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.”
![Page 9: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/9.jpg)
How does Docker work ?
• LinuX Containers (LXC) • Control Groups & Namespaces • AUFS • Client – Server with an HTTP API
![Page 10: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/10.jpg)
LinuX Containers (LCX) • Let’s your run a Linux system 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”
![Page 11: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/11.jpg)
Why Containers?
• Speed: Boots in seconds • Footprint: 100-1000 containers on one
machine. Small disk requirements
![Page 12: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/12.jpg)
Containers vs. VMs
![Page 13: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/13.jpg)
Control Groups & Namespaces Linux kernel feature to limit, account and isolate resource usage, such as: – CPU – Memory – Disk I/O
![Page 14: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/14.jpg)
AUFS • File system that implements union mount. • Supports Copy On Write (COW):
# mount –t aufs –o br=/files1:/files2 none /files
# mount –t aufs –o br=/tmp=rw:/bin=ro none /files
![Page 15: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/15.jpg)
Installing Docker
![Page 16: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/16.jpg)
Requirements
• Linux Kernel 3.8 or above • AUFS • LXC • 64-bit
![Page 17: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/17.jpg)
Installations
• Ubuntu Linux • Binaries • Using Vagrant
More on: http://docs.docker.io/en/latest/installation
![Page 18: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/18.jpg)
Installation: Ubuntu Linux • AUFS support $> sudo apt-get update $> sudo apt-get intall linux-image-extra-`uname –r`
• Add Docker repository $> sudo sh –c “curl https://get.docker.io/gpg | apt-key add -” $> sudo sh –c “echo deb http://get.docker.io/ubuntu docker \
main > /etc/apt/sources.list.d/docker.list”
• Install $> sudo apt-get update $> sudo apt-get install lxc-docker
![Page 19: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/19.jpg)
Installation: Binaries • Get the docker binary $> wget –output-document=docker 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
![Page 20: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/20.jpg)
Installation: Vagrant • Clone the Docker repository $> git clone https://github.com/dotcloud/docker.git
• Startup the vagrant image $> vagrant up
• SSH into the image $> vagrant ssh
• Docker client works on Mac
![Page 21: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/21.jpg)
Basic commands
![Page 22: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/22.jpg)
Classic: hello world • Get one base image (ubuntu, centos, busybox,…) $> docker pull ubuntu
• List images on your system $> docker images
• Print hello world $> docker run ubuntu:12.10 echo “hello world”
![Page 23: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/23.jpg)
Detached mode • Run in Docker using the detach flag (-‐d) $> docker run –d ubuntu sh –c “while true; do echo hello world; sleep 1; done”
• Get container’s id $> docker ps
• A:ach to the container $> docker attach <container_id>
• Stop/Start/Restart the container $> docker stop <container_id>
![Page 24: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/24.jpg)
Containers vs Images • Remove a file from an image $> 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
![Page 25: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/25.jpg)
Public Index & Network • Pull an apache image from 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
![Page 26: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/26.jpg)
Creating your 1st app: the interactive way
• Using docker in interactive mode $> docker run –i –t ubuntu bash root@82c63ee50c3d:/# root@82c63ee50c3d:/# apt-get update […] root@82c63ee50c3d:/# apt-get install memcached […] root@82c63ee50c3d:/# exit
• Commit the image $> docker commit `docker ps –q –l` vieux/memcached
• Start the image $> docker run –d –p 11211 –u daemon vieux/memcached memcached
![Page 27: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/27.jpg)
Creating your 1st app: the boring way
• Multiple run / commit $> docker run ubuntu apt-get update $> $ID=(docker commit `docker ps –q –l`) $> docker run $ID apt-get install memcached $> docker commit `docker ps –q –l vieux/memcached
• Define default configuration at commit $> docker commit –run=‘{“Entrypoint”: [“memcached”]}’ […]
• Start the image $> docker run –d –p 11211 –u daemon vieux/memcached
![Page 28: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/28.jpg)
Creating your 1st app: the scripted way
• Write a Dockerfile # Memcached FROM ubuntu MAINTAINER Victor Vieux <[email protected]> RUN apt-get update RUN apt-get install –y memcached ENTRYPOINT [“memcached”] USER daemon EXPOSE 11211
• Buid the image $> docker build –t=vieux/memcached .
• Start the image $> docker run –d vieux/memcached memcached
![Page 29: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/29.jpg)
Volumes and bind mounts
• Put your persistent data in 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>
![Page 30: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/30.jpg)
Other commands
• docker cp #copy a file from container to host
• docker diff #print container changes
• docker top #display running processes inside a container
• docker rm/rmi #delete container/image
• docker wait #wait until container stop and print exit code
More on: http://docs.docker.io/en/latest/commandline/cli
![Page 31: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/31.jpg)
Demo: Simple deployment
![Page 32: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/32.jpg)
Local development
• App running in prod http://ks3100989.kimsufi.com:8080/
• Build 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
![Page 33: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/33.jpg)
Push to prod
• Tag image in order to push it $> docker tag gcm ks3100989.kimsufi.com:5000/gcm
• Push image to local registry $> docker push ks3100989.kimsufi.com:5000/gcm
• On production server, download image $> docker pull ks3100989.kimsufi.com:5000/gcm
• Restart the container $> docker stop <container_id> $> docker run –d –p 8080:8080 <image>
![Page 34: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/34.jpg)
Questions ?
![Page 35: Victor Vieux at Docker Paris Meetup #1](https://reader033.fdocuments.net/reader033/viewer/2022052506/557d8fc8d8b42a50158b4b3b/html5/thumbnails/35.jpg)
Thank you!
@vieux