SlideShare a Scribd company logo
Continuous	Delivery	with	Containers:
The	Good,	the	Bad,	and	the	Ugly
Daniel	Bryant	
@danielbryantuk
Containers:	Expectations	versus	reality
11/06/2017 @danielbryantuk
“DevOps”
Setting	the	scene…
• Continuous	delivery	is	a	large	topic
• PaaS	and	Serverless are	super	interesting…
• But	I’m	assuming	you’re	all-in	on	containers
• Focusing	today	on	the	process	and	tooling
• No	live	coding	today
• Mini-book	contains	more	details	(thanks	nginx!)
11/06/2017 @danielbryantuk
http://bit.ly/2jWDSF7
TL;DR	– Containers	and	CD
• Container	image	becomes	the	build	pipeline	‘single	binary’
• Adding	metadata	to	containers	images	is	vital,	but	challenging
• Must	validate	container	constraints	(NFRs)
• Cultivate	container	‘mechanical	sympathy’
11/06/2017 @danielbryantuk
@danielbryantuk
• Independent	Technical	Consultant,	CTO	at	SpectoLabs
• Agile,	architecture,	CI/CD,	DevOps	
• Java,	Go,	JS,	microservices,	cloud,	containers
• Leading	change	through	the	application	of	technology	and	teams
11/06/2017 @danielbryantuk
Continuous	Delivery
11/06/2017 @danielbryantuk
Continuous	Delivery
• Produce	valuable	and	robust	software	in	short	cycles
• Optimising for	feedback	and	learning
• Not (necessarily)	Continuous	Deployment
11/06/2017 @danielbryantuk
Creation	of	a	build	pipeline	is	mandatory	for	continuous	delivery
11/06/2017 @danielbryantuk
11/06/2017 @danielbryantuk
The	Impact	of	containers	on	CD
11/06/2017 @danielbryantuk
Container	technology	(and	CD)
• OS-level	virtualisation
• cgroups,	namespaces,	rootfs
• Package	and	execute	software
• Container	image	==	‘single	binary’
11/06/2017 @danielbryantuk
11/06/2017 @danielbryantuk
11/06/2017 @danielbryantuk
Creating	a	pipeline	for	containers
11/06/2017 @danielbryantuk
11/06/2017 @danielbryantuk
Make	your	dev	environment	like	production
• Develop	locally	or	copy/code	in	container
• Must	build/test	containers	locally
• Perform	(at	least)	happy	path	tests	
11/06/2017 @danielbryantuk
Quick	Aside:	Running	*entire*	system	locally
11/06/2017 @danielbryantuk
https://news.ycombinator.com/item?id=13960107
https://opencredo.com/working-locally-with-microservices/
https://www.datawire.io/telepresence/ |	https://hoverfly.io/
Make	your	dev	environment	like	production
• Develop	locally	or	copy/code	in	container
• Must	build/test	containers	locally
• Perform	(at	least)	happy	path	tests	
• Use	identical	base	images	from	production
• With	same	configuration
11/06/2017 @danielbryantuk
Lesson	learned:	Dockerfile content	is	super important
• OS	choice
• Configuration	
• Build	artifacts
• Exposing	ports
• Java
• JDK	vs	JRE	and	Oracle	vs	OpenJDK?
• Golang
• Statically	compiled	binary	in	scratch?
• Python
• Virtualenv?
11/06/2017 @danielbryantuk
Please	talk	to	the	sysadmin	people:
Their	operational	knowledge	is	invaluable
11/06/2017 @danielbryantuk
Different	test	and	prod	containers?
• Create	“test”	version	of	container
• Full	OS	(e.g.	Ubuntu)
• Test	tools	and	data
• Easy	to	see	app/configuration	drift
• Use	test	sidecar	containers	instead
• ONTEST	proposal	by	Alexi	Ledenev
11/06/2017 @danielbryantuk
http://blog.terranillius.com/post/docker_testing/
Docker	multi-stage	builds
11/06/2017 @danielbryantuk
http://blog.alexellis.io/mutli-stage-docker-builds/
https://github.com/moby/moby/pull/31257
https://github.com/moby/moby/pull/32063
11/06/2017 @danielbryantuk
Building	images	with	Jenkins
• My	report	covers	this
• Build	as	usual…
• Build	Docker	Image
• Cloudbees	Docker	Build	and	Publish	Plugin
• Push	image	to	registry
11/06/2017 @danielbryantuk
Storing	in	an	image	registry	(DockerHub)
11/06/2017 @danielbryantuk
Metadata	– Beware	of	“latest”	Docker	Tag
• Beware	of	the	‘latest’	Docker	tag
• “Latest”	simply	means	
• the	last	build/tag	that	ran	without	
a	specific	tag/version	specified
• Ignore	“latest”	tag
• Version	your	tags,	every	time
• danielbryantuk/test:2.4.1
11/06/2017 @danielbryantuk
Lesson	learned:	Metadata	is	valuable
• Application	metadata
• Version	/	GIT	SHA
• Build	metadata
• Build	date
• Image	name
• Vendor
• Quality	metadata
• QA	control
• Security	audited	etc
11/06/2017 @danielbryantuk
Metadata	- Adding	Labels	at	build	time
• Docker	Labels	
• Add	key/value	data	to	image
11/06/2017 @danielbryantuk
Metadata	- Adding	Labels	at	build	time
• Microscaling Systems’	Makefile
• Labelling	automated	builds	on	
DockerHub (h/t	Ross	Fairbanks)
• Create	file	‘/hooks/build’
• label-schema.org	
• microbadger.com
11/06/2017 @danielbryantuk
Metadata	- Adding	Labels	at	runtime
11/06/2017 @danielbryantuk
$ docker run -d --label
uk.co.danielbryant.lbname=frontdoor nginx
• Can	’docker commit’,	but	creates	new	image
• Not	possible	to	update	running	container
• Docker	Proposal:	Update	labels #21721
11/06/2017 @danielbryantuk
Component	testing
11/06/2017 @danielbryantuk
Testing:	Jenkins	Pipeline	(as	code)
11/06/2017 @danielbryantuk
11/06/2017 @danielbryantuk
Testing	individual	containers
11/06/2017 @danielbryantuk
Integration	testing
11/06/2017 @danielbryantuk
Introducing	Docker	Compose
11/06/2017 @danielbryantuk
Docker	Compose	&	Jenkins	Pipeline
11/06/2017 @danielbryantuk
Testing	NFRs	in	the	build	pipeline
• Performance	and	Load	testing	
• Gatling	/	jmeter
• Flood.io
• Security	testing	
• Findsecbugs /	OWASP	Dependency	check
• Bdd-security	(OWASP	ZAP)	/	Arachni
• Gauntlt /	Serverspec
• Docker	Bench	for	Security	/	CoreOS	Clair
11/06/2017 @danielbryantuk
Delaying	NFRs	to	the	‘Last	Responsible	Moment’
• Newsflash!
• Sometimes	the	last	responsible	
moment	is	up-front!
• Containers/microservices don’t	
make	this	easier
• Sometimes	more	difficult…
11/06/2017 @danielbryantuk
Mechanical	sympathy:	Docker	and	Java
• Watch	for	JVM	cgroup/taskset awareness
• getAvailableProcessors()	may	incorrectly	report	the	number	of	cpus in	Docker	(JDK-8140793)
• Runtime.availableProcessors()	ignores	Linux	taskset command	(JDK-6515172)
• …because	default fork/join	thread	pool	sizes	is	based	from	host	CPU	count	etc
• Set	container	memory	appropriately	
• JVM	requirements	=	Heap	size	(Xmx)	+	Metaspace +	JVM	overhead
• Account	for	native	thread	requirements	e.g.	thread	stack	size	(Xss)
• Entropy	
• Host	entropy	can	soon	be	exhausted	by	crypto	operations
11/06/2017 @danielbryantuk 41
Observability	is	core	to	continuous	delivery
11/06/2017 @danielbryantuk
www.infoq.com/articles/monitoring-containers-at-scale
Containers	are	not	a	silver	bullet
11/06/2017 @danielbryantuk
Moving	to	containers:	Going	all-in?
11/06/2017 @danielbryantuk
OR
Should	I	build	my	own	container	platform?
Probably	not
(Unless	you	are	Pivotal,	IBM	or	Deis)
Whatever	you	decide…
push	it	through	a	pipeline	ASAP!
11/06/2017 @danielbryantuk
Using	containers	does	not	obviate	the	need	for	
good	architectural	practices
11/06/2017 @danielbryantuk
11/06/2017 @danielbryantuk
https://speakerdeck.com/caseywest/containercon-north-america-cloud-anti-patterns
Summary
11/06/2017 @danielbryantuk
In	summary
• Continuous	delivery	is	vitally	important	in	modern	architectures/ops
• Container	images	must	be	the	(single)	source	of	truth	within	pipeline
• And	metadata	added	as	appropriate…
• Mechanical	sympathy	is	important	(assert	properties	in	the	pipeline)
• Not	all	developers	are	operationally	aware
• The	tooling	is	now	becoming	stable/mature
• We	need	to	re-apply	existing	CD	practices	with	new	technologies/tooling
11/06/2017 @danielbryantuk
Bedtime	reading
11/06/2017 @danielbryantuk
Thanks	for	listening
• Any	questions?
• Feel	free	to	contact	me
• @danielbryantuk
• daniel.bryant@specto.io
11/06/2017 @danielbryantuk
http://bit.ly/2jWDSF7
Bonus	slides	(for	extra	context)
11/06/2017 @danielbryantuk
Containerise an	existing	(monolithic)	app?
• For
• We	know	the	monolith	well
• Allows	homogenization	of	the	
pipeline	and	deployment	platform
• Can	be	a	demonstrable	win	for	
tech	and	the	business
• Against
• Can	be	difficult	(100+	line	scripts)
• Often	not	designed	for	operation	
within	containers,	nor	cloud	native
• Putting	lipstick	on	a	pig?
11/06/2017 @danielbryantuk
Key	lessons	learned
• Conduct	an	architectural	review	
• Architecture	for	Developers,	by	Simon	Brown
• Architecture	Interview,	by	Susan	Fowler
• Look	for	data	ingress/egress
• File	system	access
• Support	resource	constraints/transience
• Optimise for	quick	startup	and	shutdown	
• Evaluate	approach	to	concurrency
• Store	configuration	(secrets)	remotely
11/06/2017 @danielbryantuk
New	design	patterns
11/06/2017 @danielbryantuk
bit.ly/2efe0TP
Microservices…
Containers	and	microservices are	
complementary
Testing	and	deployment	change
11/06/2017 @danielbryantuk
https://specto.io/blog/recipe-for-designing-building-testing-microservices.html
11/06/2017 @danielbryantuk
11/06/2017 @danielbryantuk
11/06/2017 @danielbryantuk

