SlideShare a Scribd company logo
1 of 63
doing the old thing the new way 
by @rafecolton
brief prologue 
“rafe” (rafecolton on the internets) 
software engineer, platform @ modcloth 
using docker in prod since v0.7.0 
*todo: explain “doing the old thing the new way”
obligatory slide with a bunch of logos
the stack that was
the stack that was
the stack that was
the stack that would be
motivations 
• simplify application architecture 
• support a variety of application languages 
• make provisioning and deployment more accessible
motivations 
• simplify application architecture 
• support a variety of application languages 
• make provisioning and deployment more accessible 
goals 
• push-button provisioning and deployment 
• consolidated, pluggable platform 
• move to linux
motivations 
• simplify application architecture 
• support a variety of application languages 
• make provisioning and deployment more accessible 
goals 
• push-button provisioning and deployment 
• consolidated, pluggable platform 
• move to linux 
bonus points 
• chatops 
• actual button for provisioning and deployment
motivations 
goals 
bonus points 
• chatops 
• actual button for provisioning and deployment 
does docker 
facilitate such a 
solution? 
• simplify application architecture 
• support a variety of application languages 
• make provisioning and deployment more accessible 
• push-button provisioning and deployment 
• consolidated, pluggable platform 
• move to linux
the stack that would be
case study: modcloth.com/style-gallery 
Clear and Simple Statement.
case study: modcloth.com/style-gallery
case study: modcloth.com/style-gallery
case study: modcloth.com/style-gallery 
webserver 
nginx ruby 
smartos 
rails
case study: modcloth.com/style-gallery 
webserver workers 
nginx ruby 
smartos 
rails 
sidekiq 
cron ruby 
smartos 
rails
case study: modcloth.com/style-gallery 
webserver 
nginx ruby 
smartos 
rails 
sidekiq 
workers 
cron ruby 
smartos 
rails 
how complex could it be?
case study: modcloth.com/style-gallery 
webserver 
rails 
ruby nginx 
docker 
ubuntu
case study: modcloth.com/style-gallery 
webserver 
rails 
ruby nginx 
docker 
ubuntu 
cron
case study: modcloth.com/style-gallery 
webserver 
rails 
ruby nginx 
docker 
ubuntu 
cron 
supervisord
case study: modcloth.com/style-gallery 
webserver 
rails 
ruby nginx 
docker 
ubuntu 
cron 
supervisord 
sidekiq 
workers 
rails
case study: modcloth.com/style-gallery 
webserver 
rails 
ruby nginx 
cron 
supervisord 
docker 
ubuntu 
sidekiq 
workers 
rails 
nad 
nodejs rsyslogd 
sshd
challenges 
• overall complexity 
• maintainability 
• image consistency 
• container reliability 
• log aggregation 
• monitoring
challenges 
• overall complexity 
• maintainability 
• image consistency 
• container reliability 
• log aggregation 
• monitoring 
lessons 
• don’t do the new thing the old way 
• consider division of responsibility
case study: modcloth.com/style-gallery 
webserver 
rails 
ruby 
rails 
docker cron 
ubuntu 
nginx 
sidekiq 
workers 
ruby 
nad 
nodejs rsyslogd
the stack
observations 
docker is an excellent packaging and distribution system
observations 
docker is an excellent packaging and distribution system 
containers are the canonical building block for a continuous delivery pipeline
begin github search… 
projects for orchestrating containers: 
• docker/fig 
• deis/deis 
• flynn/flynn 
• coreos/fleet 
• ansible/ansible 
• opscode/chef 
• progrium/dokku 
• newrelic/centurion
begin github search… 
• docker/fig 
• deis/deis 
• flynn/flynn 
• coreos/fleet 
• ansible/ansible 
• opscode/chef 
• progrium/dokku 
• newrelic/centurion 
• mesosphere/marathon 
• airbnb/chronos 
• GoogleCloudPlatform/kubernetes 
• openshift/geard 
• VoltFramework/volt 
projects for orchestrating containers:
• docker/fig 
• deis/deis 
• flynn/flynn 
• coreos/fleet 
• ansible/ansible 
• opscode/chef 
• progrium/dokku 
• newrelic/centurion 
• mesosphere/marathon 
• airbnb/chronos 
• GoogleCloudPlatform/kubernetes 
• openshift/geard 
• VoltFramework/volt 
• octohost/octohost 
• makeusabrew/decking 
• signalfuse/maestro-ng 
• shipyard/shipyard 
• DevTable/gantryd 
• mcuadros/dockership 
• longshoreman/longshoreman 
• marmelab/gaudi 
• etc. 
begin github search… 
projects for orchestrating containers:
begin github search… 
projects for building containers: 
• rafecolton/docker-builder 
• mitchellh/packer 
• swipely/dockly 
• ???
observation 
everybody is building containers differently.
observation 
everybody is building containers differently. 
how do we build production-ready containers?
writing a good Dockerfile 
lesson 0: getting started
writing a good Dockerfile 
lesson 0: getting started use a docker hub base
writing a good Dockerfile 
lesson 0: getting started 
set your env
writing a good Dockerfile 
lesson 1: order matters 
deps before bundling
writing a good Dockerfile 
lesson 1: order matters 
ADD only Gemfile* first
writing a good Dockerfile 
lesson 1: order matters 
`ADD .` as late as possible
writing a good Dockerfile 
lesson 2: optimize for size, repeatability 
combine RUN commands 
whenever possible
writing a good Dockerfile 
lesson 2: optimize for size, repeatability 
RUN dependent 
steps together
writing a good Dockerfile 
lesson 3: use a standard entrypoint 
use a *simple* 
entrypoint script
writing a good Dockerfile 
lesson 3: use a standard entrypoint 
operate on docker-specific 
environment variables
writing a good Dockerfile 
lesson 3: use a standard entrypoint 
wrap verbose 
CMD options
writing a good Dockerfile 
lesson 3: use a standard entrypoint 
exec "$@" # give yourself a shell
the image development lifecycle 
build 
*type things* push 
tag
the image development lifecycle 
> docker build -t myapp:latest . 
> export latest="$(docker images | grep myapp:latest | head -n 1 | awk '{print $3}’)" 
> docker tag $latest "$(git rev-parse -q HEAD)" # sha 
> docker tag $latest "$(git describe --always --dirty --tags)" # tag 
> docker tag $latest "$(git rev-parse -q --abbrev-ref HEAD)" # branch 
> for image in $(docker images | grep myapp | awk '{print $1 ":" $2}' | head -n 4) ;  
push 
do docker push $image ; done 
build 
tag 
*type things*
the image development lifecycle: docker-builder 
push 
build 
tag 
> docker-builder build . 
*type things*
teh pipeline 
docker build 
server* 
app 
app 
app 
app 
*https://github.com/rafecolton/docker-builder
conclusion 
building containers is like writing ruby code:
conclusion 
building containers is like writing ruby code: 
it’s easy to do 
it’s hard to do correctly
so what did we learn? (or, through what did you sleep?) 
stuff: 
• the complexity will come naturally (so don’t force it) 
• be intentional about your Dockerfile
so what did we learn? (or, through what did you sleep?) 
stuff: 
• the complexity will come naturally (so don’t force it) 
• be intentional about your Dockerfile 
• docker is an excellent packaging and distribution system 
• containers are the canonical building blocks
so what did we learn? (or, through what did you sleep?) 
stuff: 
• the complexity will come naturally (so don’t force it) 
• be intentional about your Dockerfile 
• docker is an excellent packaging and distribution system 
• containers are the canonical building blocks 
• consider division of responsibility between the host and the container 
• don’t do the new thing the old way (do the old thing the new way!)
brief epilogue 
goal: move to linux 
=> all apps (less one) now employing docker/ansible/linux
brief epilogue 
goal: move to linux 
=> all apps (less one) now employing docker/ansible/linux 
goal: consolidated, pluggable platform 
=> shared monitoring, log aggregation, & load balancing services
brief epilogue 
goal: move to linux 
=> all apps (less one) now employing docker/ansible/linux 
goal: consolidated, pluggable platform 
=> shared monitoring, log aggregation, & load balancing services 
goal: push-button provisioning and deployment 
=> it works, minimal magic… and it’s well documented
brief epilogue 
goal: move to linux 
=> all apps (less one) now employing docker/ansible/linux 
goal: consolidated, pluggable platform 
=> shared monitoring, log aggregation, & load balancing services 
goal: push-button provisioning and deployment 
=> it works, minimal magic… and it’s well documented 
could easily be maintained by only two people… dun dun dun
brief epilogue 
I’m job hunting…
brief epilogue 
I’m job hunting… 
…and I haven’t shot anything yet. 
so if you’re hiring, come talk to me after the show. 
twitter: @rafecolton 
github: rafecolton 
rafecolton.com
thank you

