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

The Quest for the Holy Grail of Continuous Delivery

spiddy
October 04, 2014

The Quest for the Holy Grail of Continuous Delivery

Continuous Delivery of Node.JS Apps With Docker from Scratch to Production.

Presented at:
- #wenode event http://wenode.barcelonajs.org/speaker/dimitris-kapanidis.html
- #scbcn14 event https://github.com/JavierCane/Software-Craftsmanship-Barcelona-2014

spiddy

October 04, 2014
Tweet

More Decks by spiddy

Other Decks in Technology

Transcript

  1. View Slide

  2. Dimitris Kapanidis
    @spiddy
    https://github.com/spiddy
    docker-barcelona-spain
    https://www.linkedin.com/in/kapanidis
    .io

    View Slide

  3. Discover, compose & deploy container stacks in your cloud
    Simple docker hosting, built for developers.
    .io
    wordpress:
    image: wordpress:4.1.0
    ports:
    - “80”
    links:
    - mysql
    mysql:
    image: orchardup/mysql
    environment:
    - MYSQL_DATABASE=wordpress
    mysql
    wordpress
    Stackfile / fig.yml

    View Slide

  4. What is Docker?

    View Slide

  5. Docker Intro
    Photo Credit Weasly Grizzly at Pixeljoint

    View Slide

  6. Docker is an open
    platform for developers
    and sysadmins to build,
    ship, and run
    distributed applications

    View Slide

  7. Docker
    Virtual Machines

    View Slide

  8. Develop your App
    Ship your App
    myapp

    View Slide

  9. myapp
    Dockerfile
    FROM ubuntu:12.04
    RUN apt­get ­y install ruby
    ADD . /app/
    EXPOSE 3000
    CMD rails server
    Base Image
    Install Dependencies
    Add Files to Container
    Expose Port
    Launch Command

    View Slide

  10. Scale your App
    myapp
    myapp
    myapp
    myapp
    myapp
    myapp
    myapp
    myapp
    myapp
    myapp
    myapp
    myapp
    myapp
    myapp

    View Slide

  11. View Slide

  12. Index

    Process Workflow

    Production Topology

    Bootstrap a Mean.io Project

    Dockerize

    CI Build Test & Deploy

    CI Backup & Monitor

    View Slide

  13. Process Workflow
    Developer
    push
    trigger execute
    Production
    deploy
    test
    build

    View Slide

  14. db
    Production Topology
    proxy
    web
    web
    users

    View Slide

  15. Bootstrap Mean.io Project
    > npm install ­g meanio
    > mean init wenode

    View Slide

  16. Launch locally
    > npm install
    > grunt

    View Slide

  17. Execute Tests
    > grunt test

    View Slide

  18. > git remote add origin ...
    > git push origin
    Version Control (GitHub)

    View Slide

  19. Create Jenkins Server (Harbur)

    View Slide

  20. Create Jenkins Server (Harbur)

    View Slide

  21. Create Jenkins Server (Harbur)

    View Slide

  22. Jenkins: Create New Job

    View Slide

  23. Jenkins: Configure Job

    View Slide

  24. Jenkins: Build Now
    npm not found

    View Slide

  25. Add Dockerfile

    View Slide

  26. Build Container
    > docker build ­t spiddy/wenode .
    web

    View Slide

  27. Run Container (Fail Database)
    > docker run spiddy/wenode
    web
    Could not connect to MongoDB

    View Slide

  28. Find localhost IP on Docker
    web

    View Slide

  29. Configure Database IP
    web

    View Slide

  30. Run Container
    web
    > docker run ­p 3000:3000
    spiddy/wenode

    View Slide

  31. web
    Run Container
    > docker run ­p 3000:3000
    spiddy/wenode

    View Slide

  32. db
    Add fig.yml
    web

    View Slide

  33. db
    Configure Database
    web

    View Slide

  34. Run Containers
    db
    web
    > fig up

    View Slide

  35. db
    web
    Run Containers
    > fig up

    View Slide

  36. Job: Bootstrap Production
    db
    proxy
    fs
    docker run -d -p 8080 -v /var/run/docker.sock:/tmp/docker.sock -t jwilder/nginx-proxy
    docker run –name wenode_data busybox true
    docker run -d -p 27017 –name db mongo:2.7.6

    View Slide

  37. Job: Build wenode

    View Slide

  38. Job: Build wenode

    View Slide

  39. Job: Build wenode output

    View Slide

  40. Job: Test wenode

    View Slide

  41. Job: Test wenode output

    View Slide

  42. Job: Deploy wenode

    View Slide

  43. Deploy wenode output

    View Slide

  44. GitHub Webhook

    View Slide

  45. Process Workflow
    Developer
    push
    trigger execute
    Production
    deploy
    test
    build

    View Slide

  46. db
    Production Topology
    proxy
    web
    web
    users

    View Slide

  47. Alternative Topology
    users
    web db
    db
    web
    proxy

    View Slide

  48. Backup Process
    backup
    danhixon/backup­base
    1 32 0
    docker run --rm --link db:mongodb \
    -e AWS_ACCESS_KEY_ID=xxx
    -e AWS_SECRET_ACCESS_KEY=xxx \
    docker-backup-mongodb backup perform -t daily_mongodb

    View Slide

  49. Backup Process Config

    View Slide

  50. Backup Process Triggers

    View Slide

  51. Backup Process Diagram
    backup
    Dump db
    Encrypt
    Upload to S3
    Amazon
    S3
    backup
    Restore db
    Decrypt
    Download from S3
    db
    private
    public

    View Slide

  52. Monitoring Process
    google/cadvisor
    21 486495 0

    View Slide

  53. Alert Process
    execute
    heartbeat
    Production

    View Slide

  54. Thank You

    View Slide