SlideShare uma empresa Scribd logo
1 de 75
Baixar para ler offline
Diving In 
See what happens when a Java developer 
tries to do DevOps 
@awilmore Copper @ an Aussie Insurance Company
Disclaimer 
Me: DevOps n00b 
I’m really just here to learn (but Stephen’s making me talk!)
Overview 
1. How Docker was introduced to the Copper team 
2. The Copper build agents - Doing it Wrong! 
3. New service opportunity - Doing it Right! 
4. The challenges ahead
A short detour… 
What is Copper?
The Copper Team 
• We are our company’s rapid software delivery team 
• We are cross-functional,“innovative early adopters 
of technology” 
• Grails + AngularJS, plus many other technologies 
• Provide a faster speed-to-market for customers 
• Provide an alternative path to production for our 
business
So… In the beginning… 
Leo, Pete, Mike: DevOps expert consultants from Odecee 
Their research project: Docker 
Meanwhile… 
Build Engineering Team had a problem: 
Need more servers, for more Bamboo build agents!
Solution… 
Docker-based Build Agents! 
Went from approx. 10 to approx. 50 build agents!
Some Copper devs were still not happy… 
“Too much job queuing in Bamboo!” 
So I forked the Bamboo 
build agents and created…
Grails-Dedicated Build Agents 
…and six months on… 
• Manually built, manually managed 
• 3.5 GB on disk (way too big) 
• Rebuilds mean re-download-the-Internet 
• Too much hands on 
Docker: Doing it Wrong!
Docker: Doing it Wrong! 
• Containers simply do too much! 
• Stateful and Stateless concerns mixed together 
• Poor use of Dockerfiles and Image Layering 
• No orchestration
First Problem 
Containers Do Too Much
Containers Do Too Much 
… which violates… 
Single Responsibility Principle
Single Responsibility Principle 
Docker refers to it in places as the: 
One-Concern-Per-Container Principle
So, the build agents…
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Compass 
Grunt 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Compass 
Grunt 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Doing Too Much
Grails Build Agent: 
Grails 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Bamboo Remote Agent Service 
Java Build Agent: 
Maven 
Gradle 
Bamboo Remote Agent Service 
Node Build Agent: 
NPM 
NodeJS 
Compass 
Grunt 
Ruby 
Bamboo Remote Agent Service 
Selenium Build Agent: 
Selenium 
Firefox 
Bamboo Remote Agent Service 
Node Build Agent: 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Bamboo Remote Agent Service 
Node Build Agent: 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Node Build Agent: 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Better
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Compass 
Grunt 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Compass 
Grunt 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service 
Doing Too Much
Doing It Wrong
Doing It Wrong 
The next problem… 
Mixing Stateful and Stateless Concerns
Mixing Stateful and Stateless Concerns 
Grails Build Agent: 
Grails Cache
Mixing Stateful and Stateless Concerns 
Grails Build Agent: 
Grails Cache
Mixing Stateful and Stateless Concerns 
Grails Build Agent: 
Grails Cache
Mixing Stateful and Stateless Concerns 
Grails Build Agent: 
Grails Cache 
Grails Build Agent: 
Grails Cache
Mixing Stateful and Stateless Concerns 
Grails Build Agent: 
Grails Cache 
Grails Build Agent: 
Grails Cache
Grails Build Agent: 
Grails Cache 
Grails Build Agent: 
Grails Cache
Grails Build Agent: 
Grails Cache 
Grails Build Agent: 
Grails Cache 
Data Volume Data Volume 
File System 
Better
Grails Build Agent: 
Grails Cache 
Grails Build Agent: 
Grails Cache 
Better
Mixing Stateful and Stateless Concerns 
Grails Build Agent: 
Grails Cache 
Grails Build Agent: 
Grails Cache
Not so good
Not so good 
The next problem… 
Poor use of Dockerfiles and Image Layering
Poor use of Dockerfiles and Image Layering 
Simple Dockerfile example: 
https://registry.hub.docker.com/u/maxexcloo/postgresql/dockerfile/
Poor use of Dockerfiles and Image Layering 
Simple Dockerfile example: 
https://registry.hub.docker.com/u/maxexcloo/postgresql/dockerfile/
The Grails Build Agent Project 
Puppet Stuff Shell Script 
Shell Script 
Shell Script 
Dockerfile 
Puppet Stuff 
Shell Script 
Shell Script 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service
The Grails Build Agent Project 
Puppet Stuff Shell Script Lots of moving parts (ie. code) 
Shell Script Puppet Stuff 
Shell Script 
Dockerfile 
Shell Script 
Shell Script 
for one image
Dockerfile 
Dockerfile 
Image Inheritance 
Grails Image 
Java7 Image 
Base OS 
Dockerfile
Dockerfile 
Dockerfile 
Grails Image 
Base OS 
Better 
Java7 Image 
Dockerfile
Poor use of Dockerfiles and Image Layering 
Puppet Stuff Shell Script 
Shell Script 
Shell Script 
Dockerfile 
Puppet Stuff 
Shell Script 
Shell Script 
Grails Build Agent: 
Grails 
Maven 
Gradle 
Selenium 
Firefox 
NPM 
NodeJS 
Grunt 
Ruby 
Compass 
Bamboo Remote Agent Service
Not so good
Not so good 
The next problem… 
No orchestration
No orchestration 
When I need some new agents… 
[adam@laptop ~] ssh adam@build-server 
Last login: Tue Oct 28 22:13:27 2014 from 10.126.176.99 
adam@build-server:~ >> 
cd git/buildeng-puppet 
adam@build-server:~/git/buildeng-puppet >> git checkout grails-agents-branch 
adam@build-server:~/git/buildeng-puppet >> docker build -t=“agent-11” . 
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:14.04 
---> e360b5673aef 
Step 1 : MAINTAINER Adam Wilmore "adam.wilmore@abc.com.au" 
---> Using cache 
... 
... 
... 
(a long time later...)
Too much hands on!
Too much hands on! 
It would …be a bnde tmteorr eto: have… 
http://www.mindmeister.com/389671722/docker-ecosystem
…you get the point.
But doing this… 
[adam@laptop ~] ssh adam@build-server 
Last login: Tue Oct 28 22:13:27 2014 from 10.126.176.99 
adam@build-server:~ >> 
cd git/buildeng-puppet 
adam@build-server:~/git/buildeng-puppet >> git checkout grails-agents-branch 
adam@build-server:~/git/buildeng-puppet >> docker build -t=“agent-11” . 
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:14.04 
---> e360b5673aef 
Step 1 : MAINTAINER Adam Wilmore "adam.wilmore@abc.com.au" 
---> Using cache 
... 
... 
... 
(a long time later...)
Doing It Wrong
Doing It Wrong 
• Containers simply do too much! 
• Stateful and Stateless concerns mixed together 
• Poor use of Dockerfiles and Image Layering 
• No orchestration 
Recap:
Next time, it’ll be perfect…
So how about 
Doing It Right?
The Next Project 
• Build new Artifactory* Service using Docker 
• Find out a bit more about Docker in the process 
• Take the learnings so far, build a bit, learn a bit 
more, repeat… 
* Artifactory from JFrog is an artefact management 
tool, similar to Nexus
“Hang on a minute! How 
do you know that Docker is the right tool 
for this type of service?” 
Good question.
A short detour… 
Why Copper Needs Docker
Why Copper Needs Docker
Why Copper Needs Docker 
• Portable infrastructure - changing licensed platform 
• Major infrastructure pressures within Copper - 
scaling, availability and limited resources 
• Increasing demand for disposable infrastructure 
• What the Copper team needs is…
The Copper PaaS!
And we need to start somewhere…
Project Requirements 
• Artifactory service comprised: 
• Java app server (Jetty) 
• Postgres backend 
• Web-based file share 
• Linux all the way down 
• Performance and Availability are critical - can’t be 
worse than previous artefact manager
Some Principles to Work With 
• Use Puppet with Docker for “image creation”; and 
• Favour Puppet over Docker for “doing work” * 
• Stick to One Concern Per Container! 
• Dive in and learn! 
* Why? For reuse, “might move to EC2 one day”, already familiar with Puppet…?
“Hang on a minute! What about 
service discovery, orchestration, logging, 
monitoring and backups?” 
<crickets…>
So how did it turn out?
Container Structure
Image Inheritance
The Challenges Ahead
The State of Ops 
• How do we scale and load-balance for performance and 
availability? 
• How do we backup all critical data? 
• How do we do upgrades? 
• How do we keep operational configuration changes under 
source-control? 
• Can we restore everything in the event of a disaster? 
• What about service discovery, orchestration, monitoring, all that 
stuff to help with some of these questions?
The State of Dev 
• Have we correctly designed containers for extensibility? 
• Are we using the right tools and libraries to build the 
containers? 
• How do we version and release our code changes? 
• Is our code set up for optimal reuse? 
• How do we test our builds? 
• How do we collaborate most effectively as developers 
writing infrastructure software?
One last detour…
…on the question about using 
tools properly… 
Like Docker vs Puppet…
Is it… 
(Puppet installs Docker)
Or is it… 
(Docker installs Puppet)
The answer appears to be: 
“It’s both, and it depends.”
The Copper PaaS 
And so it appears there’s still 
lots of work to do 
Which is great because…
Next time, it’ll be perfect!
Next time, it’ll be perfect! 
@awilmore Copper @ an Aussie Insurance Company

