49
Docker Build, Ship and Run GDG Spaghetti Code Liberec, 6.10.2015 1

GDGSCL - Docker a jeho provoz v Heroku a AWS

Embed Size (px)

Citation preview

Page 1: GDGSCL - Docker a jeho provoz v Heroku a AWS

DockerBuild, Ship and Run

GDG Spaghetti Code Liberec, 6.10.2015 1

Page 2: GDGSCL - Docker a jeho provoz v Heroku a AWS

Ladislav Prskavec

4 Twitter: @abtris

4 Blog: http://blog.prskavec.net

4 Site Reliability Engineer (SRE)in Apiary.io

GDG Spaghetti Code Liberec, 6.10.2015 2

Page 3: GDGSCL - Docker a jeho provoz v Heroku a AWS

GDG Spaghetti Code Liberec, 6.10.2015 3

Page 4: GDGSCL - Docker a jeho provoz v Heroku a AWS

What's Docker?

GDG Spaghetti Code Liberec, 6.10.2015 4

Page 5: GDGSCL - Docker a jeho provoz v Heroku a AWS

Analogyfrom

logistics

GDG Spaghetti Code Liberec, 6.10.2015 5

Page 6: GDGSCL - Docker a jeho provoz v Heroku a AWS

Goods, wares

GDG Spaghetti Code Liberec, 6.10.2015 6

Page 7: GDGSCL - Docker a jeho provoz v Heroku a AWS

Containers

GDG Spaghetti Code Liberec, 6.10.2015 7

Page 8: GDGSCL - Docker a jeho provoz v Heroku a AWS

Why Docker?

GDG Spaghetti Code Liberec, 6.10.2015 8

Page 9: GDGSCL - Docker a jeho provoz v Heroku a AWS

Fastand

scalableGDG Spaghetti Code Liberec, 6.10.2015 9

Page 10: GDGSCL - Docker a jeho provoz v Heroku a AWS

Build once,run anywhere

GDG Spaghetti Code Liberec, 6.10.2015 10

Page 11: GDGSCL - Docker a jeho provoz v Heroku a AWS

Configure once, run anywhere

GDG Spaghetti Code Liberec, 6.10.2015 11

Page 12: GDGSCL - Docker a jeho provoz v Heroku a AWS

Example of using Docker4 build documentation in Sphinx with latex

support

4 executing code in many different programming languages without requiring a single compiler or script interpreter on your machine - docker exec

4 running gui app in docker at linux

GDG Spaghetti Code Liberec, 6.10.2015 12

Page 13: GDGSCL - Docker a jeho provoz v Heroku a AWS

Example of using Docker4 development without install ing many

tools at local machine

4 Vagrant, Otto dev

4 continues integration using docker

4 Jenkins, TravisCI, CircleCI

4 DevOps platform for build, deploy and manage apps across any cloud - Tutum

GDG Spaghetti Code Liberec, 6.10.2015 13

Page 14: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker Engine

GDG Spaghetti Code Liberec, 6.10.2015 14

Page 15: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker Engine

GDG Spaghetti Code Liberec, 6.10.2015 15

Page 16: GDGSCL - Docker a jeho provoz v Heroku a AWS

VM vs Docker

GDG Spaghetti Code Liberec, 6.10.2015 16

Page 17: GDGSCL - Docker a jeho provoz v Heroku a AWS

Containers and imagesdocker run hello-world

GDG Spaghetti Code Liberec, 6.10.2015 17

Page 18: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker Remote API4 client & server in Docker

4 docker ps

4 docker build

4 docker push/pull

4 docker run/stop

4 docker inspect

GDG Spaghetti Code Liberec, 6.10.2015 18

Page 19: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker lifecycle4 a build produces an immutable image

4 a container is as instance of the image

GDG Spaghetti Code Liberec, 6.10.2015 19

Page 20: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker lifecycle

GDG Spaghetti Code Liberec, 6.10.2015 20

Page 21: GDGSCL - Docker a jeho provoz v Heroku a AWS