More Related Content

PDF
CraftConf 2017 "Microservices: The Organisational and People Impact"
PPTX
vJUG 2017 "Continuous Delivery with Java and Docker: The Good, the Bad, and t...
PDF
JAXDevOps 2017 "The Seven (More) Deadly Sins of Microservices
PDF
#AATC2017: "Continuous Delivery with Containers: The Trials and Tribulations"
PDF
GOTO Chicago/CraftConf 2017 "The Seven (More) Deadly Sins of Microservices"
PPTX
O'Reilly SACON "Continuous Delivery Patterns for Contemporary Architecture"
PDF
JAXLondon 2017 "Continuous Delivery with Containers and Java"
PDF
Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"
CraftConf 2017 "Microservices: The Organisational and People Impact"
vJUG 2017 "Continuous Delivery with Java and Docker: The Good, the Bad, and t...
JAXDevOps 2017 "The Seven (More) Deadly Sins of Microservices
#AATC2017: "Continuous Delivery with Containers: The Trials and Tribulations"
GOTO Chicago/CraftConf 2017 "The Seven (More) Deadly Sins of Microservices"
O'Reilly SACON "Continuous Delivery Patterns for Contemporary Architecture"
JAXLondon 2017 "Continuous Delivery with Containers and Java"
Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"

What's hot (20)

