SlideShare a Scribd company logo
1 of 41
Creating Developer-
Friendly Containers
(with some help from chaperone)
garyw@blueseastech.com
http://garywiz.com
slideshare: http://goo.gl/7UmU5B
Hello
Background (the boring stuff)
Developer needs as we see it
Our solution (think of it as a case-study)
Q&A or whatever
We provide systems architecture and
engineering consulting to enterprise, small-
business development teams and start-ups.
Docker is transforming the way we think about
architecture and deployment.
This is how we’ve been helping clients
transition toward a robust container
environment…
Our Perspective
Micro-service
Applications
Legacy
Applications
Primordial
Applications
Enterprise
Architectures
Docker Adoption Focus
Managing and Deploying Containers
Solid Advice and Emerging Best Practices
Technologies / Techniques / Case-Studies
Best Practices for Application Developers
“One Process Per Container”
Advice new adopters discover online…
Best Practices for Application Developers
“One Process Per Container”
Futile attempts to split complex existing applications
into separate container processes.
Redesign of existing systems using Micro-Services
architecture.
Attempts to do self-scripted container startup without
DevOps skill-set.
Attempts to create a mini-VM environment with
Supervisor, S6, runit, or even systemd.
and rarely…
“Your architecture is really outdated.
Nobody builds new systems like this
anymore, and considering some of your
code is 5 to 10 years old, we suggest
you rebuild everything from the ground-
up.”
So, this message hasn’t been getting
through very well…
“Containers can save you time and
money…
You can have greater application
consistency and stability for existing
development while paving the way for a
transition to better architectures.”
This works better…
Docker is not designed
for developers.
Problem
Good Developers…
• Benefit from uninterrupted focus for their most
productive activities.
• Usually spend years mastering the language and
tools they use to achieve maximum productivity.
• Resist change because they know that goals will not
be met if they change toolsets without ample
consideration, or at the wrong time.
coders
Defining, managing, scheduling, deploying,
requirements changes, management changes,
technology changes, goal changes.
coders
Defining, managing, scheduling, deploying,
requirements changes, management changes,
technology changes, goal changes.
The most successful
strategies will
relieve pressure
rather than
add new skillsets
to the requirements.
Making things easier
means…
• A documented, well-managed non-root development
environment. Application code and related services
should never run as root.
• An environment where system services are properly
configured.
• Constraints to assure that application practices
which violate production requirements trigger errors.
How could we best assist
people at making the
transition?
We built a technology solution.
Goals
• Create a developer-friendly environment for people who spend
99% of their time coding applications.
• Assure developers can configure and develop their applications
without having to modify or understand container internals.
• “Scale down” necessary services like logging, cron, error
recovery, process management to assure all supporting services
present a properly-configured container environment.
• Create a consistent runtime model so that DevOps teams can
rely upon consistent requirements when developing, assembling,
testing and deploying applications using tools like compose, etc..
Existing process management
solutions are not designed with
containers in mind.
Problem
Chaperone
• Single PID 1 process that provides…
1. dependency-based startup, cron scheduling, script execution,
systemd notify protocol, orderly shutdown, zombie harvesting,
and…
2. syslog emulation, /dev/log capture and redirection
3. uid/gid mapping for attached storage
4. rich full-featured service, logging and environment configuration
• A general-purpose tool. Simple YAML configuration in a
single file, or can be as complex as desired.
• Open-source, well-documented.
chaperone-baseimage family
(at https://registry.hub.docker.com/repos/chapdev/)
• Collection of images which use Chaperone to establish
a robust development and deployment model.
• All images support three “personalities”:
• closed: applications and data reside inside the
container
• attached-data: applications and infrastructure reside
inside the container, data is external
• development: infrastructure is inside the container,
data and applications are external (usually in
developer’s home directory).
Infrastr
ucture
Apps
and C
onfigur
ation
Persist
ent Da
ta
Application
components
Infrastr
ucture
Apps
and C
onfigur
ation
Persist
ent Da
ta
Closed Model
Entire application exists
within the same container.
Ideal:
• when container data is truly
ephemeral.
• for “model” deployments or
demonstrations.
Closed Model
Entire application exists
within the same container.
docker run -i -t --rm -p 80:8080 -p 443:8443 
chapdev/chaperone-lemp /bin/bash
Closed Model
Entire application exists
within the same container.
docker run -i -t --rm -p 80:8080 -p 443:8443 
chapdev/chaperone-lemp /bin/bash
Jul 19 13:42:26 baccbaa91e5a chaperone[1]: system wll be killed when '/bin/bash' exits
runapps@baccbaa91e5a:/$ cps
USER PID PPID PGID VSZ RSS STAT COMMAND
root 1 0 1 69448 16532 Ss [chaperone] /bin/bash
runapps 55 1 55 426920 51240 Sl /usr/sbin/mysqld --defaults-file=/apps/etc/mysql/my
runapps 75 1 75 228956 5104 Ss php-fpm: master process (/apps/etc/php-fpm.conf)
runapps 76 75 75 228956 4524 S _ php-fpm: pool www
runapps 77 75 75 228956 4516 S _ php-fpm: pool www
runapps 83 1 83 82116 1368 Ss nginx: master process /usr/sbin/nginx -c /apps/var/e
runapps 84 83 83 82436 1660 S _ nginx: worker process
runapps 85 83 83 82436 1660 S _ nginx: worker process
runapps 86 83 83 82436 1660 S _ nginx: worker process
runapps 87 83 83 82436 1660 S _ nginx: worker process
runapps 88 1 88 21284 1988 S /bin/bash
runapps 91 88 91 21088 1544 S+ _ /bin/bash /apps/bin/cps
runapps 92 91 91 18680 1280 R+ _ ps --forest -weo …
runapps@baccbaa91e5a:/$
Processes run as… In directory… With data here…
“runapps” /apps /apps/var
Infrastru
cture
Apps
and Co
nfigurati
on
Persiste
nt Data
Attached-Data Model
Data exists on attached
storage.
Ideal for most production
deployments.
Attached-Data Model
Data exists on attached
storage.
mkdir lemp-var
docker run -i -t --rm -v /home/garyw/lemp-var:/apps/var 
-p 80:8080 -p 443:8443 
chapdev/chaperone-lemp --create garyw/1021:1021
/bin/bash
Attached-Data Model
Data exists on attached
storage.
myuid=`id -u`
mygid=`id -g`
mkdir lemp-var
docker run -i -t --rm -v `pwd`/lemp-var:/apps/var 
-p 80:8080 -p 443:8443 
chapdev/chaperone-lemp --create $USER/$myuid:$mygid
/bin/bash
Attached-Data Model
Data exists on attached
storage.
Jul 19 13:50:21 e75923c8b6b0 chaperone[1]: system wll be killed when '/bin/bash' exits
garyw@e75923c8b6b0:/$ cps
cps
USER PID PPID PGID VSZ RSS STAT COMMAND
root 1 0 1 69464 16544 Ss [chaperone] /bin/bash
garyw 77 1 77 426920 51148 Sl /usr/sbin/mysqld --defaults-file=/apps/etc/mysql/my.cnf -
garyw 97 1 97 228956 5104 Ss php-fpm: master process (/apps/etc/php-fpm.conf)
garyw 98 97 97 228956 4524 S _ php-fpm: pool www
garyw 99 97 97 228956 4516 S _ php-fpm: pool www
garyw 105 1 105 82116 1376 Ss nginx: master process /usr/sbin/nginx -c /apps/var/etc/ng
garyw 106 105 105 82436 1672 S _ nginx: worker process
garyw 107 105 105 82436 1672 S _ nginx: worker process
garyw 108 105 105 82436 1672 S _ nginx: worker process
garyw 109 105 105 82436 1672 S _ nginx: worker process
garyw 110 1 110 21280 1988 S /bin/bash
garyw 113 110 113 21088 1544 S+ _ /bin/bash /apps/bin/cps
garyw 114 113 113 18680 1284 R+ _ ps --forest -weo user,pid,ppid,pgid,vsz,…
garyw@e75923c8b6b0:/$
Processes run as… In directory… With data here…
—create-user user /apps mounted: /apps/var
myuid=`id -u`
mygid=`id -g`
mkdir lemp-var
docker run -i -t --rm -v `pwd`/lemp-var:/apps/var 
-p 80:8080 -p 443:8443 
chapdev/chaperone-lemp --create $USER/$myuid:$mygid
/bin/bash
Infrastr
ucture
Apps
and Co
nfigurati
on
Persiste
nt Data
Development Model
Only infrastructure resides
in container.
Ideal for:
• development
• rapid prototyping
• experimentation and exploring
Development Model
Only infrastructure resides
in container.
docker run -i --rm chapdev/chaperone-lemp --task get-chaplocal | sh
Step 1:
Extract ‘chaplocal’ utility
from the desired container
Development Model
Only infrastructure resides
in container.
docker run -i --rm chapdev/chaperone-lemp --task get-chaplocal | sh
Step 1:
Extract ‘chaplocal’ utility
from the desired container
$ docker run -i --rm chapdev/chaperone-lemp --task get-chaplocal | sh
The 'chaplocal' script is ready to use. Here is the help you get if you type
./chaplocal
at the command line...
Usage: chaplocal [-d] local-apps-dir [image-name]
Runs the specified chaperone image and uses local-apps-dir for the apps
directory. Creates a script in local-apps-dir called run.sh so you can
run an interactive (default) or daemon instance.
Will run all container processes under the current user account with the
local drive mounted as a shared volume in the container.
If not specified, the the image 'chapdev/chaperone-lemp' will be used.
$
Development Model
Only infrastructure resides
in container.
Step 2:
Create and start a new
development directory
./chaplocal myappdir
Development Model
Only infrastructure resides
in container.
Step 2:
Create and start a new
development directory
./chaplocal myappdir
./chaplocal myappdir
Extracting /apps default directory into /home/garyw/meetup/myappdir ...
You can customize the contents of /home/garyw/meetup/myappdir to tailor it for your application,
then use it as a template for your production image.
Executing run.sh within /home/garyw/meetup/myappdir ...
Port 8080 available at docker1:8080 ...
Port 8443 available at docker1:8443 ...
Jul 19 14:06:55 c8056b4d6b73 chaperone[1]: system wll be killed when '/bin/bash' exits
Now running inside container. Directory is: /home/garyw/meetup/myappdir
The default 'nginx' site is running at http://docker1:8080/
garyw@c8056b4d6b73:~/meetup/myappdir$
Processes run as… In directory… With data here…
—create-user user mounted: /home/garyw/apps mounted: /home/garyw/apps/var
Development Model
Only infrastructure resides
in container.
apps directory contents on
in developers’s home
directory
Processes run as… In directory… With data here…
—create-user user mounted: /home/garyw/apps mounted: /home/garyw/apps/var
garyw@c8056b4d6b73:~/meetup/myappdir$ ls -l
total 44
-rw-r--r-- 1 garyw garyw 328 Jul 19 14:06 bash.bashrc
drwxr-sr-x 2 garyw garyw 4096 Jul 19 13:24 bin
drwxr-sr-x 2 garyw garyw 4096 Jul 19 14:06 build
-rwxr-xr-x 1 garyw garyw 589 Jul 19 14:06 build.sh
drwxr-sr-x 2 garyw garyw 4096 Jul 19 13:24 chaperone.d
drwxr-sr-x 4 garyw garyw 4096 Jul 19 13:24 etc
-rw-r--r-- 1 garyw garyw 1016 Jun 10 03:53 README
-rwxr-xr-x 1 garyw garyw 1775 Jul 19 14:06 run.sh
drwxr-sr-x 2 garyw garyw 4096 Jul 19 13:24 startup.d
drwxr-sr-x 7 garyw garyw 4096 Jul 19 14:06 var
drwxr-sr-x 4 garyw garyw 4096 Jun 28 04:00 www
garyw@c8056b4d6b73:~/meetup/myappdir$ exit
Processes
run as…
In directory…
With data
here…
closed “runapps” /apps /apps/var
attached data
externally-specified
UID/GID
/apps
/apps/var
(attached)
developer
externally specified
UID/GID
/home/xxx/apps
(attached)
/home/xxx/apps/var
(attached)
Summary of container models
supported by chaperone-baseimage
and any derivatives
The result…
• Developers have a single, consistent development
model where…
• They control, configure, and add all services and
applications they need under their own user account
in their own development directory, and…
• Resulting images can be run using all three models:
closed, attached-data, and for additional
development.
Resources
The Sample
Application
docker run -i -t --rm -p 80:8080 -p 443:8443 
chapdev/chaperone-lemp /bin/bash
Dockerfile
Quick Start
http://garywiz.github.io/chaperone/guide/chap-docker-simple.html
Image
Family
https://github.com/garywiz/chaperone-docker
Warning!
• In use in production, but just released this month as
open-source. Though well-tested and documented,
it is still a work in progress.
• Chaperone itself is platform neutral, but tools for
creating the development environment may need
minor tweaking for Kitematic or boot2docker
systems. Recommended environment is Linux host.
• Images have been tested under CentOS but there is
no CentOS base image yet (coming soon).
Q&A ++
me: http://garywiz.com
chaperone: https://github.com/garywiz/chaperone
documentation: http://garywiz.github.io/chaperone
chaperone-baseimage and friends:
https://github.com/garywiz/chaperone-docker
on Docker Hub:
https://registry.hub.docker.com/repos/chapdev/

More Related Content

What's hot

Continuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsContinuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsSunil Dalal
 
Java APIs- The missing manual (concurrency)
Java APIs- The missing manual (concurrency)Java APIs- The missing manual (concurrency)
Java APIs- The missing manual (concurrency)Hendrik Ebbers
 
JavaOne 2015: From Java Code to Machine Code
JavaOne 2015: From Java Code to Machine CodeJavaOne 2015: From Java Code to Machine Code
JavaOne 2015: From Java Code to Machine CodeChris Bailey
 
Apache DeviceMap - ApacheCon core Europe 2015
Apache DeviceMap - ApacheCon core Europe 2015Apache DeviceMap - ApacheCon core Europe 2015
Apache DeviceMap - ApacheCon core Europe 2015Werner Keil
 
Cloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment WorkshopCloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment WorkshopManuel Garcia
 
An introduction to git
An introduction to gitAn introduction to git
An introduction to gitolberger
 
Pass Summit Linux Scripting for the Microsoft Professional
Pass Summit Linux Scripting for the Microsoft ProfessionalPass Summit Linux Scripting for the Microsoft Professional
Pass Summit Linux Scripting for the Microsoft ProfessionalKellyn Pot'Vin-Gorman
 
Performance Comparison of Streaming Big Data Platforms
Performance Comparison of Streaming Big Data PlatformsPerformance Comparison of Streaming Big Data Platforms
Performance Comparison of Streaming Big Data PlatformsDataWorks Summit/Hadoop Summit
 
Interactive Analytics using Apache Spark
Interactive Analytics using Apache SparkInteractive Analytics using Apache Spark
Interactive Analytics using Apache SparkSachin Aggarwal
 
KubeFlow + GPU + Keras/TensorFlow 2.0 + TF Extended (TFX) + Kubernetes + PyTo...
KubeFlow + GPU + Keras/TensorFlow 2.0 + TF Extended (TFX) + Kubernetes + PyTo...KubeFlow + GPU + Keras/TensorFlow 2.0 + TF Extended (TFX) + Kubernetes + PyTo...
KubeFlow + GPU + Keras/TensorFlow 2.0 + TF Extended (TFX) + Kubernetes + PyTo...Chris Fregly
 
Introduction to Reactive Streams and Reactor 2.5
Introduction to Reactive Streams and Reactor 2.5Introduction to Reactive Streams and Reactor 2.5
Introduction to Reactive Streams and Reactor 2.5Stéphane Maldini
 
Big Data in Container; Hadoop Spark in Docker and Mesos
Big Data in Container; Hadoop Spark in Docker and MesosBig Data in Container; Hadoop Spark in Docker and Mesos
Big Data in Container; Hadoop Spark in Docker and MesosHeiko Loewe
 
Apache Deep Learning 101 - ApacheCon Montreal 2018 v0.31
Apache Deep Learning 101 - ApacheCon Montreal 2018 v0.31Apache Deep Learning 101 - ApacheCon Montreal 2018 v0.31
Apache Deep Learning 101 - ApacheCon Montreal 2018 v0.31Timothy Spann
 
Java APIs - the missing manual
Java APIs - the missing manualJava APIs - the missing manual
Java APIs - the missing manualHendrik Ebbers
 
Lessons Learned Running Hadoop and Spark in Docker Containers
Lessons Learned Running Hadoop and Spark in Docker ContainersLessons Learned Running Hadoop and Spark in Docker Containers
Lessons Learned Running Hadoop and Spark in Docker ContainersBlueData, Inc.
 

What's hot (19)

NYC_2016_slides
NYC_2016_slidesNYC_2016_slides
NYC_2016_slides
 
Continuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsContinuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applications
 
Java APIs- The missing manual (concurrency)
Java APIs- The missing manual (concurrency)Java APIs- The missing manual (concurrency)
Java APIs- The missing manual (concurrency)
 
JavaOne 2015: From Java Code to Machine Code
JavaOne 2015: From Java Code to Machine CodeJavaOne 2015: From Java Code to Machine Code
JavaOne 2015: From Java Code to Machine Code
 
Apache DeviceMap - ApacheCon core Europe 2015
Apache DeviceMap - ApacheCon core Europe 2015Apache DeviceMap - ApacheCon core Europe 2015
Apache DeviceMap - ApacheCon core Europe 2015
 
Cloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment WorkshopCloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment Workshop
 
Coscup
CoscupCoscup
Coscup
 
An introduction to git
An introduction to gitAn introduction to git
An introduction to git
 
Pass Summit Linux Scripting for the Microsoft Professional
Pass Summit Linux Scripting for the Microsoft ProfessionalPass Summit Linux Scripting for the Microsoft Professional
Pass Summit Linux Scripting for the Microsoft Professional
 
Java 11 OMG
Java 11 OMGJava 11 OMG
Java 11 OMG
 
Performance Comparison of Streaming Big Data Platforms
Performance Comparison of Streaming Big Data PlatformsPerformance Comparison of Streaming Big Data Platforms
Performance Comparison of Streaming Big Data Platforms
 
Interactive Analytics using Apache Spark
Interactive Analytics using Apache SparkInteractive Analytics using Apache Spark
Interactive Analytics using Apache Spark
 
KubeFlow + GPU + Keras/TensorFlow 2.0 + TF Extended (TFX) + Kubernetes + PyTo...
KubeFlow + GPU + Keras/TensorFlow 2.0 + TF Extended (TFX) + Kubernetes + PyTo...KubeFlow + GPU + Keras/TensorFlow 2.0 + TF Extended (TFX) + Kubernetes + PyTo...
KubeFlow + GPU + Keras/TensorFlow 2.0 + TF Extended (TFX) + Kubernetes + PyTo...
 
Introduction to Reactive Streams and Reactor 2.5
Introduction to Reactive Streams and Reactor 2.5Introduction to Reactive Streams and Reactor 2.5
Introduction to Reactive Streams and Reactor 2.5
 
DrupalCon 2011 Highlight
DrupalCon 2011 HighlightDrupalCon 2011 Highlight
DrupalCon 2011 Highlight
 
Big Data in Container; Hadoop Spark in Docker and Mesos
Big Data in Container; Hadoop Spark in Docker and MesosBig Data in Container; Hadoop Spark in Docker and Mesos
Big Data in Container; Hadoop Spark in Docker and Mesos
 
Apache Deep Learning 101 - ApacheCon Montreal 2018 v0.31
Apache Deep Learning 101 - ApacheCon Montreal 2018 v0.31Apache Deep Learning 101 - ApacheCon Montreal 2018 v0.31
Apache Deep Learning 101 - ApacheCon Montreal 2018 v0.31
 
Java APIs - the missing manual
Java APIs - the missing manualJava APIs - the missing manual
Java APIs - the missing manual
 
Lessons Learned Running Hadoop and Spark in Docker Containers
Lessons Learned Running Hadoop and Spark in Docker ContainersLessons Learned Running Hadoop and Spark in Docker Containers
Lessons Learned Running Hadoop and Spark in Docker Containers
 

Similar to Creating Developer-Friendly Containers with Chaperone

DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsDevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsAmazon Web Services
 
Getting Started with MariaDB with Docker
Getting Started with MariaDB with DockerGetting Started with MariaDB with Docker
Getting Started with MariaDB with DockerMariaDB plc
 
Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015WaveMaker, Inc.
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsPablo Godel
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulMert Çalışkan
 
Containerdays Intro to Habitat
Containerdays Intro to HabitatContainerdays Intro to Habitat
Containerdays Intro to HabitatMandi Walls
 
Vipul divyanshu mahout_documentation
Vipul divyanshu mahout_documentationVipul divyanshu mahout_documentation
Vipul divyanshu mahout_documentationVipul Divyanshu
 
Ranger admin dev overview
Ranger admin dev overviewRanger admin dev overview
Ranger admin dev overviewTushar Dudhatra
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
Containerizing legacy applications
Containerizing legacy applicationsContainerizing legacy applications
Containerizing legacy applicationsAndrew Kirkpatrick
 
Operating Docker
Operating DockerOperating Docker
Operating DockerJen Andre
 
Alfresco Development Framework Basic
Alfresco Development Framework BasicAlfresco Development Framework Basic
Alfresco Development Framework BasicMario Romano
 
Spinnaker Summit 2018: CI/CD Patterns for Kubernetes with Spinnaker
Spinnaker Summit 2018: CI/CD Patterns for Kubernetes with SpinnakerSpinnaker Summit 2018: CI/CD Patterns for Kubernetes with Spinnaker
Spinnaker Summit 2018: CI/CD Patterns for Kubernetes with SpinnakerAndrew Phillips
 
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...Amazon Web Services
 
“Containerizing” applications with Docker: Ecosystem and Tools
“Containerizing” applications with Docker: Ecosystem and Tools“Containerizing” applications with Docker: Ecosystem and Tools
“Containerizing” applications with Docker: Ecosystem and ToolsFrancisco Javier Ramírez Urea
 
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...Patrick Chanezon
 
DevOps LA Meetup Intro to Habitat
DevOps LA Meetup Intro to HabitatDevOps LA Meetup Intro to Habitat
DevOps LA Meetup Intro to HabitatJessica DeVita
 

Similar to Creating Developer-Friendly Containers with Chaperone (20)

DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsDevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
 
Getting Started with MariaDB with Docker
Getting Started with MariaDB with DockerGetting Started with MariaDB with Docker
Getting Started with MariaDB with Docker
 
Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015
 
Devops
DevopsDevops
Devops
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
 
Containerdays Intro to Habitat
Containerdays Intro to HabitatContainerdays Intro to Habitat
Containerdays Intro to Habitat
 
Vipul divyanshu mahout_documentation
Vipul divyanshu mahout_documentationVipul divyanshu mahout_documentation
Vipul divyanshu mahout_documentation
 
Kubernetes @ meetic
Kubernetes @ meeticKubernetes @ meetic
Kubernetes @ meetic
 
Ranger admin dev overview
Ranger admin dev overviewRanger admin dev overview
Ranger admin dev overview
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
Containerizing legacy applications
Containerizing legacy applicationsContainerizing legacy applications
Containerizing legacy applications
 
Operating Docker
Operating DockerOperating Docker
Operating Docker
 
Alfresco Development Framework Basic
Alfresco Development Framework BasicAlfresco Development Framework Basic
Alfresco Development Framework Basic
 
Spinnaker Summit 2018: CI/CD Patterns for Kubernetes with Spinnaker
Spinnaker Summit 2018: CI/CD Patterns for Kubernetes with SpinnakerSpinnaker Summit 2018: CI/CD Patterns for Kubernetes with Spinnaker
Spinnaker Summit 2018: CI/CD Patterns for Kubernetes with Spinnaker
 
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
 
“Containerizing” applications with Docker: Ecosystem and Tools
“Containerizing” applications with Docker: Ecosystem and Tools“Containerizing” applications with Docker: Ecosystem and Tools
“Containerizing” applications with Docker: Ecosystem and Tools
 
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
 
DevOps LA Meetup Intro to Habitat
DevOps LA Meetup Intro to HabitatDevOps LA Meetup Intro to Habitat
DevOps LA Meetup Intro to Habitat
 
DevOps-Roadmap
DevOps-RoadmapDevOps-Roadmap
DevOps-Roadmap
 

Recently uploaded

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Recently uploaded (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

Creating Developer-Friendly Containers with Chaperone

  • 1. Creating Developer- Friendly Containers (with some help from chaperone) garyw@blueseastech.com http://garywiz.com slideshare: http://goo.gl/7UmU5B
  • 2. Hello Background (the boring stuff) Developer needs as we see it Our solution (think of it as a case-study) Q&A or whatever
  • 3. We provide systems architecture and engineering consulting to enterprise, small- business development teams and start-ups. Docker is transforming the way we think about architecture and deployment. This is how we’ve been helping clients transition toward a robust container environment…
  • 6. Managing and Deploying Containers Solid Advice and Emerging Best Practices Technologies / Techniques / Case-Studies Best Practices for Application Developers “One Process Per Container” Advice new adopters discover online…
  • 7. Best Practices for Application Developers “One Process Per Container” Futile attempts to split complex existing applications into separate container processes. Redesign of existing systems using Micro-Services architecture. Attempts to do self-scripted container startup without DevOps skill-set. Attempts to create a mini-VM environment with Supervisor, S6, runit, or even systemd. and rarely…
  • 8. “Your architecture is really outdated. Nobody builds new systems like this anymore, and considering some of your code is 5 to 10 years old, we suggest you rebuild everything from the ground- up.” So, this message hasn’t been getting through very well…
  • 9. “Containers can save you time and money… You can have greater application consistency and stability for existing development while paving the way for a transition to better architectures.” This works better…
  • 10. Docker is not designed for developers. Problem
  • 11. Good Developers… • Benefit from uninterrupted focus for their most productive activities. • Usually spend years mastering the language and tools they use to achieve maximum productivity. • Resist change because they know that goals will not be met if they change toolsets without ample consideration, or at the wrong time.
  • 12. coders Defining, managing, scheduling, deploying, requirements changes, management changes, technology changes, goal changes.
  • 13. coders Defining, managing, scheduling, deploying, requirements changes, management changes, technology changes, goal changes. The most successful strategies will relieve pressure rather than add new skillsets to the requirements.
  • 14. Making things easier means… • A documented, well-managed non-root development environment. Application code and related services should never run as root. • An environment where system services are properly configured. • Constraints to assure that application practices which violate production requirements trigger errors.
  • 15. How could we best assist people at making the transition? We built a technology solution.
  • 16. Goals • Create a developer-friendly environment for people who spend 99% of their time coding applications. • Assure developers can configure and develop their applications without having to modify or understand container internals. • “Scale down” necessary services like logging, cron, error recovery, process management to assure all supporting services present a properly-configured container environment. • Create a consistent runtime model so that DevOps teams can rely upon consistent requirements when developing, assembling, testing and deploying applications using tools like compose, etc..
  • 17. Existing process management solutions are not designed with containers in mind. Problem
  • 18. Chaperone • Single PID 1 process that provides… 1. dependency-based startup, cron scheduling, script execution, systemd notify protocol, orderly shutdown, zombie harvesting, and… 2. syslog emulation, /dev/log capture and redirection 3. uid/gid mapping for attached storage 4. rich full-featured service, logging and environment configuration • A general-purpose tool. Simple YAML configuration in a single file, or can be as complex as desired. • Open-source, well-documented.
  • 19. chaperone-baseimage family (at https://registry.hub.docker.com/repos/chapdev/) • Collection of images which use Chaperone to establish a robust development and deployment model. • All images support three “personalities”: • closed: applications and data reside inside the container • attached-data: applications and infrastructure reside inside the container, data is external • development: infrastructure is inside the container, data and applications are external (usually in developer’s home directory).
  • 21. Infrastr ucture Apps and C onfigur ation Persist ent Da ta Closed Model Entire application exists within the same container. Ideal: • when container data is truly ephemeral. • for “model” deployments or demonstrations.
  • 22. Closed Model Entire application exists within the same container. docker run -i -t --rm -p 80:8080 -p 443:8443 chapdev/chaperone-lemp /bin/bash
  • 23. Closed Model Entire application exists within the same container. docker run -i -t --rm -p 80:8080 -p 443:8443 chapdev/chaperone-lemp /bin/bash Jul 19 13:42:26 baccbaa91e5a chaperone[1]: system wll be killed when '/bin/bash' exits runapps@baccbaa91e5a:/$ cps USER PID PPID PGID VSZ RSS STAT COMMAND root 1 0 1 69448 16532 Ss [chaperone] /bin/bash runapps 55 1 55 426920 51240 Sl /usr/sbin/mysqld --defaults-file=/apps/etc/mysql/my runapps 75 1 75 228956 5104 Ss php-fpm: master process (/apps/etc/php-fpm.conf) runapps 76 75 75 228956 4524 S _ php-fpm: pool www runapps 77 75 75 228956 4516 S _ php-fpm: pool www runapps 83 1 83 82116 1368 Ss nginx: master process /usr/sbin/nginx -c /apps/var/e runapps 84 83 83 82436 1660 S _ nginx: worker process runapps 85 83 83 82436 1660 S _ nginx: worker process runapps 86 83 83 82436 1660 S _ nginx: worker process runapps 87 83 83 82436 1660 S _ nginx: worker process runapps 88 1 88 21284 1988 S /bin/bash runapps 91 88 91 21088 1544 S+ _ /bin/bash /apps/bin/cps runapps 92 91 91 18680 1280 R+ _ ps --forest -weo … runapps@baccbaa91e5a:/$ Processes run as… In directory… With data here… “runapps” /apps /apps/var
  • 24. Infrastru cture Apps and Co nfigurati on Persiste nt Data Attached-Data Model Data exists on attached storage. Ideal for most production deployments.
  • 25. Attached-Data Model Data exists on attached storage. mkdir lemp-var docker run -i -t --rm -v /home/garyw/lemp-var:/apps/var -p 80:8080 -p 443:8443 chapdev/chaperone-lemp --create garyw/1021:1021 /bin/bash
  • 26. Attached-Data Model Data exists on attached storage. myuid=`id -u` mygid=`id -g` mkdir lemp-var docker run -i -t --rm -v `pwd`/lemp-var:/apps/var -p 80:8080 -p 443:8443 chapdev/chaperone-lemp --create $USER/$myuid:$mygid /bin/bash
  • 27. Attached-Data Model Data exists on attached storage. Jul 19 13:50:21 e75923c8b6b0 chaperone[1]: system wll be killed when '/bin/bash' exits garyw@e75923c8b6b0:/$ cps cps USER PID PPID PGID VSZ RSS STAT COMMAND root 1 0 1 69464 16544 Ss [chaperone] /bin/bash garyw 77 1 77 426920 51148 Sl /usr/sbin/mysqld --defaults-file=/apps/etc/mysql/my.cnf - garyw 97 1 97 228956 5104 Ss php-fpm: master process (/apps/etc/php-fpm.conf) garyw 98 97 97 228956 4524 S _ php-fpm: pool www garyw 99 97 97 228956 4516 S _ php-fpm: pool www garyw 105 1 105 82116 1376 Ss nginx: master process /usr/sbin/nginx -c /apps/var/etc/ng garyw 106 105 105 82436 1672 S _ nginx: worker process garyw 107 105 105 82436 1672 S _ nginx: worker process garyw 108 105 105 82436 1672 S _ nginx: worker process garyw 109 105 105 82436 1672 S _ nginx: worker process garyw 110 1 110 21280 1988 S /bin/bash garyw 113 110 113 21088 1544 S+ _ /bin/bash /apps/bin/cps garyw 114 113 113 18680 1284 R+ _ ps --forest -weo user,pid,ppid,pgid,vsz,… garyw@e75923c8b6b0:/$ Processes run as… In directory… With data here… —create-user user /apps mounted: /apps/var myuid=`id -u` mygid=`id -g` mkdir lemp-var docker run -i -t --rm -v `pwd`/lemp-var:/apps/var -p 80:8080 -p 443:8443 chapdev/chaperone-lemp --create $USER/$myuid:$mygid /bin/bash
  • 28. Infrastr ucture Apps and Co nfigurati on Persiste nt Data Development Model Only infrastructure resides in container. Ideal for: • development • rapid prototyping • experimentation and exploring
  • 29. Development Model Only infrastructure resides in container. docker run -i --rm chapdev/chaperone-lemp --task get-chaplocal | sh Step 1: Extract ‘chaplocal’ utility from the desired container
  • 30. Development Model Only infrastructure resides in container. docker run -i --rm chapdev/chaperone-lemp --task get-chaplocal | sh Step 1: Extract ‘chaplocal’ utility from the desired container $ docker run -i --rm chapdev/chaperone-lemp --task get-chaplocal | sh The 'chaplocal' script is ready to use. Here is the help you get if you type ./chaplocal at the command line... Usage: chaplocal [-d] local-apps-dir [image-name] Runs the specified chaperone image and uses local-apps-dir for the apps directory. Creates a script in local-apps-dir called run.sh so you can run an interactive (default) or daemon instance. Will run all container processes under the current user account with the local drive mounted as a shared volume in the container. If not specified, the the image 'chapdev/chaperone-lemp' will be used. $
  • 31. Development Model Only infrastructure resides in container. Step 2: Create and start a new development directory ./chaplocal myappdir
  • 32. Development Model Only infrastructure resides in container. Step 2: Create and start a new development directory ./chaplocal myappdir ./chaplocal myappdir Extracting /apps default directory into /home/garyw/meetup/myappdir ... You can customize the contents of /home/garyw/meetup/myappdir to tailor it for your application, then use it as a template for your production image. Executing run.sh within /home/garyw/meetup/myappdir ... Port 8080 available at docker1:8080 ... Port 8443 available at docker1:8443 ... Jul 19 14:06:55 c8056b4d6b73 chaperone[1]: system wll be killed when '/bin/bash' exits Now running inside container. Directory is: /home/garyw/meetup/myappdir The default 'nginx' site is running at http://docker1:8080/ garyw@c8056b4d6b73:~/meetup/myappdir$ Processes run as… In directory… With data here… —create-user user mounted: /home/garyw/apps mounted: /home/garyw/apps/var
  • 33. Development Model Only infrastructure resides in container. apps directory contents on in developers’s home directory Processes run as… In directory… With data here… —create-user user mounted: /home/garyw/apps mounted: /home/garyw/apps/var garyw@c8056b4d6b73:~/meetup/myappdir$ ls -l total 44 -rw-r--r-- 1 garyw garyw 328 Jul 19 14:06 bash.bashrc drwxr-sr-x 2 garyw garyw 4096 Jul 19 13:24 bin drwxr-sr-x 2 garyw garyw 4096 Jul 19 14:06 build -rwxr-xr-x 1 garyw garyw 589 Jul 19 14:06 build.sh drwxr-sr-x 2 garyw garyw 4096 Jul 19 13:24 chaperone.d drwxr-sr-x 4 garyw garyw 4096 Jul 19 13:24 etc -rw-r--r-- 1 garyw garyw 1016 Jun 10 03:53 README -rwxr-xr-x 1 garyw garyw 1775 Jul 19 14:06 run.sh drwxr-sr-x 2 garyw garyw 4096 Jul 19 13:24 startup.d drwxr-sr-x 7 garyw garyw 4096 Jul 19 14:06 var drwxr-sr-x 4 garyw garyw 4096 Jun 28 04:00 www garyw@c8056b4d6b73:~/meetup/myappdir$ exit
  • 34. Processes run as… In directory… With data here… closed “runapps” /apps /apps/var attached data externally-specified UID/GID /apps /apps/var (attached) developer externally specified UID/GID /home/xxx/apps (attached) /home/xxx/apps/var (attached) Summary of container models supported by chaperone-baseimage and any derivatives
  • 35. The result… • Developers have a single, consistent development model where… • They control, configure, and add all services and applications they need under their own user account in their own development directory, and… • Resulting images can be run using all three models: closed, attached-data, and for additional development.
  • 37. The Sample Application docker run -i -t --rm -p 80:8080 -p 443:8443 chapdev/chaperone-lemp /bin/bash
  • 40. Warning! • In use in production, but just released this month as open-source. Though well-tested and documented, it is still a work in progress. • Chaperone itself is platform neutral, but tools for creating the development environment may need minor tweaking for Kitematic or boot2docker systems. Recommended environment is Linux host. • Images have been tested under CentOS but there is no CentOS base image yet (coming soon).
  • 41. Q&A ++ me: http://garywiz.com chaperone: https://github.com/garywiz/chaperone documentation: http://garywiz.github.io/chaperone chaperone-baseimage and friends: https://github.com/garywiz/chaperone-docker on Docker Hub: https://registry.hub.docker.com/repos/chapdev/

Editor's Notes

  1. End with: “How can we overcome this? First, let’s consider developers themselves…”
  2. These are often at odds with the reality of organisations and businesses…
  3. End with: HOW?
  4. End with: “SO WE’LL QUICKLY SWITCH TO BEING TECHNICAL…”