Container lifecycle

GDG Spaghetti Code Liberec, 6.10.2015 21

Page 22: GDGSCL - Docker a jeho provoz v Heroku a AWS

Dockerfile# Firefox over VNC## VERSION 0.3

FROM ubuntu

# Install vnc, xvfb in order to create a 'fake' display and firefoxRUN apt-get update && apt-get install -y x11vnc xvfb firefoxRUN mkdir ~/.vnc# Setup a passwordRUN x11vnc -storepasswd 1234 ~/.vnc/passwd# Autostart firefox (might not be the best way, but it does the trick)RUN bash -c 'echo "firefox" >> /.bashrc'

EXPOSE 5900CMD ["x11vnc", "-forever", "-usepw", "-create"]

GDG Spaghetti Code Liberec, 6.10.2015 22

Page 23: GDGSCL - Docker a jeho provoz v Heroku a AWS

DockerHub

GDG Spaghetti Code Liberec, 6.10.2015 23

Page 24: GDGSCL - Docker a jeho provoz v Heroku a AWS

GDG Spaghetti Code Liberec, 6.10.2015 24

Page 25: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker tools

GDG Spaghetti Code Liberec, 6.10.2015 25

Page 26: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker compose

4 defining and running multi-container applications with Docker

GDG Spaghetti Code Liberec, 6.10.2015 26

Page 27: GDGSCL - Docker a jeho provoz v Heroku a AWS

docker-compose.ymlweb: build: . ports: - "5000:5000" volumes: - .:/code links: - redisredis: image: redis

GDG Spaghetti Code Liberec, 6.10.2015 27

Page 28: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker machine4 Machine lets you create Docker hosts on your computer, on cloud providers, and inside your own data center.

4 part of Docker toolbox

4 replacement for boot2docker

GDG Spaghetti Code Liberec, 6.10.2015 28

Page 29: GDGSCL - Docker a jeho provoz v Heroku a AWS

Demo

GDG Spaghetti Code Liberec, 6.10.2015 29

Page 30: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker swarm

4 Docker Swarm is native clustering for Docker.

GDG Spaghetti Code Liberec, 6.10.2015 30

Page 31: GDGSCL - Docker a jeho provoz v Heroku a AWS

Kinematic4 desktop GUI for Docker

4 Mac and Windows only

GDG Spaghetti Code Liberec, 6.10.2015 31

Page 32: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker Trusted Registry (DTR)4 private dedicated image registry

GDG Spaghetti Code Liberec, 6.10.2015 32

Page 33: GDGSCL - Docker a jeho provoz v Heroku a AWS

Yours private registry4 storage at S3

docker run \ -d \ -p 5000:5000 \ --restart=always \ --name registry \ registry:2

GDG Spaghetti Code Liberec, 6.10.2015 33

Page 34: GDGSCL - Docker a jeho provoz v Heroku a AWS

Open Container ekosystem 1

1 https://www.mindmeister.com/389671722/open-container-ecosystem-formerly-docker-ecosystem

GDG Spaghetti Code Liberec, 6.10.2015 34

Page 35: GDGSCL - Docker a jeho provoz v Heroku a AWS

GDG Spaghetti Code Liberec, 6.10.2015 35

Page 36: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker at Herokuheroku plugins:install heroku-docker

4 https://gist.github.com/abtris/6aca9b2668b8b5af0208

4 app.json must contain:

{ image: heroku/nodejs }

4 app.json specification

GDG Spaghetti Code Liberec, 6.10.2015 36

Page 37: GDGSCL - Docker a jeho provoz v Heroku a AWS

Dockerfile - heroku/nodejs# Inherit from Heroku's stackFROM heroku/cedar:14

# Internally, we arbitrarily use port 3000ENV PORT 3000# Which version of node?ENV NODE_ENGINE 0.12.2# Locate our binariesENV PATH /app/heroku/node/bin/:/app/user/node_modules/.bin:$PATH

# Create some needed directoriesRUN mkdir -p /app/heroku/node /app/.profile.dWORKDIR /app/user