PPTX
Devoxx 2017 "Continuous Delivery with Containers: The Good, the Bad, and the ...
PDF
AllDayDevOps: "Microservices: The People and Organisational Impact"
PPTX
vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"
PDF
OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"
PDF
microXchg 2017: "Microservices: The People and Organisational Impact"
PPTX
O'Reilly SACON NY 2018 "Continuous Delivery Patterns for Contemporary Archite...
PDF
DevOpsNorth 2017 "Seven (More) Deadly Sins of Microservices"
PPTX
O'Reilly/Nginx 2016: "Continuous Delivery with Containers: The Trials and Tri...
PDF
The seven more deadly sins of microservices final
PDF
Microservices: Organizing Large Teams for Rapid Delivery
PPTX
DockerCon EU 2018 "Continuous Delivery with Docker and Java"
PPTX
London k8s "Ambassador: Open Source Kubernetes Edge Gateway"
PPTX
CloudNativeLondon 2017: "What is a Service Mesh, and Do I Need One when Devel...
PDF
Lisbon DevOps: "Seven (More) Deadly Sins of Microservices"
PPTX
Minimalism Revisited — Let’s Stop Developing Content that No One Wants
PPTX
Metaswitch 2018: "Guns, Germs and Steel (and Microservices)"
PDF
How To Train Your Microservice
PPTX
New Directions 2015 – Changes in Content Best Practices
PDF
DataOps in Financial Services: enable higher-quality test ing + lower levels ...
PDF
Dutchcontainerdays
Devoxx 2017 "Continuous Delivery with Containers: The Good, the Bad, and the ...
AllDayDevOps: "Microservices: The People and Organisational Impact"
vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"
OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"
microXchg 2017: "Microservices: The People and Organisational Impact"
O'Reilly SACON NY 2018 "Continuous Delivery Patterns for Contemporary Archite...
DevOpsNorth 2017 "Seven (More) Deadly Sins of Microservices"
O'Reilly/Nginx 2016: "Continuous Delivery with Containers: The Trials and Tri...
The seven more deadly sins of microservices final
Microservices: Organizing Large Teams for Rapid Delivery
DockerCon EU 2018 "Continuous Delivery with Docker and Java"
London k8s "Ambassador: Open Source Kubernetes Edge Gateway"
CloudNativeLondon 2017: "What is a Service Mesh, and Do I Need One when Devel...
Lisbon DevOps: "Seven (More) Deadly Sins of Microservices"
Minimalism Revisited — Let’s Stop Developing Content that No One Wants
Metaswitch 2018: "Guns, Germs and Steel (and Microservices)"
How To Train Your Microservice
New Directions 2015 – Changes in Content Best Practices
DataOps in Financial Services: enable higher-quality test ing + lower levels ...
Dutchcontainerdays
Ad

