GDGSCL - Docker a jeho provoz v Heroku a AWS

  • View
    1.273

  • Download
    0

  • Category

    Software

Preview:

Citation preview

DockerBuild, Ship and Run

GDG Spaghetti Code Liberec, 6.10.2015 1

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

GDG Spaghetti Code Liberec, 6.10.2015 3

What's Docker?

GDG Spaghetti Code Liberec, 6.10.2015 4

Analogyfrom

logistics

GDG Spaghetti Code Liberec, 6.10.2015 5

Goods, wares

GDG Spaghetti Code Liberec, 6.10.2015 6

Containers

GDG Spaghetti Code Liberec, 6.10.2015 7

Why Docker?

GDG Spaghetti Code Liberec, 6.10.2015 8

Fastand

scalableGDG Spaghetti Code Liberec, 6.10.2015 9

Build once,run anywhere

GDG Spaghetti Code Liberec, 6.10.2015 10

Configure once, run anywhere

GDG Spaghetti Code Liberec, 6.10.2015 11

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

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

Docker Engine

GDG Spaghetti Code Liberec, 6.10.2015 14

Docker Engine

GDG Spaghetti Code Liberec, 6.10.2015 15

VM vs Docker

GDG Spaghetti Code Liberec, 6.10.2015 16

Containers and imagesdocker run hello-world

GDG Spaghetti Code Liberec, 6.10.2015 17

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

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

Docker lifecycle

GDG Spaghetti Code Liberec, 6.10.2015 20

Container lifecycle

GDG Spaghetti Code Liberec, 6.10.2015 21

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

DockerHub

GDG Spaghetti Code Liberec, 6.10.2015 23

GDG Spaghetti Code Liberec, 6.10.2015 24

Docker tools

GDG Spaghetti Code Liberec, 6.10.2015 25

Docker compose

4 defining and running multi-container applications with Docker

GDG Spaghetti Code Liberec, 6.10.2015 26

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

GDG Spaghetti Code Liberec, 6.10.2015 27

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

Demo

GDG Spaghetti Code Liberec, 6.10.2015 29

Docker swarm

4 Docker Swarm is native clustering for Docker.

GDG Spaghetti Code Liberec, 6.10.2015 30

Kinematic4 desktop GUI for Docker

4 Mac and Windows only

GDG Spaghetti Code Liberec, 6.10.2015 31

Docker Trusted Registry (DTR)4 private dedicated image registry

GDG Spaghetti Code Liberec, 6.10.2015 32

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

Open Container ekosystem 1

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

GDG Spaghetti Code Liberec, 6.10.2015 34

GDG Spaghetti Code Liberec, 6.10.2015 35

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

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

Create Dockerfile

heroku docker:init

$ cat Dockerfile

FROM heroku/nodejs

GDG Spaghetti Code Liberec, 6.10.2015 38

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

Start development environment

$ docker-compose up web

Building web......

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

GDG Spaghetti Code Liberec, 6.10.2015 40

Rebuild containers

Changes to your app and config.

docker-compose build

GDG Spaghetti Code Liberec, 6.10.2015 41

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

GDG Spaghetti Code Liberec, 6.10.2015 42

Demo

GDG Spaghetti Code Liberec, 6.10.2015 43

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

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

Demo

GDG Spaghetti Code Liberec, 6.10.2015 46

Docker & AWS4 Elastic Beanstalk

4 EC2 Container Service (ECS)

4 EC2 with Swarm, Mesos or Kubernetes

GDG Spaghetti Code Liberec, 6.10.2015 47

Questions?

GDG Spaghetti Code Liberec, 6.10.2015 48

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