# Install nodeRUN curl -s https://s3pository.heroku.com/node/v$NODE_ENGINE/node-v$NODE_ENGINE-linux-x64.tar.gz | \ tar --strip-components=1 -xz -C /app/heroku/node

# Export the node path in .profile.dRUN echo "export PATH=\"/app/heroku/node/bin:/app/user/node_modules/.bin:\$PATH\"" > \ /app/.profile.d/nodejs.sh

ONBUILD ADD package.json /app/user/ONBUILD RUN /app/heroku/node/bin/npm installONBUILD ADD . /app/user/

GDG Spaghetti Code Liberec, 6.10.2015 37

Page 38: GDGSCL - Docker a jeho provoz v Heroku a AWS

Create Dockerfile

heroku docker:init

$ cat Dockerfile

FROM heroku/nodejs

GDG Spaghetti Code Liberec, 6.10.2015 38

Page 39: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker composeweb: build: . command: 'bash -c ''node index.js''' working_dir: /app/user environment: PORT: 8080 ports: - '8080:8080'shell: build: . command: bash working_dir: /app/user environment: PORT: 8080 ports: - '8080:8080' volumes: - '.:/app/user'

GDG Spaghetti Code Liberec, 6.10.2015 39

Page 40: GDGSCL - Docker a jeho provoz v Heroku a AWS

Start development environment

$ docker-compose up web

Building web......

$ curl "http://$(docker-machine ip dev):8080"

GDG Spaghetti Code Liberec, 6.10.2015 40

Page 41: GDGSCL - Docker a jeho provoz v Heroku a AWS

Rebuild containers

Changes to your app and config.

docker-compose build

GDG Spaghetti Code Liberec, 6.10.2015 41

Page 42: GDGSCL - Docker a jeho provoz v Heroku a AWS

Heroku Release$ heroku create...$ heroku docker:release...$ heroku open

GDG Spaghetti Code Liberec, 6.10.2015 42

Page 43: GDGSCL - Docker a jeho provoz v Heroku a AWS

Demo

GDG Spaghetti Code Liberec, 6.10.2015 43

Page 44: GDGSCL - Docker a jeho provoz v Heroku a AWS

AWS Release$ docker build -t abtris/docker-liberec-example-app...$ docker push abtris/docker-liberec-example-app...$ docker pull abtris/docker-liberec-example-app...

GDG Spaghetti Code Liberec, 6.10.2015 44

Page 45: GDGSCL - Docker a jeho provoz v Heroku a AWS

Run on AWS$ docker run \ -d \ -p 3000:3000 \ abtris/docker-liberec-example-app \ node index.js

$ curl http://localhost:3000

GDG Spaghetti Code Liberec, 6.10.2015 45

Page 46: GDGSCL - Docker a jeho provoz v Heroku a AWS

Demo

GDG Spaghetti Code Liberec, 6.10.2015 46

Page 47: GDGSCL - Docker a jeho provoz v Heroku a AWS

Docker & AWS4 Elastic Beanstalk

4 EC2 Container Service (ECS)

4 EC2 with Swarm, Mesos or Kubernetes

GDG Spaghetti Code Liberec, 6.10.2015 47

Page 48: GDGSCL - Docker a jeho provoz v Heroku a AWS

Questions?

GDG Spaghetti Code Liberec, 6.10.2015 48

Page 49: GDGSCL - Docker a jeho provoz v Heroku a AWS

Credits4 boat-containers.jpg 2

4 computer-scrap.jpg [^3]

4 vm-vs-docker.png [^4]

4 docker logos [^5]

4 formule_one.jpg [^6]

2 https://www.flickr.com/photos/41864721@N00/3451530961/[^3]: https://www.flickr.com/photos/7362086@N02/2019666131/[^4]: http://www.jayway.com/wp-content/uploads/2015/03/vm-vs-docker.png[^5]: https://www.docker.com/brand-guidelines

GDG Spaghetti Code Liberec, 6.10.2015 49