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

Why containerise your life ?

Why containerise your life ?

A look at the different ways teams use Docker and different solutions to solve issues like state, schedulers and CD/CI process.

Scott Coulton

August 16, 2016
Tweet

More Decks by Scott Coulton

Other Decks in Technology

Transcript

  1. The agenda • So you decided to use containers •

    The pitfalls of starting to use containers • We have the solution to that problem • Is this ready for production ? • Enter Puppet
  2. About me ….. Solution Architect And Platform engineering lead Docker

    Captain https://www.docker.com/community/docker-captains Author of Puppet for containerization and https://scottydoesntknow.io/
  3. The devil does not change, he changes you Quote “The

    Joker, Batman 1989” This quote is so relevant when starting out with containers. If you want to be successful you have to change the way you think about solutions, your operational processes and CD/CI pipelines. Trying to fit old solution methodology will cause you technical debt.
  4. Where do you start ? So there is a lot

    of buzz around containers at the moment. So why should you spend the time and money to move your applications to containers ? We will answer this question from three different perspectives • The Dev • Infrastructure • The business
  5. The dev Why would Dev’s want to use containers ?

    • Quick build times • Run code locally that is the same code as production • More efficient unit test cycles • The container becomes the artifact • Makes the CD/CI process simple
  6. Infrastructure So what about the infra guys and girls ?

    • The application is abstract from the host operating system • In true ‘devops’, it’s infra as code • It creates a collaborative environment • Brings down operational overhead • Makes the CD/CI process simple
  7. The business It’s all about the bottom dollar, so how

    do we justify the change • Collaboration breeds efficiency • Increased quality of releases • Containers are platform agnostic • Language agnostic
  8. Where do we start Now we see the benefits, where

    do we start ? • Pick a small application or service • Make sure it works • Gain business trust
  9. It can’t be all fairy floss and rainbows Now we

    have a few ideas of services or apps to containerise. What real world issues will come up. • Do we run 1 container per compute resource • Where does our data or state reside • How do we handle failures • What about the way my data is structured
  10. Do we run 1 container per compute resource ? If

    we run containers 1:1 with compute resources what’s the point ? • So we need a solution to scale That word ‘scale’ needs to be defined • Are we talking on the same compute resource • Does this mean across AZ’s • What about completely different datacentres What about application routing within a compute resource ?
  11. Where does our data or state reside ? Containers and

    stateless services are like a mirage in heaven. Unfortunately not all applications can be stateless. So how do we handle this ? • Should the data live inside the container • Maybe map a drive to the compute resource • Can we split the compute from the state
  12. How do we handle failures What happens to application failure

    within a container ? • How can we design for failure • What measures can we put in place to prevent failure • Can we auto heal containers
  13. How do I structure my data There are so many

    moving parts to building an image, creating the container and the release process. • What configuration lives where • How can I test my container • With so many parts what does my source control structure look like
  14. This is how we scale So let’s define scale !!!

    For the same for the same compute node we have to following options • Docker Compose https://docs.docker.com/compose/
  15. This is how we scale For more complex scaling needs

    like across multiple compute nodes or AZ’s. We would use a container scheduler. • Docker Swarm https://docs.docker.com/swarm/ • Google’s Kubernetes http://kubernetes.io/ • Apache Mesos https://mesos.apache.org/ • Hashicorp Nomad https://www.nomadproject.io/ Another good note is configuration management Is your friend !!!!
  16. Our data is safe If we need to give our

    state to our container applications. We have options depending on our design choices • Kubernetes http://kubernetes.io/docs/user-guide/volumes/ • Flocker https://clusterhq.com/flocker/introduction/
  17. This is how we protect ourselves from failure Service discovery

    is the backbone to our container schedulers. Service discovery dynamically updates the locations of our containers as they move between compute nodes. • Consul https://www.consul.io/ • Etcd https://coreos.com/etcd/
  18. How is my data structured Dockerfile • Base configurations for

    the container • Arguments for runtime • Live in it’s own git repo Run time • Volume, CPU, Mem constraints • Runtime args • Name of container
  19. How is my data structured CD/CI • Unit test should

    live with the Dockerfile Unit test can be written in various languages. • Golang • Ruby • Python
  20. The Blueshift Project Because Puppet is a common language for

    delivering and operating modern infrastructure, organizations that rely on Puppet find it easier to adopt new technologies. Project Blueshift represents Puppet's engagement with our community as well as with leading-edge technologies like Docker, Kubernetes and Mesos, and their communities to make it possible to use Puppet to provide and manage next generation software in a simple, reliable, and consistent way.
  21. The Code Install Nginx nginx::resource::upstream { 'puppet_rack_app': members => [

    'localhost:3000', 'localhost:3001', 'localhost:3002', ], } nginx::resource::vhost { 'rack.puppetlabs.com': proxy => 'http://puppet_rack_app', }
  22. The Code Install Docker class { 'docker': tcp_bind => ['tcp://127.0.0.1:4243','tcp://10.0.0.1:4243'],

    socket_bind => 'unix:///var/run/docker.sock', ip_forward => true, iptables => true, ip_masq => true, bridge => br0, fixed_cidr => '10.20.1.0/24', default_gateway => '10.20.0.1', }
  23. The Code It’s the same Puppet code that you already

    know. One language to configure whatever you need !!! Now that’s winning !!!!