Mais conteúdo relacionado

Mais procurados

ZendCon 2015 - Laravel Forge: Hello World to Hello Production
ZendCon 2015 - Laravel Forge: Hello World to Hello ProductionZendCon 2015 - Laravel Forge: Hello World to Hello Production
ZendCon 2015 - Laravel Forge: Hello World to Hello ProductionJoe Ferguson
 
Serverless in production, an experience report (Going Serverless)
Serverless in production, an experience report (Going Serverless)Serverless in production, an experience report (Going Serverless)
Serverless in production, an experience report (Going Serverless)Yan Cui
 
Adopting Java for the Serverless world at IT Tage
Adopting Java for the Serverless world at IT TageAdopting Java for the Serverless world at IT Tage
Adopting Java for the Serverless world at IT TageVadym Kazulkin
 
React native in the wild @ Codemotion 2016 in Rome
React native in the wild @ Codemotion 2016 in RomeReact native in the wild @ Codemotion 2016 in Rome
React native in the wild @ Codemotion 2016 in RomeAlessandro Nadalin
 
Improve your Java Environment with Docker
Improve your Java Environment with DockerImprove your Java Environment with Docker
Improve your Java Environment with DockerHanoiJUG
 
Game of Codes: the Battle for CI
Game of Codes: the Battle for CIGame of Codes: the Battle for CI
Game of Codes: the Battle for CIAtlassian
 