Similar to DevOpsCon 2017 "Continuous Delivery with Containers" (20)

PPTX
Continuous Delivery with Containers: The Good, the Bad, and the Ugly - Daniel...
PPTX
ContainerSched 2017 "Continuous Delivery with Containers: The Good, the Bad, ...
PPTX
Continuous Delivery with Containers: The Good, the Bad, and the Ugly
PPTX
Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...
PPTX
O'Reilly 2016: "Continuous Delivery with Containers: The Trials and Tribulati...
PPTX
SATURN 2018 "Continuous Delivery with Containers" Extended 90 version
PPTX
LJC Mashup "Building Java Microservices for the Cloud && Chuck Norris Doesn't...
PDF
muCon 2016: "Seven (More) Deadly Sins of Microservices"
PPTX
LJC 05/14 "Cloud Developer's DHARMA"
PPTX
CodeOne SF 2018 "Continuous Delivery with Containers: Lessons Learned"
PPTX
JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications
PDF
Haufe #msaday - Seven More Deadly Sins of Microservices by Daniel Bryant
PPTX
O'Reilly 2017: "Introduction to Service Meshes"
PPTX
Scale the Cloud - Skaluj chmurę
PPTX
JAX DevOps 2018 "Continuous Delivery Patterns for Modern Architectures"
PPTX
OReilly SACON 2016 "A Practical Guide for Continuous Delivery with Containers"
PDF
Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant
PDF
Building a microservice ecosystem
PDF
Haufe #msaday: "Building a Microservice Ecosystem"
PDF
Ambassador Developer Office Hours: Summer of Kubernetes Ship Week 1: Intro to...
Continuous Delivery with Containers: The Good, the Bad, and the Ugly - Daniel...
ContainerSched 2017 "Continuous Delivery with Containers: The Good, the Bad, ...
Continuous Delivery with Containers: The Good, the Bad, and the Ugly
Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...
O'Reilly 2016: "Continuous Delivery with Containers: The Trials and Tribulati...
SATURN 2018 "Continuous Delivery with Containers" Extended 90 version
LJC Mashup "Building Java Microservices for the Cloud && Chuck Norris Doesn't...
muCon 2016: "Seven (More) Deadly Sins of Microservices"
LJC 05/14 "Cloud Developer's DHARMA"
CodeOne SF 2018 "Continuous Delivery with Containers: Lessons Learned"
JavaOne 2014: Cloud Developer's DHARMA: Redefining 'done' for Cloud applications
Haufe #msaday - Seven More Deadly Sins of Microservices by Daniel Bryant
O'Reilly 2017: "Introduction to Service Meshes"
Scale the Cloud - Skaluj chmurę
JAX DevOps 2018 "Continuous Delivery Patterns for Modern Architectures"
OReilly SACON 2016 "A Practical Guide for Continuous Delivery with Containers"
Haufe #msaday - Building a Microservice Ecosystem by Daniel Bryant
Building a microservice ecosystem
Haufe #msaday: "Building a Microservice Ecosystem"
Ambassador Developer Office Hours: Summer of Kubernetes Ship Week 1: Intro to...
Ad

More from Daniel Bryant (20)

