SlideShare a Scribd company logo
Applications on

Autopilot

Tim Gross

@0x74696d (“tim”)

github.com/autopilotpattern
github.com/autopilotpattern
What if your containers were
self-aware and self-operating?
github.com/autopilotpattern
github.com/autopilotpattern
How do we get from dev
to prod?

• Service Discovery

• Load balancing

• Automated-failover

• Config changes

• Monitoring
github.com/autopilotpattern
App
github.com/autopilotpattern
Nginx
Consul
MySQL

Primary
MySQL

Replica
ES

Master
ES

Data
Kibana
Prometheus
Sales
Logstash
Customers
github.com/autopilotpattern
Nginx
Consul
/custom
ers
/sales
/sales/data
/customers/data
read/write
read-
only
MySQL

Primary
MySQL

Replica
ES

Master
ES

Data
Kibana
Prometheus
Sales
Logstash
Customers
Load Balancing
github.com/autopilotpattern
Nginx
Consul
/custom
ers
/sales
/sales/data
/customers/data
read/write
read-
only
async

replication
MySQL

Primary
MySQL

Replica
ES

Master
ES

Data
Kibana
Prometheus
Sales
Logstash
Customers
Replication & Fail-over
github.com/autopilotpattern
Nginx
Consul
/custom
ers
/sales
/sales/data
/customers/data
read/write
read-
only
async

replication
MySQL

Primary
MySQL

Replica
ES

Master
ES

Data
Kibana
Prometheus
Sales
Logstash
Customers
Service discovery
github.com/autopilotpattern
Nginx
Consul
/custom
ers
/sales
/sales/data
/customers/data
read/write
read-
only
async

replication
MySQL

Primary
MySQL

Replica
ES

Master
ES

Data
Kibana
Prometheus
Sales
Logstash
Customers
Logging
github.com/autopilotpattern
Nginx
Consul
/custom
ers
/sales
/sales/data
/customers/data
read/write
read-
only
async

replication
MySQL

Primary
MySQL

Replica
ES

Master
ES

Data
Kibana
Prometheus
Sales
Logstash
Customers
Monitoring
github.com/autopilotpattern
Problem: Service Discovery
github.com/autopilotpattern
App
Application
github.com/autopilotpattern
Database
App
Application w/ database
github.com/autopilotpattern
Database
App
Application w/ database
How does the app find
the DB?
Can we just use DNS?
github.com/autopilotpattern
Couchbase
App
CouchbaseCouchbaseCouchbase
Application w/ Couchbase
github.com/autopilotpattern
Couchbase
App
CouchbaseCouchbaseCouchbase
Application w/ Couchbase
Nodes coordinate
shards via IP address
Can’t use an A-record
github.com/autopilotpattern
Couchbase Couchbase CouchbaseCouchbaseCouchbase
App
Application w/ Couchbase
What happens when
we add a node?
github.com/autopilotpattern
Couchbase Couchbase CouchbaseCouchbaseCouchbase
App
Application w/ Couchbase
Does app respect
DNS TTL?
github.com/autopilotpattern
Problem: Load Balancing
github.com/autopilotpattern
Nginx
Customers Sales
Microservices application
/sales/data
/customers/data
/sales
/custom
ers
github.com/autopilotpattern
Nginx
SalesCustomers
/sales/data
/customers/data
/sales
/custom
ers
Microservices application
github.com/autopilotpattern
Nginx
SalesCustomers
/sales/data
/customers/data
/sales
/custom
ers
Microservices application
How do apps update
peers when we scale
out?
github.com/autopilotpattern
Nginx
SalesCustomers
/sales/data
/custom
ers/data
Microservices application
Route everything
thru Nginx (or LB)?
github.com/autopilotpattern
Nginx
SalesCustomers
/sales/data
/custom
ers/data
Microservices application
How do we update
Nginx backends?
Adds network path
length and SPoF
github.com/autopilotpattern
Sales
Sidecar/

Proxy
Customers http://localhost http://192.168.1.1
ex. Bamboo
Compute
node
github.com/autopilotpattern
Sales
Sidecar/

Proxy
Customers http://localhost http://192.168.1.1
How do we update
proxy config?
Adds network path
lengthCompute
node
github.com/autopilotpattern
Nginx
Sales
Consul
/custom
ers
/sales
/sales/data
/customers/data
Customers
Microservices application

w/ discovery

catalog
github.com/autopilotpattern
Nginx
Sales
Consul
/custom
ers
/sales
/sales/data
/customers/data
Customers
How do we make
existing applications
use it?
Microservices application

w/ discovery

catalog
github.com/autopilotpattern
Problem: Automated-Failover
github.com/autopilotpattern
read/write read-only
async

replication
App
Primary Replica
MySQL with replication
github.com/autopilotpattern
read/write read-only
async

replication
App
Primary Replica
MySQL with replication
How does client
find DB?
How does replica find
primary?
How does primary tell
replica where to start?
github.com/autopilotpattern
read/write read-only
async

replication
App
Primary Replica
MySQL with replication How do we
update client on
failover?
How do we promote
a replica?
How do we
orchestrate
backups?
github.com/autopilotpattern
Solutions that don’t work:

Configuration Management

(ex. Chef, Puppet, Ansible)
github.com/autopilotpattern
• No CM server in local development

• No service discovery on change
github.com/autopilotpattern
Solutions that don’t work:

*aaS

(ex. PaaS, DBaaS)
github.com/autopilotpattern
• Vendor lock-in

• Poor performance

• Very expensive
github.com/autopilotpattern
Solutions that don’t work:

Mega-orchestrator

(ex. Kubernetes)
github.com/autopilotpattern
Shifts
responsibility for
app behavior
away from app
developers
github.com/autopilotpattern
Shifts
responsibility for
app behavior
away from app
developers
github.com/autopilotpattern
What if your containers were
self-aware and self-operating?
github.com/autopilotpattern
github.com/autopilotpattern
“[a] pattern where containers
autonomously adapt to
changes in their environment
and coordinate their actions
thru a globally shared state”

Lukasz Guminski,

Container Solutions
http://container-solutions.com/containerpilot-on-mantl/
github.com/autopilotpattern
Make applications responsible for:

Startup

Shutdown

Scaling

Discovery

Recovery

Telemetry
github.com/autopilotpattern
Empower application
development teams
github.com/autopilotpattern
3 requirements
github.com/autopilotpattern
#1: Ability to provision
containers across multiple
compute nodes
github.com/autopilotpattern
VM or physical hardware VM or physical hardware VM or physical hardware
Nginx Consul
MySQL

Primary
ES

Master
Prometheus LogstashCustomers
Nginx Consul
MySQL

Primary
ES

Master
Prometheus
Logstash
Customers Customers
Cluster management & provisioning
github.com/autopilotpattern
Options for cluster management
and container placement:
github.com/autopilotpattern
#2: Network virtualization
github.com/autopilotpattern
IP inside the
container
IP outside the
container
==
github.com/autopilotpattern
NAT
Sales
Customers
192.168.1.101Compute

Node
172.17.0.2:80
192.168.1.100:32380
Docker bridge networking
Consul
github.com/autopilotpattern
NAT
Sales
Customers
Consul
Compute

Node
192.168.1.100:32380
Docker bridge networking
“I’m listening on

172.17.0.2:80”
172.17.0.2:80
github.com/autopilotpattern
NAT
Sales
Customers
Consul
Compute

Node
192.168.1.100:32380
Docker bridge networking
“Where is

Customers?”
“172.17.0.2:80”
172.17.0.2:80
github.com/autopilotpattern
NAT
Sales
Customers
Consul
Compute

Node
192.168.1.100:32380
Docker bridge networking
WTF???!!!
172.17.0.2:80
172.17.0.2:80
No route to host!
github.com/autopilotpattern
Sales
Customers
Compute

Node
Docker host networking
Consul
192.168.1.101
192.168.1.100:80
github.com/autopilotpattern
Sales
Customers
Compute

Node
Docker host networking
Consul
192.168.1.101
192.168.1.100:80
“I’m listening on

192.168.1.100:80”
github.com/autopilotpattern
Sales
Customers
Compute

Node
Docker host networking
Consul
192.168.1.101
192.168.1.100:80
“I’m listening on

192.168.1.100:80”
Customers
192.168.1.100:80
github.com/autopilotpattern
Sales
Customers
Compute

Node
Docker host networking
Consul
192.168.1.101
192.168.1.100:80
“I’m listening on

192.168.1.100:80”
Customers
192.168.1.100:80
Port conflicts!
github.com/autopilotpattern
Sales
Customers
Compute

Node
Overlay networking
Consul
192.168.1.101
192.168.1.100:80
“I’m listening on

192.168.1.100:80”
Customers
192.168.1.102:80
github.com/autopilotpattern
Sales
Customers
Compute

Node
Overlay networking
Consul
192.168.1.101
192.168.1.100:80
“I’m listening on

192.168.1.102:80”
Customers
192.168.1.102:80
github.com/autopilotpattern
Options for overlay networking:
github.com/autopilotpattern
#3: Infrastructure-backed
service discovery
github.com/autopilotpattern
Nginx
Sales
Consul
Customers
Microservices app
github.com/autopilotpattern
Nginx
Sales
Consul
Customers
Microservices app How do we bootstrap
service catalog HA?
How do
services find
service
catalog?
github.com/autopilotpattern
Options to bootstrap service catalog:
infrastructure-backed DNS
* run on each node* Container Name
Service (CNS)
github.com/autopilotpattern
#4: We might need some help
github.com/autopilotpattern
App-centric micro-orchestrator that runs
inside the container.

User-defined behaviors:

• Lifecycle hooks (preStop, preStop,
postStop)

• Health checks w/ heart beats

• Watch discovery catalog for changes

• Update config on upstream changes

• Gather performance metrics
github.com/autopilotpattern
Sales
Container
Pilot
Application
Application