Adapting Java for the Serverless World at JUG Barcelona
Adapting Java for the Serverless World at JUG BarcelonaAdapting Java for the Serverless World at JUG Barcelona
Adapting Java for the Serverless World at JUG BarcelonaVadym Kazulkin
 
AtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration trainingAtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration trainingSteve Smith
 
Jenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetupJenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetupCloudBees
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony AppsPablo Godel
 
Adopting Java for the Serverless world at JUG Hamburg
Adopting Java for the Serverless world at  JUG HamburgAdopting Java for the Serverless world at  JUG Hamburg
Adopting Java for the Serverless world at JUG HamburgVadym Kazulkin
 
Serverless in production, an experience report (linuxing in london)
Serverless in production, an experience report (linuxing in london)Serverless in production, an experience report (linuxing in london)
Serverless in production, an experience report (linuxing in london)Yan Cui
 
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...Burr Sutter
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsPablo Godel
 
Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)Yan Cui
 
Code reviews vs Pull requests
Code reviews vs Pull requestsCode reviews vs Pull requests
Code reviews vs Pull requestsTim Pettersen
 
jbang: Unleash the power of Java for shell scripting
jbang: Unleash the power of Java for shell scriptingjbang: Unleash the power of Java for shell scripting
jbang: Unleash the power of Java for shell scriptingRed Hat Developers
 

Mais procurados (20)

