Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dockerize Everything

Dockerize Everything

what is Docker and how can I use it?

724e23783c2df384427be92ac6d043bb?s=128

Thomas Einwaller

May 27, 2015
Tweet

More Decks by Thomas Einwaller

Other Decks in Technology

Transcript

  1. Dockerize Everything Thomas Einwaller, troii Software

  2. 2008 2013

  3. None
  4. None
  5. None
  6. None
  7. None
  8. Number of Processes ~$ ps ax | wc -l 283

    ~$ docker run ubuntu ps ax PID TTY STAT TIME COMMAND 1 ? Rs 0:00 ps ax
  9. None
  10. code runtime libraries OS container what is in a container?

  11. ubuntu nginx java tomcat App A App B wordpress website

    X “inheritance”
  12. one process per container tomcat mysql war, .properties link container

    A container B
  13. immutable

  14. ship the whole environment

  15. How to get started?

  16. Kitematic

  17. None
  18. None
  19. None
  20. 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 ...
  21. How to build my own?

  22. 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 …
  23. 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 ...
  24. Dockerfile FROM ubuntu MAINTAINER Thomas Einwaller, tom@troii.com 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"]
  25. 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, tom@troii.com ---> 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
  26. 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 ....
  27. 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 ...
  28. How to use it?

  29. git repository artifact repository Development Environment Continuous Integration Source Artifact

    (.war, .jar, ...) Test/Prod Environment build / deployment pipeline before docker
  30. 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
  31. Development Environment ~$ docker run -v /Users/tom/website:/website nginx … ~$

    docker run -v /Users/tom/code:/code node …
  32. or

  33. 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
  34. Backup Tools ~$ docker run -v /home/tom/development/src:/src groovy //.gvm/groovy/ current/bin/groovy

    /src/script.groovy ~$
  35. dexec

  36. 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
  37. Docker compose web: build: . links: - db ports: -

    "8000:8000" db: image: postgres
  38. docker swarm

  39. None