PDF
ITKonekt 2023: The Busy Platform Engineers Guide to API Gateways
PDF
CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...
PDF
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
PDF
Java Meetup 23: 'Debugging Microservices "Remocally" in Kubernetes with Telep...
PPTX
DevRelCon 2022: "Is Product Led Growth (PLG) the “DevOps” of the DevRel World"
PDF
Fall 22: "From Kubernetes to PaaS to... err, what's next"
PDF
Building Microservice Systems Without Cooking Your Laptop: Going “Remocal” wi...
PDF
KubeCrash 22: Debugging Microservices "Remocally" in Kubernetes with Telepres...
PDF
JAX London 22: Debugging Microservices "Remocally" in Kubernetes with Telepre...
PDF
CloudBuilders 2022: "The Past, Present, and Future of Cloud Native API Gateways"
PDF
KubeCon EU 2022: From Kubernetes to PaaS to Err What's Next
PDF
Devoxx UK 22: Debugging Java Microservices "Remocally" in Kubernetes with Tel...
PDF
DevXDay KubeCon NA 2021: "From Kubernetes to PaaS to Developer Control Planes"
PDF
JAX London 2021: Jumpstart Your Cloud Native Development: An Overview of Prac...
PDF
Container Days: Easy Debugging of Microservices Running on Kubernetes with Te...
PDF
Canadian CNCF: "Emissary-ingress 101: An introduction to the CNCF incubation-...
PDF
MJC 2021: "Debugging Java Microservices Running on Kubernetes with Telepresence"
PDF
LJC 4/21"Easy Debugging of Java Microservices Running on Kubernetes with Tele...
PDF
GOTOpia 2/2021 "Cloud Native Development Without the Toil: An Overview of Pra...
PPTX
HashiCorp Webinar: "Getting started with Ambassador and Consul on Kubernetes ...
ITKonekt 2023: The Busy Platform Engineers Guide to API Gateways
CraftConf 2023 "Microservice Testing Techniques: Mocks vs Service Virtualizat...
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
Java Meetup 23: 'Debugging Microservices "Remocally" in Kubernetes with Telep...
DevRelCon 2022: "Is Product Led Growth (PLG) the “DevOps” of the DevRel World"
Fall 22: "From Kubernetes to PaaS to... err, what's next"
Building Microservice Systems Without Cooking Your Laptop: Going “Remocal” wi...
KubeCrash 22: Debugging Microservices "Remocally" in Kubernetes with Telepres...
JAX London 22: Debugging Microservices "Remocally" in Kubernetes with Telepre...
CloudBuilders 2022: "The Past, Present, and Future of Cloud Native API Gateways"
KubeCon EU 2022: From Kubernetes to PaaS to Err What's Next
Devoxx UK 22: Debugging Java Microservices "Remocally" in Kubernetes with Tel...
DevXDay KubeCon NA 2021: "From Kubernetes to PaaS to Developer Control Planes"
JAX London 2021: Jumpstart Your Cloud Native Development: An Overview of Prac...
Container Days: Easy Debugging of Microservices Running on Kubernetes with Te...
Canadian CNCF: "Emissary-ingress 101: An introduction to the CNCF incubation-...
MJC 2021: "Debugging Java Microservices Running on Kubernetes with Telepresence"
LJC 4/21"Easy Debugging of Java Microservices Running on Kubernetes with Tele...
GOTOpia 2/2021 "Cloud Native Development Without the Toil: An Overview of Pra...
HashiCorp Webinar: "Getting started with Ambassador and Consul on Kubernetes ...

Recently uploaded (20)

PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
cuic standard and advanced reporting.pdf
PDF
Machine learning based COVID-19 study performance prediction
PPT
Teaching material agriculture food technology
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Modernizing your data center with Dell and AMD
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Review of recent advances in non-invasive hemoglobin estimation
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Chapter 3 Spatial Domain Image Processing.pdf
Network Security Unit 5.pdf for BCA BBA.
Building Integrated photovoltaic BIPV_UPV.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Reach Out and Touch Someone: Haptics and Empathic Computing
cuic standard and advanced reporting.pdf
Machine learning based COVID-19 study performance prediction
Teaching material agriculture food technology
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Unlocking AI with Model Context Protocol (MCP)
20250228 LYD VKU AI Blended-Learning.pptx
Encapsulation_ Review paper, used for researhc scholars
Digital-Transformation-Roadmap-for-Companies.pptx
Modernizing your data center with Dell and AMD
NewMind AI Weekly Chronicles - August'25 Week I
Bridging biosciences and deep learning for revolutionary discoveries: a compr...

DevOpsCon 2017 "Continuous Delivery with Containers"