ZendCon 2015 - Laravel Forge: Hello World to Hello Production
ZendCon 2015 - Laravel Forge: Hello World to Hello ProductionZendCon 2015 - Laravel Forge: Hello World to Hello Production
ZendCon 2015 - Laravel Forge: Hello World to Hello Production
 
Serverless in production, an experience report (Going Serverless)
Serverless in production, an experience report (Going Serverless)Serverless in production, an experience report (Going Serverless)
Serverless in production, an experience report (Going Serverless)
 
Adopting Java for the Serverless world at IT Tage
Adopting Java for the Serverless world at IT TageAdopting Java for the Serverless world at IT Tage
Adopting Java for the Serverless world at IT Tage
 
Namshi in 2014: let's rock!
Namshi in 2014: let's rock!Namshi in 2014: let's rock!
Namshi in 2014: let's rock!
 
React native in the wild @ Codemotion 2016 in Rome
React native in the wild @ Codemotion 2016 in RomeReact native in the wild @ Codemotion 2016 in Rome
React native in the wild @ Codemotion 2016 in Rome
 
Improve your Java Environment with Docker
Improve your Java Environment with DockerImprove your Java Environment with Docker
Improve your Java Environment with Docker
 
Game of Codes: the Battle for CI
Game of Codes: the Battle for CIGame of Codes: the Battle for CI
Game of Codes: the Battle for CI
 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play Framework
 
Adapting Java for the Serverless World at JUG Barcelona
Adapting Java for the Serverless World at JUG BarcelonaAdapting Java for the Serverless World at JUG Barcelona
Adapting Java for the Serverless World at JUG Barcelona
 
AtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration trainingAtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration training
 
Jenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetupJenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetup
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
 
Adopting Java for the Serverless world at JUG Hamburg
Adopting Java for the Serverless world at  JUG HamburgAdopting Java for the Serverless world at  JUG Hamburg
Adopting Java for the Serverless world at JUG Hamburg
 
Serverless in production, an experience report (linuxing in london)
Serverless in production, an experience report (linuxing in london)Serverless in production, an experience report (linuxing in london)
Serverless in production, an experience report (linuxing in london)
 
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
Teaching Elephants to Dance (Federal Audience): A Developer's Journey to Digi...
 
Drone CI
Drone CIDrone CI
Drone CI
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
 
Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)
 
Code reviews vs Pull requests
Code reviews vs Pull requestsCode reviews vs Pull requests
Code reviews vs Pull requests
 
jbang: Unleash the power of Java for shell scripting
jbang: Unleash the power of Java for shell scriptingjbang: Unleash the power of Java for shell scripting
jbang: Unleash the power of Java for shell scripting
 

Semelhante a Docker - Diving In

DCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development PipelineDCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development PipelineDocker, Inc.
 
introduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformintroduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformniyof97
 
Moderne Android Builds mit Gradle
Moderne Android Builds mit GradleModerne Android Builds mit Gradle
Moderne Android Builds mit Gradleinovex GmbH
 
DevOps MeetUp NL - Docker (Oct 2014)
DevOps MeetUp NL - Docker (Oct 2014)DevOps MeetUp NL - Docker (Oct 2014)
DevOps MeetUp NL - Docker (Oct 2014)Laurent Guérin
 
The Secrets of The FullStack Ninja - Part A - Session I
The Secrets of The FullStack Ninja - Part A - Session IThe Secrets of The FullStack Ninja - Part A - Session I
The Secrets of The FullStack Ninja - Part A - Session IOded Sagir
 
ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...
ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...
ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...DynamicInfraDays
 
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...Amazon Web Services
 
Kubernetes best practices
Kubernetes best practicesKubernetes best practices
Kubernetes best practicesBill Liu
 
A Docker-based Development Environment Even I Can Understand
A Docker-based Development Environment Even I Can UnderstandA Docker-based Development Environment Even I Can Understand
A Docker-based Development Environment Even I Can UnderstandJeremy Gimbel
 
Madison PHP 2015 - DevOps For Small Teams
Madison PHP 2015 - DevOps For Small TeamsMadison PHP 2015 - DevOps For Small Teams
Madison PHP 2015 - DevOps For Small TeamsJoe Ferguson
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitAndreas Heim
 
Midwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small teamMidwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small teamJoe Ferguson
 
Grunt Continuous Development of the Front End Tier
Grunt Continuous Development of the Front End TierGrunt Continuous Development of the Front End Tier
Grunt Continuous Development of the Front End TierErick Brito
 
ZendCon 2015 - DevOps for Small Teams
ZendCon 2015 - DevOps for Small TeamsZendCon 2015 - DevOps for Small Teams
ZendCon 2015 - DevOps for Small TeamsJoe Ferguson
 
Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725miguel dominguez
 
Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725MortazaJohari
 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Yevgeniy Brikman
 
Local development environment for micro services with docker
Local development environment for micro services with dockerLocal development environment for micro services with docker
Local development environment for micro services with dockerLINE Corporation
 

Semelhante a Docker - Diving In (20)

DCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development PipelineDCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development Pipeline
 
introduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformintroduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraform
 
Moderne Android Builds mit Gradle
Moderne Android Builds mit GradleModerne Android Builds mit Gradle
Moderne Android Builds mit Gradle
 
DevOps MeetUp NL - Docker (Oct 2014)
DevOps MeetUp NL - Docker (Oct 2014)DevOps MeetUp NL - Docker (Oct 2014)
DevOps MeetUp NL - Docker (Oct 2014)
 
The Secrets of The FullStack Ninja - Part A - Session I
The Secrets of The FullStack Ninja - Part A - Session IThe Secrets of The FullStack Ninja - Part A - Session I
The Secrets of The FullStack Ninja - Part A - Session I
 
ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...
ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...
ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...
 
Container Days
Container DaysContainer Days
Container Days
 
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
 
Cucumber
CucumberCucumber
Cucumber
 
Kubernetes best practices
Kubernetes best practicesKubernetes best practices
Kubernetes best practices
 
A Docker-based Development Environment Even I Can Understand
A Docker-based Development Environment Even I Can UnderstandA Docker-based Development Environment Even I Can Understand
A Docker-based Development Environment Even I Can Understand
 
Madison PHP 2015 - DevOps For Small Teams
Madison PHP 2015 - DevOps For Small TeamsMadison PHP 2015 - DevOps For Small Teams
Madison PHP 2015 - DevOps For Small Teams
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profit
 
Midwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small teamMidwest PHP 2017 DevOps For Small team
Midwest PHP 2017 DevOps For Small team
 
Grunt Continuous Development of the Front End Tier
Grunt Continuous Development of the Front End TierGrunt Continuous Development of the Front End Tier
Grunt Continuous Development of the Front End Tier
 
ZendCon 2015 - DevOps for Small Teams
ZendCon 2015 - DevOps for Small TeamsZendCon 2015 - DevOps for Small Teams
ZendCon 2015 - DevOps for Small Teams
 
Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725
 
Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725
 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
 
Local development environment for micro services with docker
Local development environment for micro services with dockerLocal development environment for micro services with docker
Local development environment for micro services with docker
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 

Último (20)

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 