container
http://localhost http://192.168.1.1
Side car?
github.com/autopilotpattern
Sales
Container
Pilot
Application
Application

container
http://localhost http://192.168.1.1
Not a side car!
github.com/autopilotpattern
Sales
Container
Pilot
Application
Consul
Where is

Sales?
Application

container
github.com/autopilotpattern
Sales
Container
Pilot
Application
Consul
Where is

Sales?
192.168.1.100

192.168.1.101

192.168.1.102
Application

container
github.com/autopilotpattern
Sales
Container
Pilot
Application
Consul
Where is

Sales?
192.168.1.100

192.168.1.101

192.168.1.102
Application

container
onChange

event
github.com/autopilotpattern
Sales
Container
Pilot
Application
http://192.168.1.100
Consul
Where is

Sales?
192.168.1.100

192.168.1.101

192.168.1.102
Application

container
onChange

event
github.com/autopilotpattern
Application
onChange

event
User-defined behavior hooks:

• preStart	
• preStop	
• postStop	
• health	
• onChange	
• sensor	
• task
Application

container
github.com/autopilotpattern
read/write read-only
async

replication
App
Primary Replica
Consul
MySQL with replication
github.com/autopilotpattern
~	$	git	clone	git@github.com:autopilotpattern/mysql.git	
~	$	cd	mysql	
~/mysql	$	tree	--dirsfirst	
.	
├──	bin	
│			└──	manage.py	
├──	etc	
│			├──	containerpilot.json	
│			└──	my.cnf.tmpl	
├──	tests		
├──	_env	
├──	Dockerfile	
├──	docker-compose.yml	
├──	local-compose.yml	
└──	setup.sh
github.com/autopilotpattern
~/mysql/docker-compose.yml
mysql:	
				image:	autopilotpattern/mysql:latest	
				mem_limit:	4g	
				restart:	always	
				#	expose	for	linking,	but	each	container	gets	a	private	IP	for	
				#	internal	use	as	well	
				expose:	
						-	3306	
				labels:	
						-	triton.cns.services=mysql	
				env_file:	_env	
				environment:	
						-	CONTAINERPILOT=file:///etc/containerpilot.json
github.com/autopilotpattern
~/mysql/docker-compose.yml
mysql:	
				image:	autopilotpattern/mysql:latest	
				mem_limit:	4g	
				restart:	always	
				#	expose	for	linking,	but	each	container	gets	a	private	IP	for	
				#	internal	use	as	well	
				expose:	
						-	3306	
				labels:	
						-	triton.cns.services=mysql	
				env_file:	_env	
				environment:	
						-	CONTAINERPILOT=file:///etc/containerpilot.json	
Infrastructure-backed
service discovery
requirement
github.com/autopilotpattern
~/mysql/docker-compose.yml
mysql:	
				image:	autopilotpattern/mysql:latest	
				mem_limit:	4g	
				restart:	always	
				#	expose	for	linking,	but	each	container	gets	a	private	IP	for	
				#	internal	use	as	well	
				expose:	
						-	3306	
				labels:	
						-	triton.cns.services=mysql	
				env_file:	_env	
				environment:	
						-	CONTAINERPILOT=file:///etc/containerpilot.json	
Credentials from
environment
github.com/autopilotpattern
~/workshop/mysql	$	./setup.sh	/path/to/private/key.pem	
~/workshop/mysql	$	emacs	_env	
MYSQL_USER=me	
MYSQL_PASSWORD=password1	
MYSQL_REPL_USER=repl	
MYSQL_REPL_PASSWORD=password2	
MYSQL_DATABASE=mydb	
MANTA_BUCKET=/<username>/stor/triton-mysql	
MANTA_USER=<username>	
MANTA_SUBUSER=	
MANTA_ROLE=	
MANTA_URL=https://us-east.manta.joyent.com	
MANTA_KEY_ID=1a:b8:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx	
MANTA_PRIVATE_KEY=-----BEGIN	RSA	PRIVATE	KEY——#…	
CONSUL=consul.svc.0f06a3e0-a0da-eb00-a7ae-989d4e44e2ad.us-east-1.cns.joyent.com
github.com/autopilotpattern
~/mysql	$	docker-compose	-p	my	up	-d	
Creating	my_consul_1	
Creating	my_mysql_1	
~/mysql	$	docker-compose	-p	my	ps	
Name																			Command																State			Ports	
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––	
my_consul_1				/bin/start	-server	-bootst...		Up				53/tcp,	53/udp,	8300/tcp...	
my_mysql_1					containerpilot	mysqld…									Up				0.0.0.0:3600
github.com/autopilotpattern
~/mysql	$	docker-compose	-p	my	scale	mysql=2	
Creating	my_mysql_2	
~/mysql	$	docker-compose	-p	my	ps	
Name																			Command																State			Ports	
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––	
my_consul_1				/bin/start	-server	-bootst...		Up				53/tcp,	53/udp,	8300/tcp...	
my_mysql_1					containerpilot	mysqld…									Up				0.0.0.0:3600	
my_mysql_2					containerpilot	mysqld…									Up				0.0.0.0:3600
github.com/autopilotpattern
FROM	percona:5.6	
RUN	apt-get	update	&&	apt-get	install	-y		
								python	python-dev	gcc	curl	percona-xtrabackup	
#	get	Python	drivers	MySQL,	Consul,	and	Manta	
RUN	curl	-Ls	-o	get-pip.py	https://bootstrap.pypa.io/get-pip.py	&&		
				python	get-pip.py	&&	pip	install		
								PyMySQL==0.6.7	python-Consul==0.4.7	manta==2.5.0	mock==2.0.0	
#	get	ContainerPilot	release	(see	repo	for	checksum	verification!)	
RUN	curl	-Lo	/tmp/cp.tar.gz	https://github.com/joyent/containerpilot/…	
			tar	-xz	-f	/tmp/cp.tar.gz	&&	mv	/containerpilot	/usr/local/bin/	