More Related Content

What's hot

Docker 101 @KACST Saudi HPC 2016
Docker 101  @KACST Saudi HPC 2016Docker 101  @KACST Saudi HPC 2016
Docker 101 @KACST Saudi HPC 2016Walid Shaari
 
Dockerize the World - presentation from Hradec Kralove
Dockerize the World - presentation from Hradec KraloveDockerize the World - presentation from Hradec Kralove
Dockerize the World - presentation from Hradec Kralovedamovsky
 
7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins UsersJules Pierre-Louis
 
Docker - From Walking To Running
Docker - From Walking To RunningDocker - From Walking To Running
Docker - From Walking To RunningGiacomo Vacca
 
Docker Continuous Delivery Workshop
Docker Continuous Delivery WorkshopDocker Continuous Delivery Workshop
Docker Continuous Delivery WorkshopJirayut Nimsaeng
 
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...Docker, Inc.
 
Docker in production: reality, not hype (OSCON 2015)
Docker in production: reality, not hype (OSCON 2015)Docker in production: reality, not hype (OSCON 2015)
Docker in production: reality, not hype (OSCON 2015)bridgetkromhout
 
Continuous Integration and Kamailio
Continuous Integration and KamailioContinuous Integration and Kamailio
Continuous Integration and KamailioGiacomo Vacca
 