Docker - Diving In

  • 1. Diving In See what happens when a Java developer tries to do DevOps @awilmore Copper @ an Aussie Insurance Company
  • 2. Disclaimer Me: DevOps n00b I’m really just here to learn (but Stephen’s making me talk!)
  • 3. Overview 1. How Docker was introduced to the Copper team 2. The Copper build agents - Doing it Wrong! 3. New service opportunity - Doing it Right! 4. The challenges ahead
  • 4. A short detour… What is Copper?
  • 5. The Copper Team • We are our company’s rapid software delivery team • We are cross-functional,“innovative early adopters of technology” • Grails + AngularJS, plus many other technologies • Provide a faster speed-to-market for customers • Provide an alternative path to production for our business
  • 6. So… In the beginning… Leo, Pete, Mike: DevOps expert consultants from Odecee Their research project: Docker Meanwhile… Build Engineering Team had a problem: Need more servers, for more Bamboo build agents!
  • 7. Solution… Docker-based Build Agents! Went from approx. 10 to approx. 50 build agents!
  • 8. Some Copper devs were still not happy… “Too much job queuing in Bamboo!” So I forked the Bamboo build agents and created…
  • 9. Grails-Dedicated Build Agents …and six months on… • Manually built, manually managed • 3.5 GB on disk (way too big) • Rebuilds mean re-download-the-Internet • Too much hands on Docker: Doing it Wrong!
  • 10. Docker: Doing it Wrong! • Containers simply do too much! • Stateful and Stateless concerns mixed together • Poor use of Dockerfiles and Image Layering • No orchestration
  • 12. Containers Do Too Much … which violates… Single Responsibility Principle
  • 13. Single Responsibility Principle Docker refers to it in places as the: One-Concern-Per-Container Principle
  • 14. So, the build agents…
  • 15. Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service
  • 16. Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service
  • 17. Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Compass Grunt Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Compass Grunt Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Doing Too Much
  • 18. Grails Build Agent: Grails Bamboo Remote Agent Service Grails Build Agent: Grails Bamboo Remote Agent Service Grails Build Agent: Grails Bamboo Remote Agent Service Java Build Agent: Maven Gradle Bamboo Remote Agent Service Node Build Agent: NPM NodeJS Compass Grunt Ruby Bamboo Remote Agent Service Selenium Build Agent: Selenium Firefox Bamboo Remote Agent Service Node Build Agent: NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Bamboo Remote Agent Service Grails Build Agent: Grails Bamboo Remote Agent Service Grails Build Agent: Grails Bamboo Remote Agent Service Node Build Agent: NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Node Build Agent: NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Better
  • 19. Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Compass Grunt Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Compass Grunt Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service Doing Too Much
  • 21. Doing It Wrong The next problem… Mixing Stateful and Stateless Concerns
  • 22. Mixing Stateful and Stateless Concerns Grails Build Agent: Grails Cache
  • 23. Mixing Stateful and Stateless Concerns Grails Build Agent: Grails Cache
  • 24. Mixing Stateful and Stateless Concerns Grails Build Agent: Grails Cache
  • 25. Mixing Stateful and Stateless Concerns Grails Build Agent: Grails Cache Grails Build Agent: Grails Cache
  • 26. Mixing Stateful and Stateless Concerns Grails Build Agent: Grails Cache Grails Build Agent: Grails Cache
  • 27. Grails Build Agent: Grails Cache Grails Build Agent: Grails Cache
  • 28. Grails Build Agent: Grails Cache Grails Build Agent: Grails Cache Data Volume Data Volume File System Better
  • 29. Grails Build Agent: Grails Cache Grails Build Agent: Grails Cache Better
  • 30. Mixing Stateful and Stateless Concerns Grails Build Agent: Grails Cache Grails Build Agent: Grails Cache
  • 32. Not so good The next problem… Poor use of Dockerfiles and Image Layering
  • 33. Poor use of Dockerfiles and Image Layering Simple Dockerfile example: https://registry.hub.docker.com/u/maxexcloo/postgresql/dockerfile/
  • 34. Poor use of Dockerfiles and Image Layering Simple Dockerfile example: https://registry.hub.docker.com/u/maxexcloo/postgresql/dockerfile/
  • 35.
  • 36. The Grails Build Agent Project Puppet Stuff Shell Script Shell Script Shell Script Dockerfile Puppet Stuff Shell Script Shell Script Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service
  • 37. The Grails Build Agent Project Puppet Stuff Shell Script Lots of moving parts (ie. code) Shell Script Puppet Stuff Shell Script Dockerfile Shell Script Shell Script for one image
  • 38. Dockerfile Dockerfile Image Inheritance Grails Image Java7 Image Base OS Dockerfile
  • 39. Dockerfile Dockerfile Grails Image Base OS Better Java7 Image Dockerfile
  • 40. Poor use of Dockerfiles and Image Layering Puppet Stuff Shell Script Shell Script Shell Script Dockerfile Puppet Stuff Shell Script Shell Script Grails Build Agent: Grails Maven Gradle Selenium Firefox NPM NodeJS Grunt Ruby Compass Bamboo Remote Agent Service
  • 42. Not so good The next problem… No orchestration
  • 43. No orchestration When I need some new agents… [adam@laptop ~] ssh adam@build-server Last login: Tue Oct 28 22:13:27 2014 from 10.126.176.99 adam@build-server:~ >> cd git/buildeng-puppet adam@build-server:~/git/buildeng-puppet >> git checkout grails-agents-branch adam@build-server:~/git/buildeng-puppet >> docker build -t=“agent-11” . Sending build context to Docker daemon Step 0 : FROM ubuntu:14.04 ---> e360b5673aef Step 1 : MAINTAINER Adam Wilmore "adam.wilmore@abc.com.au" ---> Using cache ... ... ... (a long time later...)
  • 45. Too much hands on! It would …be a bnde tmteorr eto: have… http://www.mindmeister.com/389671722/docker-ecosystem
  • 46. …you get the point.
  • 47. But doing this… [adam@laptop ~] ssh adam@build-server Last login: Tue Oct 28 22:13:27 2014 from 10.126.176.99 adam@build-server:~ >> cd git/buildeng-puppet adam@build-server:~/git/buildeng-puppet >> git checkout grails-agents-branch adam@build-server:~/git/buildeng-puppet >> docker build -t=“agent-11” . Sending build context to Docker daemon Step 0 : FROM ubuntu:14.04 ---> e360b5673aef Step 1 : MAINTAINER Adam Wilmore "adam.wilmore@abc.com.au" ---> Using cache ... ... ... (a long time later...)
  • 49. Doing It Wrong • Containers simply do too much! • Stateful and Stateless concerns mixed together • Poor use of Dockerfiles and Image Layering • No orchestration Recap:
  • 50. Next time, it’ll be perfect…
  • 51. So how about Doing It Right?
  • 52. The Next Project • Build new Artifactory* Service using Docker • Find out a bit more about Docker in the process • Take the learnings so far, build a bit, learn a bit more, repeat… * Artifactory from JFrog is an artefact management tool, similar to Nexus
  • 53. “Hang on a minute! How do you know that Docker is the right tool for this type of service?” Good question.
  • 54. A short detour… Why Copper Needs Docker
  • 56. Why Copper Needs Docker • Portable infrastructure - changing licensed platform • Major infrastructure pressures within Copper - scaling, availability and limited resources • Increasing demand for disposable infrastructure • What the Copper team needs is…
  • 58. And we need to start somewhere…
  • 59. Project Requirements • Artifactory service comprised: • Java app server (Jetty) • Postgres backend • Web-based file share • Linux all the way down • Performance and Availability are critical - can’t be worse than previous artefact manager
  • 60. Some Principles to Work With • Use Puppet with Docker for “image creation”; and • Favour Puppet over Docker for “doing work” * • Stick to One Concern Per Container! • Dive in and learn! * Why? For reuse, “might move to EC2 one day”, already familiar with Puppet…?
  • 61. “Hang on a minute! What about service discovery, orchestration, logging, monitoring and backups?” <crickets…>
  • 62. So how did it turn out?
  • 66. The State of Ops • How do we scale and load-balance for performance and availability? • How do we backup all critical data? • How do we do upgrades? • How do we keep operational configuration changes under source-control? • Can we restore everything in the event of a disaster? • What about service discovery, orchestration, monitoring, all that stuff to help with some of these questions?
  • 67. The State of Dev • Have we correctly designed containers for extensibility? • Are we using the right tools and libraries to build the containers? • How do we version and release our code changes? • Is our code set up for optimal reuse? • How do we test our builds? • How do we collaborate most effectively as developers writing infrastructure software?
  • 69. …on the question about using tools properly… Like Docker vs Puppet…
  • 70. Is it… (Puppet installs Docker)
  • 71. Or is it… (Docker installs Puppet)
  • 72. The answer appears to be: “It’s both, and it depends.”
  • 73. The Copper PaaS And so it appears there’s still lots of work to do Which is great because…
  • 74. Next time, it’ll be perfect!
  • 75. Next time, it’ll be perfect! @awilmore Copper @ an Aussie Insurance Company