Slide 1

Slide 1 text

Dockerize Everything Thomas Einwaller, troii Software

Slide 2

Slide 2 text

2008 2013

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Number of Processes ~$ ps ax | wc -l 283 ~$ docker run ubuntu ps ax PID TTY STAT TIME COMMAND 1 ? Rs 0:00 ps ax

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

code runtime libraries OS container what is in a container?

Slide 11

Slide 11 text

ubuntu nginx java tomcat App A App B wordpress website X “inheritance”

Slide 12

Slide 12 text

one process per container tomcat mysql war, .properties link container A container B

Slide 13

Slide 13 text

immutable

Slide 14

Slide 14 text

ship the whole environment

Slide 15

Slide 15 text

How to get started?

Slide 16

Slide 16 text

Kitematic

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Search and Run an Image ~$ docker search -s 10 wordpress NAME DESCRIPTION STARS OFFICIAL wordpress The WordPress rich content management syst... 323 [OK] tutum/wordpress Wordpress Docker image - listens in port 8... 40 ... ~$ docker run wordpress Unable to find image 'wordpress:latest' locally latest: Pulling from wordpress 60fa28093d2e: Pull complete a8f83d6d9aa9: Pull complete d0ca8f539db8: Pull complete ...

Slide 21

Slide 21 text

How to build my own?

Slide 22

Slide 22 text

Custom Container ~$ docker run -it ubuntu /bin/bash root:/# root:/# apt-get install -y mysql-server Reading package lists... Done Building dependency tree Reading state information... Done …

Slide 23

Slide 23 text

Commit Container ~$ docker ps CONTAINER ID IMAGE COMMAND NAMES e5a0e59fd3fd ubuntu:latest "/bin/bash" prickly_nobel ~$ docker commit prickly_nobel tom/mysql CONTAINER ID IMAGE COMMAND NAMES e5a0e59fd3fd ubuntu:latest "/bin/bash" prickly_nobel ~$ docker images REPOSITORY TAG IMAGE ID VIRTUAL SIZE tom/mysql latest 86a1fcd53530 512.1 MB ~$ docker run tom/mysql ...

Slide 24

Slide 24 text

Dockerfile FROM ubuntu MAINTAINER Thomas Einwaller, [email protected] RUN apt-get update && apt-get -y install apache2 ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid RUN mkdir /var/lock/apache2 EXPOSE 80 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Slide 25

Slide 25 text

Docker build ~$ docker build -t tom/apache2 . Sending build context to Docker daemon 2.048 kB Sending build context to Docker daemon Step 0 : FROM ubuntu ---> bdb87369f343 Step 1 : MAINTAINER Thomas Einwaller, [email protected] ---> Using cache ---> adcf06d4a78f Step 2 : RUN apt-get update && apt-get -y install apache2 ---> Using cache ---> 5aee61ee1c84 ... Step 9 : EXPOSE 80 ---> Using cache ---> ac985c02bfd6 Step 10 : CMD /usr/sbin/apache2 -D FOREGROUND ---> Running in 0a822e00e190 ---> 89ac6eef066c Successfully built 89ac6eef066c

Slide 26

Slide 26 text

Docker history ~$ docker history tom/apache2 IMAGE CREATED CREATED BY SIZE a6b064aec848 2 minutes ago /bin/sh -c #(nop) CMD ["/usr/sbin/apache2" "- 0 B dc0e02dc4d11 2 minutes ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B 1bc593d23431 2 minutes ago /bin/sh -c mkdir /var/lock/apache2 0 B afdda46774c6 2 minutes ago /bin/sh -c #(nop) ENV APACHE_PID_FILE=/var/ru 0 B 7f1a112bfd2e 2 minutes ago /bin/sh -c #(nop) ENV APACHE_LOCK_DIR=/var/lo 0 B 8a95fc52c646 2 minutes ago /bin/sh -c #(nop) ENV APACHE_LOG_DIR=/var/log 0 Ba32a610ccb8 2 minutes ago /bin/sh -c #(nop) ENV APACHE_RUN_GROUP=www-da 0 B 8083f7e42d6d 2 minutes ago /bin/sh -c #(nop) ENV APACHE_RUN_USER=www-dat 0 B 8cbd4df21d8b 2 minutes ago /bin/sh -c apt-get update && apt-get -y insta 30.63 MB ddfbce728239 2 minutes ago /bin/sh -c #(nop) MAINTAINER Thomas Einwaller 0 B bdb87369f343 5 weeks ago /bin/sh -c #(nop) CMD [/bin/zsh] 0 B ....

Slide 27

Slide 27 text

Docker push ~$ docker push tom/apache2 Sending image list Pushing repository tom/apache2 (1 tags) Image 511136ea3c5a already pushed, skipping Image 9fec74352904 already pushed, skipping Image d0955f21bf24 already pushed, skipping ... and pull ~$ docker pull tom/apache2 Unable to find image 'tom/apache2:latest' locally latest: Pulling from tom/apache2 60fa28093d2e: Pull complete a8f83d6d9aa9: Pull complete d0ca8f539db8: Pull complete ...

Slide 28

Slide 28 text

How to use it?

Slide 29

Slide 29 text

git repository artifact repository Development Environment Continuous Integration Source Artifact (.war, .jar, ...) Test/Prod Environment build / deployment pipeline before docker

Slide 30

Slide 30 text

build / deployment pipeline with docker git repository artifact repository docker repository Development Environment Continuous Integration Source Artifact (.war, .jar, ...) Continuous Integration Test/Prod Environment Docker Image

Slide 31

Slide 31 text

Development Environment ~$ docker run -v /Users/tom/website:/website nginx … ~$ docker run -v /Users/tom/code:/code node …

Slide 32

Slide 32 text

or

Slide 33

Slide 33 text

Backup Tools ~$ docker run --volumes-from=nexus_data -e SOURCE=/usr/local/sonatype-work -e TARGET=s3://s3-eu-west-1.amazonaws.com/nexus-backup/ -e TARGET_USER=$AWSACCESSKEYID -e TARGET_PASS=$AWSSECRETACCESSKEY duply ~$ docker run --link mysql:db -e BUCKET_NAME=mysql-backup -e AWSACCESSKEYID=$AWSACCESSKEYID -e AWSSECRETACCESSKEY=$AWSSECRETACCESSKEY -e DBNAMES=test -e USERNAME=user -e PASSWORD=password automysqlbackup

Slide 34

Slide 34 text

Backup Tools ~$ docker run -v /home/tom/development/src:/src groovy //.gvm/groovy/ current/bin/groovy /src/script.groovy ~$

Slide 35

Slide 35 text

dexec

Slide 36

Slide 36 text

Docker machine ~$ docker-machine create --driver virtualbox dev INFO[0001] Downloading boot2docker.iso to /home/tom/.docker/machine/ INFO[0011] Creating SSH key... INFO[0012] Creating VirtualBox VM... INFO[0019] Starting VirtualBox VM... ... ~$ docker-machine ls NAME ACTIVE DRIVER STATE URL dev * virtualbox Running tcp://192.168.99.103:2376 staging digitalocean Running tcp://104.236.50.118:2376

Slide 37

Slide 37 text

Docker compose web: build: . links: - db ports: - "8000:8000" db: image: postgres

Slide 38

Slide 38 text

docker swarm

Slide 39

Slide 39 text

No content