Automate App Container Delivery with CI/CD and DevOps
Automate App Container Delivery with CI/CD and DevOpsAutomate App Container Delivery with CI/CD and DevOps
Automate App Container Delivery with CI/CD and DevOpsDaniel Oh
 
Deployment Automation with Docker
Deployment Automation with DockerDeployment Automation with Docker
Deployment Automation with DockerEgor Pushkin
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewireIntroduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewiredotCloud
 
(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines(Declarative) Jenkins Pipelines
(Declarative) Jenkins PipelinesSteffen Gebert
 
Rapid Development With Docker Compose
Rapid Development With Docker ComposeRapid Development With Docker Compose
Rapid Development With Docker ComposeJustin Crown
 
Lessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionLessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionShingo Omura
 
Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Jérôme Petazzoni
 
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...Docker, Inc.
 
Docker Container As A Service - JAX 2016
Docker Container As A Service - JAX 2016Docker Container As A Service - JAX 2016
Docker Container As A Service - JAX 2016Patrick Chanezon
 
Docker in development (Story)
Docker in development (Story)Docker in development (Story)
Docker in development (Story)Quan Nguyen
 

What's hot (20)

Docker 101 @KACST Saudi HPC 2016
Docker 101  @KACST Saudi HPC 2016Docker 101  @KACST Saudi HPC 2016
Docker 101 @KACST Saudi HPC 2016
 
Dockerize the World - presentation from Hradec Kralove
Dockerize the World - presentation from Hradec KraloveDockerize the World - presentation from Hradec Kralove
Dockerize the World - presentation from Hradec Kralove
 
7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users
 
Docker - From Walking To Running
Docker - From Walking To RunningDocker - From Walking To Running
Docker - From Walking To Running
 
Docker Continuous Delivery Workshop
Docker Continuous Delivery WorkshopDocker Continuous Delivery Workshop
Docker Continuous Delivery Workshop
 
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
 
Docker in production: reality, not hype (OSCON 2015)
Docker in production: reality, not hype (OSCON 2015)Docker in production: reality, not hype (OSCON 2015)
Docker in production: reality, not hype (OSCON 2015)
 
Continuous Integration and Kamailio
Continuous Integration and KamailioContinuous Integration and Kamailio
Continuous Integration and Kamailio
 
Automate App Container Delivery with CI/CD and DevOps
Automate App Container Delivery with CI/CD and DevOpsAutomate App Container Delivery with CI/CD and DevOps
Automate App Container Delivery with CI/CD and DevOps
 
Deployment Automation with Docker
Deployment Automation with DockerDeployment Automation with Docker
Deployment Automation with Docker
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewireIntroduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
 
Docker From Scratch
Docker From ScratchDocker From Scratch
Docker From Scratch
 
A Hands-on Introduction to Docker
A Hands-on Introduction to DockerA Hands-on Introduction to Docker
A Hands-on Introduction to Docker
 
(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines
 
Rapid Development With Docker Compose
Rapid Development With Docker ComposeRapid Development With Docker Compose
Rapid Development With Docker Compose
 
Lessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionLessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In Production
 
Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?
 
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
 
Docker Container As A Service - JAX 2016
Docker Container As A Service - JAX 2016Docker Container As A Service - JAX 2016
Docker Container As A Service - JAX 2016
 
Docker in development (Story)
Docker in development (Story)Docker in development (Story)
Docker in development (Story)
 

Similar to Doing the Old Thing the New Way with Docker Containers

Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureAdrian Otto
 
Docker module 1
Docker module 1Docker module 1
Docker module 1Liang Bo
 
Docker for Dummies
Docker for DummiesDocker for Dummies
Docker for DummiesRoel Hartman
 
ExpoQA 2017 Using docker to build and test in your laptop and Jenkins
ExpoQA 2017 Using docker to build and test in your laptop and JenkinsExpoQA 2017 Using docker to build and test in your laptop and Jenkins
ExpoQA 2017 Using docker to build and test in your laptop and JenkinsElasTest Project
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 applicationRoman Rodomansky
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'acorehard_by
 
Docker and Puppet for Continuous Integration
Docker and Puppet for Continuous IntegrationDocker and Puppet for Continuous Integration
Docker and Puppet for Continuous IntegrationGiacomo Vacca
 
Dockerize the World
Dockerize the WorldDockerize the World
Dockerize the Worlddamovsky
 
DCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development PipelineDCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development PipelineDocker, Inc.
 
Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !Anthony Dahanne
 
Up and running with docker
Up and running with dockerUp and running with docker
Up and running with dockerMichelle Liu
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsMicael Gallego
 
Build and run applications in a dockerless kubernetes world
Build and run applications in a dockerless kubernetes worldBuild and run applications in a dockerless kubernetes world
Build and run applications in a dockerless kubernetes worldJorge Morales
 
Docker 101 Workshop slides (JavaOne 2017)
Docker 101 Workshop slides (JavaOne 2017)Docker 101 Workshop slides (JavaOne 2017)
Docker 101 Workshop slides (JavaOne 2017)Eric Smalling
 

Similar to Doing the Old Thing the New Way with Docker Containers (20)

Docker, what's next ?
Docker, what's next ?Docker, what's next ?
Docker, what's next ?
 
Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable Infrastructure
 
Docker module 1
Docker module 1Docker module 1
Docker module 1
 
Docker for Dummies
Docker for DummiesDocker for Dummies
Docker for Dummies
 
ExpoQA 2017 Using docker to build and test in your laptop and Jenkins
ExpoQA 2017 Using docker to build and test in your laptop and JenkinsExpoQA 2017 Using docker to build and test in your laptop and Jenkins
ExpoQA 2017 Using docker to build and test in your laptop and Jenkins
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
 
Docker 2014
Docker 2014Docker 2014
Docker 2014
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'a
 
Containerization using docker and its applications
Containerization using docker and its applicationsContainerization using docker and its applications
Containerization using docker and its applications
 
Containerization using docker and its applications
Containerization using docker and its applicationsContainerization using docker and its applications
Containerization using docker and its applications
 
Docker and Puppet for Continuous Integration
Docker and Puppet for Continuous IntegrationDocker and Puppet for Continuous Integration
Docker and Puppet for Continuous Integration
 
Dockerize the World
Dockerize the WorldDockerize the World
Dockerize the World
 
DCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development PipelineDCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development Pipeline
 
Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !
 
Docker presentation
Docker presentationDocker presentation
Docker presentation
 
Up and running with docker
Up and running with dockerUp and running with docker
Up and running with docker
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
Build and run applications in a dockerless kubernetes world
Build and run applications in a dockerless kubernetes worldBuild and run applications in a dockerless kubernetes world
Build and run applications in a dockerless kubernetes world
 
Docker 101 Workshop slides (JavaOne 2017)
Docker 101 Workshop slides (JavaOne 2017)Docker 101 Workshop slides (JavaOne 2017)
Docker 101 Workshop slides (JavaOne 2017)
 
Docker tips
Docker tipsDocker tips
Docker tips
 

Recently uploaded

Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 

Recently uploaded (20)

Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 

Doing the Old Thing the New Way with Docker Containers

  • 1. doing the old thing the new way by @rafecolton
  • 2. brief prologue “rafe” (rafecolton on the internets) software engineer, platform @ modcloth using docker in prod since v0.7.0 *todo: explain “doing the old thing the new way”
  • 3. obligatory slide with a bunch of logos
  • 7. the stack that would be
  • 8. motivations • simplify application architecture • support a variety of application languages • make provisioning and deployment more accessible
  • 9. motivations • simplify application architecture • support a variety of application languages • make provisioning and deployment more accessible goals • push-button provisioning and deployment • consolidated, pluggable platform • move to linux
  • 10. motivations • simplify application architecture • support a variety of application languages • make provisioning and deployment more accessible goals • push-button provisioning and deployment • consolidated, pluggable platform • move to linux bonus points • chatops • actual button for provisioning and deployment
  • 11. motivations goals bonus points • chatops • actual button for provisioning and deployment does docker facilitate such a solution? • simplify application architecture • support a variety of application languages • make provisioning and deployment more accessible • push-button provisioning and deployment • consolidated, pluggable platform • move to linux
  • 12. the stack that would be
  • 13. case study: modcloth.com/style-gallery Clear and Simple Statement.
  • 16. case study: modcloth.com/style-gallery webserver nginx ruby smartos rails
  • 17. case study: modcloth.com/style-gallery webserver workers nginx ruby smartos rails sidekiq cron ruby smartos rails
  • 18. case study: modcloth.com/style-gallery webserver nginx ruby smartos rails sidekiq workers cron ruby smartos rails how complex could it be?
  • 19. case study: modcloth.com/style-gallery webserver rails ruby nginx docker ubuntu
  • 20. case study: modcloth.com/style-gallery webserver rails ruby nginx docker ubuntu cron
  • 21. case study: modcloth.com/style-gallery webserver rails ruby nginx docker ubuntu cron supervisord
  • 22. case study: modcloth.com/style-gallery webserver rails ruby nginx docker ubuntu cron supervisord sidekiq workers rails
  • 23. case study: modcloth.com/style-gallery webserver rails ruby nginx cron supervisord docker ubuntu sidekiq workers rails nad nodejs rsyslogd sshd
  • 24. challenges • overall complexity • maintainability • image consistency • container reliability • log aggregation • monitoring
  • 25. challenges • overall complexity • maintainability • image consistency • container reliability • log aggregation • monitoring lessons • don’t do the new thing the old way • consider division of responsibility
  • 26. case study: modcloth.com/style-gallery webserver rails ruby rails docker cron ubuntu nginx sidekiq workers ruby nad nodejs rsyslogd
  • 28. observations docker is an excellent packaging and distribution system
  • 29. observations docker is an excellent packaging and distribution system containers are the canonical building block for a continuous delivery pipeline
  • 30. begin github search… projects for orchestrating containers: • docker/fig • deis/deis • flynn/flynn • coreos/fleet • ansible/ansible • opscode/chef • progrium/dokku • newrelic/centurion
  • 31. begin github search… • docker/fig • deis/deis • flynn/flynn • coreos/fleet • ansible/ansible • opscode/chef • progrium/dokku • newrelic/centurion • mesosphere/marathon • airbnb/chronos • GoogleCloudPlatform/kubernetes • openshift/geard • VoltFramework/volt projects for orchestrating containers:
  • 32. • docker/fig • deis/deis • flynn/flynn • coreos/fleet • ansible/ansible • opscode/chef • progrium/dokku • newrelic/centurion • mesosphere/marathon • airbnb/chronos • GoogleCloudPlatform/kubernetes • openshift/geard • VoltFramework/volt • octohost/octohost • makeusabrew/decking • signalfuse/maestro-ng • shipyard/shipyard • DevTable/gantryd • mcuadros/dockership • longshoreman/longshoreman • marmelab/gaudi • etc. begin github search… projects for orchestrating containers:
  • 33. begin github search… projects for building containers: • rafecolton/docker-builder • mitchellh/packer • swipely/dockly • ???
  • 34. observation everybody is building containers differently.
  • 35. observation everybody is building containers differently. how do we build production-ready containers?
  • 36. writing a good Dockerfile lesson 0: getting started
  • 37. writing a good Dockerfile lesson 0: getting started use a docker hub base
  • 38. writing a good Dockerfile lesson 0: getting started set your env
  • 39. writing a good Dockerfile lesson 1: order matters deps before bundling
  • 40. writing a good Dockerfile lesson 1: order matters ADD only Gemfile* first
  • 41. writing a good Dockerfile lesson 1: order matters `ADD .` as late as possible
  • 42. writing a good Dockerfile lesson 2: optimize for size, repeatability combine RUN commands whenever possible
  • 43. writing a good Dockerfile lesson 2: optimize for size, repeatability RUN dependent steps together
  • 44. writing a good Dockerfile lesson 3: use a standard entrypoint use a *simple* entrypoint script
  • 45. writing a good Dockerfile lesson 3: use a standard entrypoint operate on docker-specific environment variables
  • 46. writing a good Dockerfile lesson 3: use a standard entrypoint wrap verbose CMD options
  • 47. writing a good Dockerfile lesson 3: use a standard entrypoint exec "$@" # give yourself a shell
  • 48. the image development lifecycle build *type things* push tag
  • 49. the image development lifecycle > docker build -t myapp:latest . > export latest="$(docker images | grep myapp:latest | head -n 1 | awk '{print $3}’)" > docker tag $latest "$(git rev-parse -q HEAD)" # sha > docker tag $latest "$(git describe --always --dirty --tags)" # tag > docker tag $latest "$(git rev-parse -q --abbrev-ref HEAD)" # branch > for image in $(docker images | grep myapp | awk '{print $1 ":" $2}' | head -n 4) ; push do docker push $image ; done build tag *type things*
  • 50. the image development lifecycle: docker-builder push build tag > docker-builder build . *type things*
  • 51. teh pipeline docker build server* app app app app *https://github.com/rafecolton/docker-builder
  • 52. conclusion building containers is like writing ruby code:
  • 53. conclusion building containers is like writing ruby code: it’s easy to do it’s hard to do correctly
  • 54. so what did we learn? (or, through what did you sleep?) stuff: • the complexity will come naturally (so don’t force it) • be intentional about your Dockerfile
  • 55. so what did we learn? (or, through what did you sleep?) stuff: • the complexity will come naturally (so don’t force it) • be intentional about your Dockerfile • docker is an excellent packaging and distribution system • containers are the canonical building blocks
  • 56. so what did we learn? (or, through what did you sleep?) stuff: • the complexity will come naturally (so don’t force it) • be intentional about your Dockerfile • docker is an excellent packaging and distribution system • containers are the canonical building blocks • consider division of responsibility between the host and the container • don’t do the new thing the old way (do the old thing the new way!)
  • 57. brief epilogue goal: move to linux => all apps (less one) now employing docker/ansible/linux
  • 58. brief epilogue goal: move to linux => all apps (less one) now employing docker/ansible/linux goal: consolidated, pluggable platform => shared monitoring, log aggregation, & load balancing services
  • 59. brief epilogue goal: move to linux => all apps (less one) now employing docker/ansible/linux goal: consolidated, pluggable platform => shared monitoring, log aggregation, & load balancing services goal: push-button provisioning and deployment => it works, minimal magic… and it’s well documented
  • 60. brief epilogue goal: move to linux => all apps (less one) now employing docker/ansible/linux goal: consolidated, pluggable platform => shared monitoring, log aggregation, & load balancing services goal: push-button provisioning and deployment => it works, minimal magic… and it’s well documented could easily be maintained by only two people… dun dun dun
  • 61. brief epilogue I’m job hunting…
  • 62. brief epilogue I’m job hunting… …and I haven’t shot anything yet. so if you’re hiring, come talk to me after the show. twitter: @rafecolton github: rafecolton rafecolton.com