#	configure	ContainerPilot	and	MySQL	
COPY	etc/*	/etc/	
COPY	bin/*	/usr/local/bin/	
#	override	the	parent	entrypoint	
ENTRYPOINT	[]	
#	use	--console	to	get	error	logs	to	stderr	
CMD	[	“containerpilot",	“mysqld”,		
						"--console",		
						"--log-bin=mysql-bin",		
						"--log_slave_updates=ON",		
						"--gtid-mode=ON",		
						"--enforce-gtid-consistency=ON"		
]	
~/mysql/Dockerfile
github.com/autopilotpattern
FROM	percona:5.6	
RUN	apt-get	update	&&	apt-get	install	-y		
								python	python-dev	gcc	curl	percona-xtrabackup	
#	get	Python	drivers	MySQL,	Consul,	and	Manta	
RUN	curl	-Ls	-o	get-pip.py	https://bootstrap.pypa.io/get-pip.py	&&		
				python	get-pip.py	&&	pip	install		
								PyMySQL==0.6.7	python-Consul==0.4.7	manta==2.5.0	mock==2.0.0	
#	get	ContainerPilot	release	(see	repo	for	checksum	verification!)	
RUN	curl	-Lo	/tmp/cp.tar.gz	https://github.com/joyent/containerpilot/…	
			tar	-xz	-f	/tmp/cp.tar.gz	&&	mv	/containerpilot	/usr/local/bin/	
#	configure	ContainerPilot	and	MySQL	
COPY	etc/*	/etc/	
COPY	bin/*	/usr/local/bin/	
#	override	the	parent	entrypoint	
ENTRYPOINT	[]	
#	use	--console	to	get	error	logs	to	stderr	
CMD	[	“containerpilot",	“mysqld”,		
						"--console",		
						"--log-bin=mysql-bin",		
						"--log_slave_updates=ON",		
						"--gtid-mode=ON",		
						"--enforce-gtid-consistency=ON"		
]	
~/mysql/Dockerfile
github.com/autopilotpattern
FROM	percona:5.6	
RUN	apt-get	update	&&	apt-get	install	-y		
								python	python-dev	gcc	curl	percona-xtrabackup	
#	get	Python	drivers	MySQL,	Consul,	and	Manta	
RUN	curl	-Ls	-o	get-pip.py	https://bootstrap.pypa.io/get-pip.py	&&		
				python	get-pip.py	&&	pip	install		
								PyMySQL==0.6.7	python-Consul==0.4.7	manta==2.5.0	mock==2.0.0	
#	get	ContainerPilot	release	(see	repo	for	checksum	verification!)	
RUN	curl	-Lo	/tmp/cp.tar.gz	https://github.com/joyent/containerpilot/…	
			tar	-xz	-f	/tmp/cp.tar.gz	&&	mv	/containerpilot	/usr/local/bin/	
#	configure	ContainerPilot	and	MySQL	
COPY	etc/*	/etc/	
COPY	bin/*	/usr/local/bin/	
#	override	the	parent	entrypoint	
ENTRYPOINT	[]	
#	use	--console	to	get	error	logs	to	stderr	
CMD	[	“containerpilot",	“mysqld”,		
						"--console",		
						"--log-bin=mysql-bin",		
						"--log_slave_updates=ON",		
						"--gtid-mode=ON",		
						"--enforce-gtid-consistency=ON"		
]	
~/mysql/Dockerfile
github.com/autopilotpattern
FROM	percona:5.6	
RUN	apt-get	update	&&	apt-get	install	-y		
								python	python-dev	gcc	curl	percona-xtrabackup	
#	get	Python	drivers	MySQL,	Consul,	and	Manta	
RUN	curl	-Ls	-o	get-pip.py	https://bootstrap.pypa.io/get-pip.py	&&		
				python	get-pip.py	&&	pip	install		
								PyMySQL==0.6.7	python-Consul==0.4.7	manta==2.5.0	mock==2.0.0	
#	get	ContainerPilot	release	(see	repo	for	checksum	verification!)	
RUN	curl	-Lo	/tmp/cp.tar.gz	https://github.com/joyent/containerpilot/…	
			tar	-xz	-f	/tmp/cp.tar.gz	&&	mv	/containerpilot	/usr/local/bin/	
#	configure	ContainerPilot	and	MySQL	
COPY	etc/*	/etc/	
COPY	bin/*	/usr/local/bin/	
#	override	the	parent	entrypoint	
ENTRYPOINT	[]	
#	use	--console	to	get	error	logs	to	stderr	
CMD	[	“containerpilot",	“mysqld”,		
						"--console",		
						"--log-bin=mysql-bin",		
						"--log_slave_updates=ON",		
						"--gtid-mode=ON",		
						"--enforce-gtid-consistency=ON"		
]	
~/mysql/Dockerfile
github.com/autopilotpattern
~/mysql/etc/containerpilot.json
{	
		"consul":	"{{	.CONSUL	}}:8500",	
		"preStart":	"python	/usr/local/bin/manage.py",	
		"services":	[	
				{	
						"name":	"mysql",	
						"port":	3306,	
						"health":	"python	/usr/local/bin/manage.py	health",	
						"poll":	5,	
						"ttl":	25	
				}	
		],	
		"backends":	[	
				{	
						"name":	"mysql-primary",	
						"poll":	10,	
						"onChange":	"python	/usr/local/bin/manage.py	on_change"	
				}	
		]	
}
github.com/autopilotpattern
~/mysql/etc/containerpilot.json
{	
		"consul":	"{{	.CONSUL	}}:8500",	
		"preStart":	"python	/usr/local/bin/manage.py",	
		"services":	[	
				{	
						"name":	"mysql",	
						"port":	3306,	
						"health":	"python	/usr/local/bin/manage.py	health",	
						"poll":	5,	
						"ttl":	25	
				}	
		],	
		"backends":	[	
				{	
						"name":	"mysql-primary",	
						"poll":	10,	
						"onChange":	"python	/usr/local/bin/manage.py	on_change"	
				}	
		]	
}	
Environment variable
interpolation
github.com/autopilotpattern
~/mysql/etc/containerpilot.json
{	
		"consul":	"{{	.CONSUL	}}:8500",	
		"preStart":	"python	/usr/local/bin/manage.py",	
		"services":	[	
				{	
						"name":	"mysql",	
						"port":	3306,	
						"health":	"python	/usr/local/bin/manage.py	health",	
						"poll":	5,	
						"ttl":	25	
				}	
		],	
		"backends":	[	
				{	
						"name":	"mysql-primary",	
						"poll":	10,	
						"onChange":	"python	/usr/local/bin/manage.py	on_change"	
				}	
		]	
}	
Service definition
github.com/autopilotpattern
~/mysql/etc/containerpilot.json
{	
		"consul":	"{{	.CONSUL	}}:8500",	
		"preStart":	"python	/usr/local/bin/manage.py",	
		"services":	[	
				{	
						"name":	"mysql",	
						"port":	3306,	
						"health":	"python	/usr/local/bin/manage.py	health",	
						"poll":	5,	
						"ttl":	25	
				}	
		],	
		"backends":	[	
				{	
						"name":	"mysql-primary",	
						"poll":	10,	
						"onChange":	"python	/usr/local/bin/manage.py	on_change"	
				}	
		]	
}	
Backend definition
github.com/autopilotpattern
~/mysql/etc/containerpilot.json
{	
		"consul":	"{{	.CONSUL	}}:8500",	
		"preStart":	"python	/usr/local/bin/manage.py",	
		"services":	[	
				{	
						"name":	"mysql",	
						"port":	3306,	
						"health":	"python	/usr/local/bin/manage.py	health",	
						"poll":	5,	
						"ttl":	25	
				}	
		],	
		"backends":	[	
				{	
						"name":	"mysql-primary",	
						"poll":	10,	
						"onChange":	"python	/usr/local/bin/manage.py	on_change"	
				}	
		]	
}	
Huh? This isn’t in our
docker-compose.yml
github.com/autopilotpattern
~/mysql/etc/containerpilot.json
{	
		"consul":	"{{	.CONSUL	}}:8500",	
		"preStart":	"python	/usr/local/bin/manage.py",	
		"services":	[	
				{	
						"name":	"mysql",	
						"port":	3306,	
						"health":	"python	/usr/local/bin/manage.py	health",	
						"poll":	5,	
						"ttl":	25	
				}	
		],	
		"backends":	[	
				{	
						"name":	"mysql-primary",	
						"poll":	10,	
						"onChange":	"python	/usr/local/bin/manage.py	on_change"	
				}	
		]	
}	
Logic lives in manage.py
github.com/autopilotpattern
Container
Pilot
Consul
Lifecycle: preStart
MySQL

container
github.com/autopilotpattern
Container
Pilot
Consul
Lifecycle: preStart
MySQL

container
PID1
Separate
container
github.com/autopilotpattern
Container
Pilot
Consul
Lifecycle: preStart
Manta

object

store
Store snapshots
MySQL

container
github.com/autopilotpattern
Container
Pilot
Consul
preStart
Lifecycle: preStart
Manta

object

store
MySQL

container
github.com/autopilotpattern
Container
Pilot
Consul
preStart
Lifecycle: preStart
Manta

object

store
MySQL

container
Note: no main
application
running yet!
If exit code of preStart != 0,
ContainerPilot exits
github.com/autopilotpattern
Container
Pilot
Consul
preStart
Lifecycle: preStart
Manta

object

store
MySQL

container
“Has a snapshot

been written to Manta?”
github.com/autopilotpattern
Container
Pilot
Consul
MySQL

container
preStart
Lifecycle: preStart
Manta

object

store
“Has a snapshot

been written to Manta?”
“Nope!”
github.com/autopilotpattern
Container
Pilot
Consul
MySQL

container
preStart
Lifecycle: preStart
Manta

object

store
“Has a snapshot

been written to Manta?”
“Nope!”
initialize DB
github.com/autopilotpattern
~/mysql/bin/manage.py
def	pre_start():	
				"""	
				MySQL	must	be	running	in	order	to	execute	most	of	our	setup	behavior	
				so	we're	just	going	to	make	sure	the	directory	structures	are	in	
				place	and	then	let	the	first	health	check	handler	take	it	from	there	
				"""	
				if	not	os.path.isdir(os.path.join(config.datadir,	'mysql')):	
								last_backup	=	has_snapshot()	
								if	last_backup:	
												get_snapshot(last_backup)	
												restore_from_snapshot(last_backup)	
								else:	
												if	not	initialize_db():	
																log.info('Skipping	database	setup.')	
				sys.exit(0)
github.com/autopilotpattern
~/mysql/bin/manage.py
def	pre_start():	
				"""	
				MySQL	must	be	running	in	order	to	execute	most	of	our	setup	behavior	
				so	we're	just	going	to	make	sure	the	directory	structures	are	in	
				place	and	then	let	the	first	health	check	handler	take	it	from	there	
				"""	
				if	not	os.path.isdir(os.path.join(config.datadir,	'mysql')):	
								last_backup	=	has_snapshot()	
								if	last_backup:	
												get_snapshot(last_backup)	
												restore_from_snapshot(last_backup)	
								else:	
												if	not	initialize_db():	
																log.info('Skipping	database	setup.')	
				sys.exit(0)	
Check w/ Consul
for snapshot
github.com/autopilotpattern
~/mysql/bin/manage.py
def	pre_start():	
				"""	
				MySQL	must	be	running	in	order	to	execute	most	of	our	setup	behavior	
				so	we're	just	going	to	make	sure	the	directory	structures	are	in	
				place	and	then	let	the	first	health	check	handler	take	it	from	there	
				"""	
				if	not	os.path.isdir(os.path.join(config.datadir,	'mysql')):	
								last_backup	=	has_snapshot()	
								if	last_backup:	
												get_snapshot(last_backup)	
												restore_from_snapshot(last_backup)	
								else:	
												if	not	initialize_db():	
																log.info('Skipping	database	setup.')	
				sys.exit(0)	
calls /usr/bin/mysql_install_db
github.com/autopilotpattern
~/mysql/bin/manage.py
def	pre_start():	
				"""	
				MySQL	must	be	running	in	order	to	execute	most	of	our	setup	behavior	
				so	we're	just	going	to	make	sure	the	directory	structures	are	in	
				place	and	then	let	the	first	health	check	handler	take	it	from	there	
				"""	
				if	not	os.path.isdir(os.path.join(config.datadir,	'mysql')):	
								last_backup	=	has_snapshot()	
								if	last_backup:	
												get_snapshot(last_backup)	
												restore_from_snapshot(last_backup)	
								else:	
												if	not	initialize_db():	
																log.info('Skipping	database	setup.')	
				sys.exit(0)
github.com/autopilotpattern
Container
Pilot
Consul
Lifecycle: run
Manta

object

store
MySQL

container
github.com/autopilotpattern
Container
Pilot
mysqld
Consul
Lifecycle: run
• Attach to stdout/
stderr
• Return exit code of
application to Docker
runtime
MySQL

container
Manta

object

store
github.com/autopilotpattern
Container
Pilot
Consul
Lifecycle: health
mysqld
health
Manta

object

store
MySQL

container
github.com/autopilotpattern
Manta

object

store
Container
Pilot
Consul
Lifecycle: health
User-defined health check
inside the container.
Runs every poll seconds.
mysqld
MySQL

container
health
github.com/autopilotpattern
mysqld
MySQL

container
Container
Pilot
Consul
health
Lifecycle: health
Manta

object

store
first time?
finish initialization
github.com/autopilotpattern
~/mysql/bin/manage.pydef	health():	
				"""	
				Run	a	simple	health	check.	Also	acts	as	a	check	for	whether	the	
				ContainerPilot	configuration	needs	to	be	reloaded	(if	it's	been	
				changed	externally),	or	if	we	need	to	make	a	backup	because	the	
				backup	TTL	has	expired.	
				"""	
				node	=	MySQLNode()	
				cp	=	ContainerPilot(node)	
				if	cp.update():	
								cp.reload()	
								return	
				#	Because	we	need	MySQL	up	to	finish	initialization,	we	need	to	check	
				#	for	each	pass	thru	the	health	check	that	we've	done	so.	The	happy	
				#	path	is	to	check	a	lock	file	against	the	node	state	(which	has	been	
				#	set	above)	and	immediately	return	when	we	discover	the	lock	exists.	
				#	Otherwise,	we	bootstrap	the	instance.	
				was_ready	=	assert_initialized_for_state(node)	
				ctx	=	dict(user=config.repl_user,	
															password=config.repl_password,	
															timeout=cp.config['services'][0]['ttl'])	
				node.conn	=	wait_for_connection(**ctx)	
				#	Update	our	lock	on	being	the	primary/standby.	
				if	node.is_primary()	or	node.is_standby():	
							update_session_ttl()	
				#	Create	a	snapshot	and	send	it	to	the	object	store	
				if	all((node.is_snapshot_node(),	
										(not	is_backup_running()),	
										(is_binlog_stale(node.conn)	or	is_time_for_snapshot()))):	
								write_snapshot(node.conn)	
				mysql_query(node.conn,	'SELECT	1',	())
github.com/autopilotpattern
~/mysql/bin/manage.pydef	run_as_primary(node):	
				"""	
				The	overall	workflow	here	is	ported	and	reworked	from	the	
				Oracle-provided	Docker	image:	
				https://github.com/mysql/mysql-docker/blob/mysql-server/5.7/docker-entrypoint.sh	
				"""	
				node.state	=	PRIMARY	
				mark_as_primary(node)	
				node.conn	=	wait_for_connection()	
				if	node.conn:	
								#	if	we	can	make	a	connection	w/o	a	password	then	this	is	the	
								#	first	pass	
								set_timezone_info()	
								setup_root_user(node.conn)	
								create_db(node.conn)	
								create_default_user(node.conn)	
								create_repl_user(node.conn)	
								run_external_scripts('/etc/initdb.d')	
								expire_root_password(node.conn)	
				else:	
								ctx	=	dict(user=config.repl_user,	
																			password=config.repl_password,	
																			database=config.mysql_db)	
								node.conn	=	wait_for_connection(**ctx)	
								stop_replication(node.conn)	#	in	case	this	is	a	newly-promoted	primary	
				if	USE_STANDBY:	
								#	if	we're	using	a	standby	instance	then	we	need	to	first	
								#	snapshot	the	primary	so	that	we	can	bootstrap	the	standby.	
								write_snapshot(node.conn)	
Set up DB, user,
replication user, and
expire password, etc.
github.com/autopilotpattern
~/mysql/bin/manage.py
def	run_as_replica(node):	
				try:	
								ctx	=	dict(user=config.repl_user,	
																			password=config.repl_password,	
																			database=config.mysql_db)	
								node.conn	=	wait_for_connection(**ctx)	
								set_primary_for_replica(node.conn)	
				except	Exception	as	ex:	
								log.exception(ex)	
def	set_primary_for_replica(conn):	
				"""	
				Set	up	GTID-based	replication	to	the	primary;	once	this	is	set	the	
				replica	will	automatically	try	to	catch	up	with	the	primary's	last	
				transactions.	
				"""	
				primary	=	get_primary_host()	
				sql	=	('CHANGE	MASTER	TO	'	
											'MASTER_HOST											=	%s,	'	
											'MASTER_USER											=	%s,	'	
											'MASTER_PASSWORD							=	%s,	'	
											'MASTER_PORT											=	3306,	'	
											'MASTER_CONNECT_RETRY		=	60,	'	
											'MASTER_AUTO_POSITION		=	1,	'	
											'MASTER_SSL												=	0;	'	
											'START	SLAVE;')	
				mysql_exec(conn,	sql,	(primary,	config.repl_user,	config.repl_password,))
github.com/autopilotpattern
~/mysql/bin/manage.py
def	run_as_replica(node):	
				try:	
								ctx	=	dict(user=config.repl_user,	
																			password=config.repl_password,	
																			database=config.mysql_db)	
								node.conn	=	wait_for_connection(**ctx)	
								set_primary_for_replica(node.conn)	
				except	Exception	as	ex:	
								log.exception(ex)	
def	set_primary_for_replica(conn):	
				"""	
				Set	up	GTID-based	replication	to	the	primary;	once	this	is	set	the	
				replica	will	automatically	try	to	catch	up	with	the	primary's	last	
				transactions.	
				"""	
				primary	=	get_primary_host()	
				sql	=	('CHANGE	MASTER	TO	'	
											'MASTER_HOST											=	%s,	'	
											'MASTER_USER											=	%s,	'	
											'MASTER_PASSWORD							=	%s,	'	
											'MASTER_PORT											=	3306,	'	
											'MASTER_CONNECT_RETRY		=	60,	'	
											'MASTER_AUTO_POSITION		=	1,	'	
											'MASTER_SSL												=	0;	'	
											'START	SLAVE;')	
				mysql_exec(conn,	sql,	(primary,	config.repl_user,	config.repl_password,))	
gets from Consul
github.com/autopilotpattern
~/mysql/bin/manage.py
def	run_as_replica(node):	
				try:	
								ctx	=	dict(user=config.repl_user,	
																			password=config.repl_password,	
																			database=config.mysql_db)	
								node.conn	=	wait_for_connection(**ctx)	
								set_primary_for_replica(node.conn)	
				except	Exception	as	ex:	
								log.exception(ex)	
def	set_primary_for_replica(conn):	
				"""	
				Set	up	GTID-based	replication	to	the	primary;	once	this	is	set	the	
				replica	will	automatically	try	to	catch	up	with	the	primary's	last	
				transactions.	
				"""	
				primary	=	get_primary_host()	
				sql	=	('CHANGE	MASTER	TO	'	
											'MASTER_HOST											=	%s,	'	
											'MASTER_USER											=	%s,	'	
											'MASTER_PASSWORD							=	%s,	'	
											'MASTER_PORT											=	3306,	'	
											'MASTER_CONNECT_RETRY		=	60,	'	
											'MASTER_AUTO_POSITION		=	1,	'	
											'MASTER_SSL												=	0;	'	
											'START	SLAVE;')	
				mysql_exec(conn,	sql,	(primary,	config.repl_user,	config.repl_password,))	
Remember our preStart
downloaded the snapshot
github.com/autopilotpattern
Wait a sec.
How do we know which
instance is primary!?
github.com/autopilotpattern
Container
Pilot
Consul
Lifecycle: health
Exit!
mysqld
MySQL

container
health
github.com/autopilotpattern
Container
Pilot
mysqld
Consul
health
Lifecycle: health
Exit code is 0?
“I am mysql-12345.

I am available at 192.168.100.2:4000.

I am healthy for the next 10 seconds.”
MySQL

container
github.com/autopilotpattern
Container
Pilot
mysqld
Consul
MySQL

container
health
Lifecycle: health
If exit code != 0,
do nothing (TTL expires)
github.com/autopilotpattern
Ask Consul
for Primary
github.com/autopilotpattern
I’m the
primary!
Ask Consul
for Primary
github.com/autopilotpattern
I’m the
primary!
Ask Consul
for Primary
Update lock TTL w/ each
health check
github.com/autopilotpattern
I’m the
primary!
Someone
else is the
primary!
I’m a

replica!
Ask Consul
for Primary
github.com/autopilotpattern
I’m the
primary!
Someone
else is the
primary!
I’m a

replica!
Ask Consul
for Primary
Syncs up using snapshot
and GTID
github.com/autopilotpattern
No

Primary?
I’m the
Primary!
I’m the
primary!
Someone
else is the
primary!
I’m a

replica!
Ask Consul
for Primary
github.com/autopilotpattern
No

Primary?
I’m the
Primary?
I’m the
primary!
Someone
else is the
primary!
I’m a

replica!
Ask Consul
for Primary
Need to assert
only 1 primary
github.com/autopilotpattern
No

Primary?
I’m the
Primary?
I’m the
primary!
Failed!

Go back to
start
I’m the
primary!
Someone
else is the
primary!
I’m a

replica!
Set lock in
Consul

w/ TTL
Ask Consul
for Primary
github.com/autopilotpattern
No

Primary?
I’m the
Primary?
I’m the
primary!
Failed!

Go back to
start
I’m the
primary!
Someone
else is the
primary!
I’m a

replica!
Set lock in
Consul

w/ TTL
Ask Consul
for Primary Update lock TTL w/ each
health check.
Rewrite ContainerPilot
config and SIGHUP
github.com/autopilotpattern
~/mysql/etc/containerpilot.json
{	
		"consul":	"{{	.CONSUL	}}:8500",	
		"preStart":	"python	/usr/local/bin/manage.py",	
		"services":	[	
				{	
						"name":	"mysql",	
						"port":	3306,	
						"health":	"python	/usr/local/bin/manage.py	health",	
						"poll":	5,	
						"ttl":	25	
				}	
		],	
		"backends":	[	
				{	
						"name":	"mysql-primary",	
						"poll":	10,	
						"onChange":	"python	/usr/local/bin/manage.py	on_change"	
				}	
		]	
}
github.com/autopilotpattern
~/mysql/etc/containerpilot.json
{	
		"consul":	"{{	.CONSUL	}}:8500",	
		"preStart":	"python	/usr/local/bin/manage.py",	
		"services":	[	
				{	
						"name":	“mysql-primary",	
						"port":	3306,	
						"health":	"python	/usr/local/bin/manage.py	health",	
						"poll":	5,	
						"ttl":	25	
				}	
		],	
		"backends":	[	
				{	
						"name":	"mysql-primary",	
						"poll":	10,	
						"onChange":	"python	/usr/local/bin/manage.py	on_change"	
				}	
		]	
}	
Rewrite & reload config
github.com/autopilotpattern
~/mysql/bin/manage.py
def	health():	
				"""	
				Run	a	simple	health	check.	Also	acts	as	a	check	for	whether	the	
				ContainerPilot	configuration	needs	to	be	reloaded	(if	it's	been	
				changed	externally),	or	if	we	need	to	make	a	backup	because	the	
				backup	TTL	has	expired.	
				"""	
				node	=	MySQLNode()	
				cp	=	ContainerPilot(node)	
				if	cp.update():	
								cp.reload()	
								return	
				was_ready	=	assert_initialized_for_state(node)	
				#	cp.reload()	will	exit	early	so	no	need	to	setup	
				#	connection	until	this	point	
				ctx	=	dict(user=config.repl_user,	
															password=config.repl_password,	
															timeout=cp.config['services'][0]['ttl'])	
				node.conn	=	wait_for_connection(**ctx)	
				#	Update	our	lock	on	being	the	primary/standby.	
				#	If	this	lock	is	allowed	to	expire	and	the	health	check	for	the	primary	
				#	fails,	the	`onChange`	handlers	for	the	replicas	will	try	to	self-elect	
				#	as	primary	by	obtaining	the	lock.	
				#	If	this	node	can	update	the	lock	but	the	DB	fails	its	health	check,	
				#	then	the	operator	will	need	to	manually	intervene	if	they	want	to	
				#	force	a	failover.	This	architecture	is	a	result	of	Consul	not	
				#	permitting	us	to	acquire	a	new	lock	on	a	health-checked	session	if	the	
				#	health	check	is	*currently*	failing,	but	has	the	happy	side-effect	of	
				#	reducing	the	risk	of	flapping	on	a	transient	health	check	failure.	
				if	node.is_primary()	or	node.is_standby():	
								update_session_ttl()	
			#	Create	a	snapshot	and	send	it	to	the	object	store.	
				if	all((node.is_snapshot_node(),	
												(not	is_backup_running()),	
											(is_binlog_stale(node.conn)	or	is_time_for_snapshot()))):	
							write_snapshot(node.conn)	
				mysql_query(node.conn,	'SELECT	1',	())
github.com/autopilotpattern
Wait a sec.
How do we fail-over?
github.com/autopilotpattern
~/mysql/etc/containerpilot.json
{	
		"consul":	"{{	.CONSUL	}}:8500",	
		"preStart":	"python	/usr/local/bin/manage.py",	
		"services":	[	
				{	
						"name":	"mysql",	
						"port":	3306,	
						"health":	"python	/usr/local/bin/manage.py	health",	
						"poll":	5,	
						"ttl":	25	
				}	
		],	
		"backends":	[	
				{	
						"name":	"mysql-primary",	
						"poll":	10,	
						"onChange":	"python	/usr/local/bin/manage.py	on_change"	
				}	
		]	
}
github.com/autopilotpattern
Container
Pilot
mysqld
Consul
Where is

mysql-primary?
192.168.1.100
MySQL

container
Lifecycle: onChange
github.com/autopilotpattern
Container
Pilot
mysqld
Consul
Where is

mysql-primary?
192.168.1.100
MySQL

container
Lifecycle: onChange
Check Consul for services
listed in backends.
Runs every poll seconds.
github.com/autopilotpattern
replica
primary
Healthy! Healthy! Failed!
Ask
Consul for
Primary
no change
Ask
Consul for
Primary
no change
Ask
Consul for
Primary
fire onChange
handler
github.com/autopilotpattern
~/mysql/bin/manage.pydef	on_change():	
				node	=	MySQLNode()	
				ctx	=	dict(user=config.repl_user,	
															password=config.repl_password,	
															timeout=cp.config['services'][0]['ttl'])	
				node.conn	=	wait_for_connection(**ctx)	
				#	need	to	stop	replication	whether	we're	the	new	primary	or	not	
				stop_replication(node.conn)	
				while	True:	
								try:	
												#	if	there	is	no	primary	node,	we'll	try	to	obtain	the	lock.	
												#	if	we	get	the	lock	we'll	reload	as	the	new	primary,	otherwise	
												#	someone	else	got	the	lock	but	we	don't	know	who	yet	so	loop	
												primary	=	get_primary_node()	
												if	not	primary:	
																session_id	=	get_session(no_cache=True)	
																if	mark_with_session(PRIMARY_KEY,	node.hostname,	session_id):	
																				node.state	=	PRIMARY	
																				if	cp.update():	
																								cp.reload()	
																				return	
																else:	
																				#	we	lost	the	race	to	lock	the	session	for	ourselves	
																				time.sleep(1)	
																				continue	
												#	we	know	who	the	primary	is	but	not	whether	they're	healthy.	
												#	if	it's	not	healthy,	we'll	throw	an	exception	and	start	over.	
												ip	=	get_primary_host(primary=primary)	
												if	ip	==	node.ip:	
																if	cp.update():	
																				cp.reload()	
																return	
												set_primary_for_replica(node.conn)	
												return	
								except	Exception	as	ex:	
												#	This	exception	gets	thrown	if	the	session	lock	for	`mysql-primary`	
												#	key	has	not	expired	yet	(but	there's	no	healthy	primary	either),	
												#	or	if	the	replica's	target	primary	isn't	ready	yet.	
												log.debug(ex)	
												time.sleep(1)	#	avoid	hammering	Consul	
												continue
github.com/autopilotpattern
replica
primary
Healthy! Healthy! Failed!
no change no change
Ask
Consul for
Primary
Ask
Consul for
Primary
Ask
Consul for
Primary
fire onChange
handler
github.com/autopilotpattern
replica
primary
Healthy! Healthy! Failed!
no change no change
Ask
Consul for
Primary
Ask
Consul for
Primary
Ask
Consul for
Primary
Ask
Consul for
Primary
Ok, I’m
primary
Set lock

in Consul
Success!
primary
Healthy!
fire onChange
handler
Applications on

Autopilot

Tim Gross

@0x74696d (“tim”)

github.com/autopilotpattern

More Related Content

What's hot

Docker Container As A Service - March 2016
Docker Container As A Service - March 2016Docker Container As A Service - March 2016
Docker Container As A Service - March 2016
Patrick Chanezon
 
Openshift: The power of kubernetes for engineers - Riga Dev Days 18
Openshift: The power of kubernetes for engineers - Riga Dev Days 18Openshift: The power of kubernetes for engineers - Riga Dev Days 18
Openshift: The power of kubernetes for engineers - Riga Dev Days 18
Jorge Morales
 
OpenShift and next generation application development
OpenShift and next generation application developmentOpenShift and next generation application development
OpenShift and next generation application development
Syed Shaaf
 
Drone Continuous Integration
Drone Continuous IntegrationDrone Continuous Integration
Drone Continuous Integration
Daniel Cerecedo
 
Dockercon Europe 2014 - Continuous Delivery leveraging on Docker CaaS
Dockercon Europe 2014 - Continuous Delivery leveraging on Docker CaaSDockercon Europe 2014 - Continuous Delivery leveraging on Docker CaaS
Dockercon Europe 2014 - Continuous Delivery leveraging on Docker CaaS
Adrien Blind
 
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Docker, Inc.
 
Journey to the devops automation with docker kubernetes and openshift
Journey to the devops automation with docker kubernetes and openshiftJourney to the devops automation with docker kubernetes and openshift
Journey to the devops automation with docker kubernetes and openshift
Yusuf Hadiwinata Sutandar
 
Continuous Delivery of Containers with Drone & Kontena
Continuous Delivery of Containers with Drone & KontenaContinuous Delivery of Containers with Drone & Kontena
Continuous Delivery of Containers with Drone & Kontena
Jussi Nummelin
 
4K–Kubernetes with Knative, Kafka and Kamel
4K–Kubernetes with Knative, Kafka and Kamel 4K–Kubernetes with Knative, Kafka and Kamel
4K–Kubernetes with Knative, Kafka and Kamel
Red Hat Developers
 
VM vs Docker-Based Pipelines
VM vs Docker-Based PipelinesVM vs Docker-Based Pipelines
VM vs Docker-Based Pipelines
Codefresh
 
OpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image LifecycleOpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image Lifecycle
Mihai Criveti
 
A Shift from Monolith to Microservice using Docker
A Shift from Monolith to Microservice using DockerA Shift from Monolith to Microservice using Docker
A Shift from Monolith to Microservice using Docker
Ajeet Singh Raina
 
Docker Platform and Ecosystem
Docker Platform and EcosystemDocker Platform and Ecosystem
Docker Platform and Ecosystem
Patrick Chanezon
 
OPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
OPENSHIFT CONTAINER PLATFORM CI/CD Build & DeployOPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
OPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
Natale Vinto
 
Cloud Native Applications on OpenShift
Cloud Native Applications on OpenShiftCloud Native Applications on OpenShift
Cloud Native Applications on OpenShift
Serhat Dirik
 
DevOps Best Practices with Openshift - DevOpsFusion 2020
DevOps Best Practices with Openshift - DevOpsFusion 2020DevOps Best Practices with Openshift - DevOpsFusion 2020
DevOps Best Practices with Openshift - DevOpsFusion 2020
Andreas Landerer
 
Docker meetup-20-apr-17-openshit
Docker meetup-20-apr-17-openshitDocker meetup-20-apr-17-openshit
Docker meetup-20-apr-17-openshit
Yusuf Hadiwinata Sutandar
 
Docker Orchestration: Welcome to the Jungle! Devoxx & Docker Meetup Tour Nov ...
Docker Orchestration: Welcome to the Jungle! Devoxx & Docker Meetup Tour Nov ...Docker Orchestration: Welcome to the Jungle! Devoxx & Docker Meetup Tour Nov ...
Docker Orchestration: Welcome to the Jungle! Devoxx & Docker Meetup Tour Nov ...
Patrick Chanezon
 
Couchbase on Docker - Couchbase Connect 2015
Couchbase on Docker - Couchbase Connect 2015Couchbase on Docker - Couchbase Connect 2015
Couchbase on Docker - Couchbase Connect 2015
Patrick Chanezon
 
Docker Devoxx UK - Never mind the bollocks here's the Linux Containers
Docker Devoxx UK - Never mind the bollocks here's the Linux ContainersDocker Devoxx UK - Never mind the bollocks here's the Linux Containers
Docker Devoxx UK - Never mind the bollocks here's the Linux Containers
Patrick Chanezon
 

What's hot (20)

Docker Container As A Service - March 2016
Docker Container As A Service - March 2016Docker Container As A Service - March 2016
Docker Container As A Service - March 2016
 
Openshift: The power of kubernetes for engineers - Riga Dev Days 18
Openshift: The power of kubernetes for engineers - Riga Dev Days 18Openshift: The power of kubernetes for engineers - Riga Dev Days 18
Openshift: The power of kubernetes for engineers - Riga Dev Days 18
 
OpenShift and next generation application development
OpenShift and next generation application developmentOpenShift and next generation application development
OpenShift and next generation application development
 
Drone Continuous Integration
Drone Continuous IntegrationDrone Continuous Integration
Drone Continuous Integration
 
Dockercon Europe 2014 - Continuous Delivery leveraging on Docker CaaS
Dockercon Europe 2014 - Continuous Delivery leveraging on Docker CaaSDockercon Europe 2014 - Continuous Delivery leveraging on Docker CaaS
Dockercon Europe 2014 - Continuous Delivery leveraging on Docker CaaS
 
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
 
Journey to the devops automation with docker kubernetes and openshift
Journey to the devops automation with docker kubernetes and openshiftJourney to the devops automation with docker kubernetes and openshift
Journey to the devops automation with docker kubernetes and openshift
 
Continuous Delivery of Containers with Drone & Kontena
Continuous Delivery of Containers with Drone & KontenaContinuous Delivery of Containers with Drone & Kontena
Continuous Delivery of Containers with Drone & Kontena
 
4K–Kubernetes with Knative, Kafka and Kamel
4K–Kubernetes with Knative, Kafka and Kamel 4K–Kubernetes with Knative, Kafka and Kamel
4K–Kubernetes with Knative, Kafka and Kamel
 
VM vs Docker-Based Pipelines
VM vs Docker-Based PipelinesVM vs Docker-Based Pipelines
VM vs Docker-Based Pipelines
 
OpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image LifecycleOpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image Lifecycle
 
A Shift from Monolith to Microservice using Docker
A Shift from Monolith to Microservice using DockerA Shift from Monolith to Microservice using Docker
A Shift from Monolith to Microservice using Docker
 
Docker Platform and Ecosystem
Docker Platform and EcosystemDocker Platform and Ecosystem
Docker Platform and Ecosystem
 
OPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
OPENSHIFT CONTAINER PLATFORM CI/CD Build & DeployOPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
OPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
 
Cloud Native Applications on OpenShift
Cloud Native Applications on OpenShiftCloud Native Applications on OpenShift
Cloud Native Applications on OpenShift
 
DevOps Best Practices with Openshift - DevOpsFusion 2020
DevOps Best Practices with Openshift - DevOpsFusion 2020DevOps Best Practices with Openshift - DevOpsFusion 2020
DevOps Best Practices with Openshift - DevOpsFusion 2020
 
Docker meetup-20-apr-17-openshit
Docker meetup-20-apr-17-openshitDocker meetup-20-apr-17-openshit
Docker meetup-20-apr-17-openshit
 
Docker Orchestration: Welcome to the Jungle! Devoxx & Docker Meetup Tour Nov ...
Docker Orchestration: Welcome to the Jungle! Devoxx & Docker Meetup Tour Nov ...Docker Orchestration: Welcome to the Jungle! Devoxx & Docker Meetup Tour Nov ...
Docker Orchestration: Welcome to the Jungle! Devoxx & Docker Meetup Tour Nov ...
 
Couchbase on Docker - Couchbase Connect 2015
Couchbase on Docker - Couchbase Connect 2015Couchbase on Docker - Couchbase Connect 2015
Couchbase on Docker - Couchbase Connect 2015
 
Docker Devoxx UK - Never mind the bollocks here's the Linux Containers
Docker Devoxx UK - Never mind the bollocks here's the Linux ContainersDocker Devoxx UK - Never mind the bollocks here's the Linux Containers
Docker Devoxx UK - Never mind the bollocks here's the Linux Containers
 

Viewers also liked

Rooting Out Root: User namespaces in Docker
Rooting Out Root: User namespaces in DockerRooting Out Root: User namespaces in Docker
Rooting Out Root: User namespaces in Docker
Phil Estes
 
From Hello World to Real World - Container Days Boston 2016
From Hello World to Real World - Container Days Boston 2016From Hello World to Real World - Container Days Boston 2016
From Hello World to Real World - Container Days Boston 2016
Shannon Williams
 
Du craft chez les OPS
Du craft chez les OPSDu craft chez les OPS
Du craft chez les OPS
François Xavier Vende
 
ContentCal AutoPilot
ContentCal AutoPilotContentCal AutoPilot
ContentCal AutoPilot
Andy Lambert
 
Managing AWS infrastructure using CloudFormation
Managing AWS infrastructure using CloudFormationManaging AWS infrastructure using CloudFormation
Managing AWS infrastructure using CloudFormation
Anton Babenko
 
The Container Revolution: Reflections after the first decade
The Container Revolution: Reflections after the first decadeThe Container Revolution: Reflections after the first decade
The Container Revolution: Reflections after the first decade
bcantrill
 
The State of Cloud 2016: The whirlwind of creative destruction
The State of Cloud 2016: The whirlwind of creative destructionThe State of Cloud 2016: The whirlwind of creative destruction
The State of Cloud 2016: The whirlwind of creative destruction
bcantrill
 
Building infrastructure with Terraform (Google)
Building infrastructure with Terraform (Google)Building infrastructure with Terraform (Google)
Building infrastructure with Terraform (Google)
Radek Simko
 
Docker Security Overview
Docker Security OverviewDocker Security Overview
Docker Security Overview
Sreenivas Makam
 
DEVNET-1144 Deploying hybrid cloud applications with HashiCorp Atlas
DEVNET-1144	Deploying hybrid cloud applications with HashiCorp AtlasDEVNET-1144	Deploying hybrid cloud applications with HashiCorp Atlas
DEVNET-1144 Deploying hybrid cloud applications with HashiCorp Atlas
Cisco DevNet
 

Viewers also liked (10)

Rooting Out Root: User namespaces in Docker
Rooting Out Root: User namespaces in DockerRooting Out Root: User namespaces in Docker
Rooting Out Root: User namespaces in Docker
 
From Hello World to Real World - Container Days Boston 2016
From Hello World to Real World - Container Days Boston 2016From Hello World to Real World - Container Days Boston 2016
From Hello World to Real World - Container Days Boston 2016
 
Du craft chez les OPS
Du craft chez les OPSDu craft chez les OPS
Du craft chez les OPS
 
ContentCal AutoPilot
ContentCal AutoPilotContentCal AutoPilot
ContentCal AutoPilot
 
Managing AWS infrastructure using CloudFormation
Managing AWS infrastructure using CloudFormationManaging AWS infrastructure using CloudFormation
Managing AWS infrastructure using CloudFormation
 
The Container Revolution: Reflections after the first decade
The Container Revolution: Reflections after the first decadeThe Container Revolution: Reflections after the first decade
The Container Revolution: Reflections after the first decade
 
The State of Cloud 2016: The whirlwind of creative destruction
The State of Cloud 2016: The whirlwind of creative destructionThe State of Cloud 2016: The whirlwind of creative destruction
The State of Cloud 2016: The whirlwind of creative destruction
 
Building infrastructure with Terraform (Google)
Building infrastructure with Terraform (Google)Building infrastructure with Terraform (Google)
Building infrastructure with Terraform (Google)
 
Docker Security Overview
Docker Security OverviewDocker Security Overview
Docker Security Overview
 
DEVNET-1144 Deploying hybrid cloud applications with HashiCorp Atlas
DEVNET-1144	Deploying hybrid cloud applications with HashiCorp AtlasDEVNET-1144	Deploying hybrid cloud applications with HashiCorp Atlas
DEVNET-1144 Deploying hybrid cloud applications with HashiCorp Atlas
 

Similar to ContainerDays Boston 2016: "Autopilot: Running Real-world Applications in Containers" (Tim Gross)

Use GitLab with Chaos Engineering to Harden your Applications + OpenEBS 1.3 ...
 Use GitLab with Chaos Engineering to Harden your Applications + OpenEBS 1.3 ... Use GitLab with Chaos Engineering to Harden your Applications + OpenEBS 1.3 ...
Use GitLab with Chaos Engineering to Harden your Applications + OpenEBS 1.3 ...
MayaData Inc
 
Lessons learned using GitOps
Lessons learned using GitOpsLessons learned using GitOps
Lessons learned using GitOps
Edgaras Apšega
 
Where should I run my code? Serverless, Containers, Virtual Machines and more
Where should I run my code? Serverless, Containers, Virtual Machines and moreWhere should I run my code? Serverless, Containers, Virtual Machines and more
Where should I run my code? Serverless, Containers, Virtual Machines and more
Bret McGowen - NYC Google Developer Advocate
 
Kubernetes and real-time analytics - how to connect these two worlds with Apa...
Kubernetes and real-time analytics - how to connect these two worlds with Apa...Kubernetes and real-time analytics - how to connect these two worlds with Apa...
Kubernetes and real-time analytics - how to connect these two worlds with Apa...
GetInData
 
Container Power Hour with Jess, Clare, and Abby (CON362) - AWS re:Invent 2018
Container Power Hour with Jess, Clare, and Abby (CON362) - AWS re:Invent 2018Container Power Hour with Jess, Clare, and Abby (CON362) - AWS re:Invent 2018
Container Power Hour with Jess, Clare, and Abby (CON362) - AWS re:Invent 2018
Amazon Web Services
 
K8Guard - An Auditing System For Kubernetes
K8Guard - An Auditing System For KubernetesK8Guard - An Auditing System For Kubernetes
K8Guard - An Auditing System For Kubernetes
Medya Ghazizadeh
 
2022-05-23-DevOps pro Europe - Managing Apps at scale.pdf
2022-05-23-DevOps pro Europe - Managing Apps at scale.pdf2022-05-23-DevOps pro Europe - Managing Apps at scale.pdf
2022-05-23-DevOps pro Europe - Managing Apps at scale.pdf
Łukasz Piątkowski
 
Cloud-Native Operations with Kubernetes and CI/CD
Cloud-Native Operations with Kubernetes and CI/CDCloud-Native Operations with Kubernetes and CI/CD
Cloud-Native Operations with Kubernetes and CI/CD
VMware Tanzu
 
Loadbalancers: The fabric for your micro services
Loadbalancers: The fabric for your micro servicesLoadbalancers: The fabric for your micro services
Loadbalancers: The fabric for your micro services
Chiradeep Vittal
 
PuppetConf 2017: Kubernetes in the Cloud w/ Puppet + Google Container Engine-...
PuppetConf 2017: Kubernetes in the Cloud w/ Puppet + Google Container Engine-...PuppetConf 2017: Kubernetes in the Cloud w/ Puppet + Google Container Engine-...
PuppetConf 2017: Kubernetes in the Cloud w/ Puppet + Google Container Engine-...
Puppet
 
Velocity London - Chaos Engineering Bootcamp
Velocity London - Chaos Engineering Bootcamp Velocity London - Chaos Engineering Bootcamp
Velocity London - Chaos Engineering Bootcamp
Ana Medina
 
Kubernetes 1001
Kubernetes 1001Kubernetes 1001
Kubernetes 1001
HungWei Chiu
 
Yannis Zarkadas. Stefano Fioravanzo. Enterprise data science workflows on kub...
Yannis Zarkadas. Stefano Fioravanzo. Enterprise data science workflows on kub...Yannis Zarkadas. Stefano Fioravanzo. Enterprise data science workflows on kub...
Yannis Zarkadas. Stefano Fioravanzo. Enterprise data science workflows on kub...
Lviv Startup Club
 
Yannis Zarkadas. Enterprise data science workflows on kubeflow
Yannis Zarkadas. Enterprise data science workflows on kubeflowYannis Zarkadas. Enterprise data science workflows on kubeflow
Yannis Zarkadas. Enterprise data science workflows on kubeflow
MarynaHoldaieva
 
Speeding up your team with GitOps
Speeding up your team with GitOpsSpeeding up your team with GitOps
Speeding up your team with GitOps
Brice Fernandes
 
Ultimate Git Workflow - Seoul 2015
Ultimate Git Workflow - Seoul 2015Ultimate Git Workflow - Seoul 2015
Ultimate Git Workflow - Seoul 2015
Atlassian 대한민국
 
OpenFest 2016 - Open Microservice Architecture
OpenFest 2016 - Open Microservice ArchitectureOpenFest 2016 - Open Microservice Architecture
OpenFest 2016 - Open Microservice Architecture
Nikolay Stoitsev
 
Mythical Mysfits: Management and Ops with AWS Fargate (CON322-R1) - AWS re:In...
Mythical Mysfits: Management and Ops with AWS Fargate (CON322-R1) - AWS re:In...Mythical Mysfits: Management and Ops with AWS Fargate (CON322-R1) - AWS re:In...
Mythical Mysfits: Management and Ops with AWS Fargate (CON322-R1) - AWS re:In...
Amazon Web Services
 
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
Amazon Web Services
 
How to build a Distributed Serverless Polyglot Microservices IoT Platform us...
How to build a Distributed Serverless Polyglot Microservices IoT Platform us...How to build a Distributed Serverless Polyglot Microservices IoT Platform us...
How to build a Distributed Serverless Polyglot Microservices IoT Platform us...
Animesh Singh
 

Similar to ContainerDays Boston 2016: "Autopilot: Running Real-world Applications in Containers" (Tim Gross) (20)

Use GitLab with Chaos Engineering to Harden your Applications + OpenEBS 1.3 ...
 Use GitLab with Chaos Engineering to Harden your Applications + OpenEBS 1.3 ... Use GitLab with Chaos Engineering to Harden your Applications + OpenEBS 1.3 ...
Use GitLab with Chaos Engineering to Harden your Applications + OpenEBS 1.3 ...
 
Lessons learned using GitOps
Lessons learned using GitOpsLessons learned using GitOps
Lessons learned using GitOps
 
Where should I run my code? Serverless, Containers, Virtual Machines and more
Where should I run my code? Serverless, Containers, Virtual Machines and moreWhere should I run my code? Serverless, Containers, Virtual Machines and more
Where should I run my code? Serverless, Containers, Virtual Machines and more
 
Kubernetes and real-time analytics - how to connect these two worlds with Apa...
Kubernetes and real-time analytics - how to connect these two worlds with Apa...Kubernetes and real-time analytics - how to connect these two worlds with Apa...
Kubernetes and real-time analytics - how to connect these two worlds with Apa...
 
Container Power Hour with Jess, Clare, and Abby (CON362) - AWS re:Invent 2018
Container Power Hour with Jess, Clare, and Abby (CON362) - AWS re:Invent 2018Container Power Hour with Jess, Clare, and Abby (CON362) - AWS re:Invent 2018
Container Power Hour with Jess, Clare, and Abby (CON362) - AWS re:Invent 2018
 
K8Guard - An Auditing System For Kubernetes
K8Guard - An Auditing System For KubernetesK8Guard - An Auditing System For Kubernetes
K8Guard - An Auditing System For Kubernetes
 
2022-05-23-DevOps pro Europe - Managing Apps at scale.pdf
2022-05-23-DevOps pro Europe - Managing Apps at scale.pdf2022-05-23-DevOps pro Europe - Managing Apps at scale.pdf
2022-05-23-DevOps pro Europe - Managing Apps at scale.pdf
 
Cloud-Native Operations with Kubernetes and CI/CD
Cloud-Native Operations with Kubernetes and CI/CDCloud-Native Operations with Kubernetes and CI/CD
Cloud-Native Operations with Kubernetes and CI/CD
 
Loadbalancers: The fabric for your micro services
Loadbalancers: The fabric for your micro servicesLoadbalancers: The fabric for your micro services
Loadbalancers: The fabric for your micro services
 
PuppetConf 2017: Kubernetes in the Cloud w/ Puppet + Google Container Engine-...
PuppetConf 2017: Kubernetes in the Cloud w/ Puppet + Google Container Engine-...PuppetConf 2017: Kubernetes in the Cloud w/ Puppet + Google Container Engine-...
PuppetConf 2017: Kubernetes in the Cloud w/ Puppet + Google Container Engine-...
 
Velocity London - Chaos Engineering Bootcamp
Velocity London - Chaos Engineering Bootcamp Velocity London - Chaos Engineering Bootcamp
Velocity London - Chaos Engineering Bootcamp
 
Kubernetes 1001
Kubernetes 1001Kubernetes 1001
Kubernetes 1001
 
Yannis Zarkadas. Stefano Fioravanzo. Enterprise data science workflows on kub...
Yannis Zarkadas. Stefano Fioravanzo. Enterprise data science workflows on kub...Yannis Zarkadas. Stefano Fioravanzo. Enterprise data science workflows on kub...
Yannis Zarkadas. Stefano Fioravanzo. Enterprise data science workflows on kub...
 
Yannis Zarkadas. Enterprise data science workflows on kubeflow
Yannis Zarkadas. Enterprise data science workflows on kubeflowYannis Zarkadas. Enterprise data science workflows on kubeflow
Yannis Zarkadas. Enterprise data science workflows on kubeflow
 
Speeding up your team with GitOps
Speeding up your team with GitOpsSpeeding up your team with GitOps
Speeding up your team with GitOps
 
Ultimate Git Workflow - Seoul 2015
Ultimate Git Workflow - Seoul 2015Ultimate Git Workflow - Seoul 2015
Ultimate Git Workflow - Seoul 2015
 
OpenFest 2016 - Open Microservice Architecture
OpenFest 2016 - Open Microservice ArchitectureOpenFest 2016 - Open Microservice Architecture
OpenFest 2016 - Open Microservice Architecture
 
Mythical Mysfits: Management and Ops with AWS Fargate (CON322-R1) - AWS re:In...
Mythical Mysfits: Management and Ops with AWS Fargate (CON322-R1) - AWS re:In...Mythical Mysfits: Management and Ops with AWS Fargate (CON322-R1) - AWS re:In...
Mythical Mysfits: Management and Ops with AWS Fargate (CON322-R1) - AWS re:In...
 
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
 
How to build a Distributed Serverless Polyglot Microservices IoT Platform us...
How to build a Distributed Serverless Polyglot Microservices IoT Platform us...How to build a Distributed Serverless Polyglot Microservices IoT Platform us...
How to build a Distributed Serverless Polyglot Microservices IoT Platform us...
 

More from DynamicInfraDays

ContainerDays NYC 2016: "From Hello World to Real World: Building a Productio...
ContainerDays NYC 2016: "From Hello World to Real World: Building a Productio...ContainerDays NYC 2016: "From Hello World to Real World: Building a Productio...
ContainerDays NYC 2016: "From Hello World to Real World: Building a Productio...
DynamicInfraDays
 
ContainerDays NYC 2016: "Securing Your Docker Image Registry for Production" ...
ContainerDays NYC 2016: "Securing Your Docker Image Registry for Production" ...ContainerDays NYC 2016: "Securing Your Docker Image Registry for Production" ...
ContainerDays NYC 2016: "Securing Your Docker Image Registry for Production" ...
DynamicInfraDays
 
ContainerDays NYC 2016: "OpenWhisk: A Serverless Computing Platform" (Rodric ...
ContainerDays NYC 2016: "OpenWhisk: A Serverless Computing Platform" (Rodric ...ContainerDays NYC 2016: "OpenWhisk: A Serverless Computing Platform" (Rodric ...
ContainerDays NYC 2016: "OpenWhisk: A Serverless Computing Platform" (Rodric ...
DynamicInfraDays
 
ContainerDays NYC 2016: "State of the Persistence Art: Present Best Practices...
ContainerDays NYC 2016: "State of the Persistence Art: Present Best Practices...ContainerDays NYC 2016: "State of the Persistence Art: Present Best Practices...
ContainerDays NYC 2016: "State of the Persistence Art: Present Best Practices...
DynamicInfraDays
 
ContainerDays NYC 2016: "Observability and Manageability in a Container Envir...
ContainerDays NYC 2016: "Observability and Manageability in a Container Envir...ContainerDays NYC 2016: "Observability and Manageability in a Container Envir...
ContainerDays NYC 2016: "Observability and Manageability in a Container Envir...
DynamicInfraDays
 
ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...
ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...
ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...
DynamicInfraDays
 
ContainerDays NYC 2016: "Containers in Azure: Understanding the Microsoft Con...
ContainerDays NYC 2016: "Containers in Azure: Understanding the Microsoft Con...ContainerDays NYC 2016: "Containers in Azure: Understanding the Microsoft Con...
ContainerDays NYC 2016: "Containers in Azure: Understanding the Microsoft Con...
DynamicInfraDays
 
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
DynamicInfraDays
 
ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...
ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...
ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...
DynamicInfraDays
 
ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...
ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...
ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...
DynamicInfraDays
 
ContainerDays NYC 2015: "What It Really Takes to Build a Container Platform" ...
ContainerDays NYC 2015: "What It Really Takes to Build a Container Platform" ...ContainerDays NYC 2015: "What It Really Takes to Build a Container Platform" ...
ContainerDays NYC 2015: "What It Really Takes to Build a Container Platform" ...
DynamicInfraDays
 
ContainerDays NYC 2015: "How Yodle Cleaned Up the Mess Using Containers and M...
ContainerDays NYC 2015: "How Yodle Cleaned Up the Mess Using Containers and M...ContainerDays NYC 2015: "How Yodle Cleaned Up the Mess Using Containers and M...
ContainerDays NYC 2015: "How Yodle Cleaned Up the Mess Using Containers and M...
DynamicInfraDays
 
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
 
ContainerDays Boston 2015: "CoreOS: Building the Layers of the Scalable Clust...
ContainerDays Boston 2015: "CoreOS: Building the Layers of the Scalable Clust...ContainerDays Boston 2015: "CoreOS: Building the Layers of the Scalable Clust...
ContainerDays Boston 2015: "CoreOS: Building the Layers of the Scalable Clust...
DynamicInfraDays
 
ContainerDays Boston 2015: "Continuous Delivery with Containers" (Nick Gauthier)
ContainerDays Boston 2015: "Continuous Delivery with Containers" (Nick Gauthier)ContainerDays Boston 2015: "Continuous Delivery with Containers" (Nick Gauthier)
ContainerDays Boston 2015: "Continuous Delivery with Containers" (Nick Gauthier)
DynamicInfraDays
 
ContainerDays Boston 2015: "A Brief History of Containers" (Jeff Victor & Kir...
ContainerDays Boston 2015: "A Brief History of Containers" (Jeff Victor & Kir...ContainerDays Boston 2015: "A Brief History of Containers" (Jeff Victor & Kir...
ContainerDays Boston 2015: "A Brief History of Containers" (Jeff Victor & Kir...
DynamicInfraDays
 

More from DynamicInfraDays (16)

ContainerDays NYC 2016: "From Hello World to Real World: Building a Productio...
ContainerDays NYC 2016: "From Hello World to Real World: Building a Productio...ContainerDays NYC 2016: "From Hello World to Real World: Building a Productio...
ContainerDays NYC 2016: "From Hello World to Real World: Building a Productio...
 
ContainerDays NYC 2016: "Securing Your Docker Image Registry for Production" ...
ContainerDays NYC 2016: "Securing Your Docker Image Registry for Production" ...ContainerDays NYC 2016: "Securing Your Docker Image Registry for Production" ...
ContainerDays NYC 2016: "Securing Your Docker Image Registry for Production" ...
 
ContainerDays NYC 2016: "OpenWhisk: A Serverless Computing Platform" (Rodric ...
ContainerDays NYC 2016: "OpenWhisk: A Serverless Computing Platform" (Rodric ...ContainerDays NYC 2016: "OpenWhisk: A Serverless Computing Platform" (Rodric ...
ContainerDays NYC 2016: "OpenWhisk: A Serverless Computing Platform" (Rodric ...
 
ContainerDays NYC 2016: "State of the Persistence Art: Present Best Practices...
ContainerDays NYC 2016: "State of the Persistence Art: Present Best Practices...ContainerDays NYC 2016: "State of the Persistence Art: Present Best Practices...
ContainerDays NYC 2016: "State of the Persistence Art: Present Best Practices...
 
ContainerDays NYC 2016: "Observability and Manageability in a Container Envir...
ContainerDays NYC 2016: "Observability and Manageability in a Container Envir...ContainerDays NYC 2016: "Observability and Manageability in a Container Envir...
ContainerDays NYC 2016: "Observability and Manageability in a Container Envir...
 
ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...
ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...
ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...
 
ContainerDays NYC 2016: "Containers in Azure: Understanding the Microsoft Con...
ContainerDays NYC 2016: "Containers in Azure: Understanding the Microsoft Con...ContainerDays NYC 2016: "Containers in Azure: Understanding the Microsoft Con...
ContainerDays NYC 2016: "Containers in Azure: Understanding the Microsoft Con...
 
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
ContainerDays NYC 2016: "Introduction to Application Automation with Habitat"...
 
ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...
ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...
ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...
 
ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...
ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...
ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...
 
ContainerDays NYC 2015: "What It Really Takes to Build a Container Platform" ...
ContainerDays NYC 2015: "What It Really Takes to Build a Container Platform" ...ContainerDays NYC 2015: "What It Really Takes to Build a Container Platform" ...
ContainerDays NYC 2015: "What It Really Takes to Build a Container Platform" ...
 
ContainerDays NYC 2015: "How Yodle Cleaned Up the Mess Using Containers and M...
ContainerDays NYC 2015: "How Yodle Cleaned Up the Mess Using Containers and M...ContainerDays NYC 2015: "How Yodle Cleaned Up the Mess Using Containers and M...
ContainerDays NYC 2015: "How Yodle Cleaned Up the Mess Using Containers and M...
 
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 ...
 
ContainerDays Boston 2015: "CoreOS: Building the Layers of the Scalable Clust...
ContainerDays Boston 2015: "CoreOS: Building the Layers of the Scalable Clust...ContainerDays Boston 2015: "CoreOS: Building the Layers of the Scalable Clust...
ContainerDays Boston 2015: "CoreOS: Building the Layers of the Scalable Clust...
 
ContainerDays Boston 2015: "Continuous Delivery with Containers" (Nick Gauthier)
ContainerDays Boston 2015: "Continuous Delivery with Containers" (Nick Gauthier)ContainerDays Boston 2015: "Continuous Delivery with Containers" (Nick Gauthier)
ContainerDays Boston 2015: "Continuous Delivery with Containers" (Nick Gauthier)
 
ContainerDays Boston 2015: "A Brief History of Containers" (Jeff Victor & Kir...
ContainerDays Boston 2015: "A Brief History of Containers" (Jeff Victor & Kir...ContainerDays Boston 2015: "A Brief History of Containers" (Jeff Victor & Kir...
ContainerDays Boston 2015: "A Brief History of Containers" (Jeff Victor & Kir...
 

Recently uploaded

Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Alpen-Adria-Universität
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStrDeep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
saastr
 
Recommendation System using RAG Architecture
Recommendation System using RAG ArchitectureRecommendation System using RAG Architecture
Recommendation System using RAG Architecture
fredae14
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
AWS Cloud Cost Optimization Presentation.pptx
AWS Cloud Cost Optimization Presentation.pptxAWS Cloud Cost Optimization Presentation.pptx
AWS Cloud Cost Optimization Presentation.pptx
HarisZaheer8
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
saastr
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
LucaBarbaro3
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Finale of the Year: Apply for Next One!
Finale of the Year: Apply for Next One!Finale of the Year: Apply for Next One!
Finale of the Year: Apply for Next One!
GDSC PJATK
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 

Recently uploaded (20)

Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStrDeep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
 
Recommendation System using RAG Architecture
Recommendation System using RAG ArchitectureRecommendation System using RAG Architecture
Recommendation System using RAG Architecture
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
AWS Cloud Cost Optimization Presentation.pptx
AWS Cloud Cost Optimization Presentation.pptxAWS Cloud Cost Optimization Presentation.pptx
AWS Cloud Cost Optimization Presentation.pptx
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Finale of the Year: Apply for Next One!
Finale of the Year: Apply for Next One!Finale of the Year: Apply for Next One!
Finale of the Year: Apply for Next One!
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 

ContainerDays Boston 2016: "Autopilot: Running Real-world Applications in Containers" (Tim Gross)