Content Management PlatformFor Business Applications/
2/13/2013 Damien METZLER
Build a cloud platform with Docker
Build a cloud platform with Docker
�2
• Nuxeo : a small introduction
• Running Nuxeo(s) in Docker
• Managing a cloud Platform
Nuxeo : small Intro
�3
Nuxeo : small intro
�4
• Open Source ECM platform
• In java
• Designed for extension
• Nuxeo Studio
Nuxeo : small intro
�5
Nuxeo Studio
�6
Nuxeo.io
• Our approach to PaaS
• Provide one-click Nuxeo deployment to our users
• Integrates all of our services (Studio, Market place, custom add-ons)
• Allow easy and fast deployment
�7
Running Nuxeo(s) in Docker
�8
Running Nuxeo in Docker
�9
• Nuxeo is Java based : runs in Tomcat
• Needs a DB : PostgreSQL
• With some utils• poppler-utils (pdf2html)
• OpenOffice (yes it’s an « util »)
• ImageMagick (image conversion)
Running Nuxeo in Docker
�10
http://www.nuxeo.com/blog/development/2014/01/docker-
containers-nuxeo-part-1/
Running Nuxeo in Docker
�10
http://www.nuxeo.com/blog/development/2014/01/docker-
containers-nuxeo-part-1/
OpenOffice
Running Nuxeo in Docker
�10
http://www.nuxeo.com/blog/development/2014/01/docker-
containers-nuxeo-part-1/
NuxeoOpenOffice
Running Nuxeo in Docker
�10
http://www.nuxeo.com/blog/development/2014/01/docker-
containers-nuxeo-part-1/
NuxeoOpenOffice
ImageMagick
Running Nuxeo in Docker
�10
http://www.nuxeo.com/blog/development/2014/01/docker-
containers-nuxeo-part-1/
PG
NuxeoOpenOffice
ImageMagick
Running Nuxeo in Docker
�10
http://www.nuxeo.com/blog/development/2014/01/docker-
containers-nuxeo-part-1/
PG
NuxeoOpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�10
http://www.nuxeo.com/blog/development/2014/01/docker-
containers-nuxeo-part-1/
PG
NuxeoOpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�11
http://www.nuxeo.com/blog/development/2014/01/docker-
containers-nuxeo-part-1/
Running Nuxeo in Docker
�12
PG
NuxeoOpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�12
PG
NuxeoOpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�12
PG
Nuxeo
OpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�12
PG
Nuxeo
OpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�12
PG
Nuxeo
OpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�12
PG
Nuxeo
OpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�12
PG
Nuxeo
OpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�12
PG
Nuxeo
OpenOffice
ImageMagick
popplers
Running Nuxeo in Docker
�13
PG
Nuxeo
OpenOffice
ImageMagick
popplers
Services
Running Nuxeo in Docker
�13
PG
Nuxeo
OpenOffice
ImageMagick
popplers
Nuxeo
Services
Running Nuxeo in Docker
�13
PG
Nuxeo
OpenOffice
ImageMagick
popplers
NuxeoNuxeo
Services
Running Nuxeo in Docker
�13
PG
Nuxeo
OpenOffice
ImageMagick
popplers
NuxeoNuxeoNuxeo
Services
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
NuxeoNuxeoNuxeoNuxeo
Host4
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
NuxeoNuxeoNuxeoNuxeo
Host4
Reverse Proxy
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
NuxeoNuxeoNuxeoNuxeo
Host4
Reverse Proxy
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
NuxeoNuxeoNuxeoNuxeo
Host4
Reverse Proxy
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
NuxeoNuxeoNuxeoNuxeo
Host4
Reverse Proxy
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
NuxeoNuxeoNuxeoNuxeo
Host4
Reverse Proxy
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
NuxeoNuxeoNuxeoNuxeo
Host4
Reverse Proxy
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
NuxeoNuxeoNuxeoNuxeo
Host4
Reverse Proxy
Problems…
�14
PG
OpenOffice
ImageMagick
popplers
Services
NuxeoNuxeoNuxeoNuxeo
Host1
NuxeoNuxeoNuxeoNuxeo
Host2
NuxeoNuxeoNuxeoNuxeo
Host3
NuxeoNuxeoNuxeoNuxeo
Host4
Reverse Proxy
• Running a lot of docker container may be harmful !
• We need some tooling to manage that
�15
Running Nuxeo in Docker
Managing a cloud Platform
�16
Managing a cloud platform
• We need to • Be aware of cluster’s state
• Be able to launch services
• Resilient
�17
Managing a cloud platform
• Based on The Grid (aka Flynn Layer0 http://flynn.io)
• Backed by CoreOS (http://www.coreos.com), small linux distro which provides• etcd (distributed registry)
• systemd (replacement for init.d)
• of course docker
�18
Managing a cloud platform• etcd provides a way to share cluster state
�19
/discover/services
Managing a cloud platform• etcd provides a way to share cluster state
�20
/discover/services/host nxio-core-01 => 192.168.1.20:1113nxio-core-01
etcd
Managing a cloud platform• etcd provides a way to share cluster state
�21
/discover/services/host nxio-core-01 => 192.168.1.20:1113 nxio-core-02 => 192.168.1.21:1113
nxio-core-01
etcd
nxio-core-02
etcd
Managing a cloud platform• etcd provides a way to share cluster state
�22
/discover/services/host nxio-core-01 => 192.168.1.20:1113 nxio-core-02 => 192.168.1.21:1113 /nxio/nxio-01 db-host: …. s3bucket: … domain: mydomain.nuxeo.io mp-packages: [dm, dam…] !
nxio-core-01
etcd
nxio-core-02
etcd
Managing a cloud platform• etcd provides a way to share cluster state
�23
/discover/services/host nxio-core-01 => 192.168.1.20:1113 nxio-core-02 => 192.168.1.21:1113 /discover/services/nxio-01 node1 => 192.168.1.20:5678 node2 => 192.168.1.21:4523 /nxio/nxio-01 db-host: …. s3bucket: … domain: mydomain.nuxeo.io mp-packages: [dm, dam…] /domains/ mydomain.nuxeo.io => nxio-01 !
nxio-core-01
etcd
nxio-core-02
etcd
nxio-01
nxio-01
Managing a cloud platform• Reverse proxy uses etcd to resolve requests path
�24
nxio-core-01
etcd
nxio-01
nxio-core-02
etcd
nxio-01
Soft etcd based reverse proxy
/discover/services/host nxio-core-01 => 192.168.1.20:1113 nxio-core-02 => 192.168.1.21:1113 /discover/services/nxio-01 node1 => 192.168.1.20:5678 node2 => 192.168.1.21:4523 !…. !/domains/ mydomain.nuxeo.io => nxio-01 !
Managing a cloud platform• Reverse proxy uses etcd to resolve requests path
�24
nxio-core-01
etcd
nxio-01
nxio-core-02
etcd
nxio-01
Soft etcd based reverse proxy
/discover/services/host nxio-core-01 => 192.168.1.20:1113 nxio-core-02 => 192.168.1.21:1113 /discover/services/nxio-01 node1 => 192.168.1.20:5678 node2 => 192.168.1.21:4523 !…. !/domains/ mydomain.nuxeo.io => nxio-01 !
mydomain.nuxeo.com
Managing a cloud platform• Reverse proxy uses etcd to resolve requests path
�24
nxio-core-01
etcd
nxio-01
nxio-core-02
etcd
nxio-01
Soft etcd based reverse proxy
/discover/services/host nxio-core-01 => 192.168.1.20:1113 nxio-core-02 => 192.168.1.21:1113 /discover/services/nxio-01 node1 => 192.168.1.20:5678 node2 => 192.168.1.21:4523 !…. !/domains/ mydomain.nuxeo.io => nxio-01 !
mydomain.nuxeo.com
Managing a cloud platform• Reverse proxy uses etcd to resolve requests path
�24
nxio-core-01
etcd
nxio-01
nxio-core-02
etcd
nxio-01
Soft etcd based reverse proxy
/discover/services/host nxio-core-01 => 192.168.1.20:1113 nxio-core-02 => 192.168.1.21:1113 /discover/services/nxio-01 node1 => 192.168.1.20:5678 node2 => 192.168.1.21:4523 !…. !/domains/ mydomain.nuxeo.io => nxio-01 !
mydomain.nuxeo.com
Managing a cloud platform• Reverse proxy uses etcd to resolve requests path
�24
nxio-core-01
etcd
nxio-01
nxio-core-02
etcd
nxio-01
Soft etcd based reverse proxy
/discover/services/host nxio-core-01 => 192.168.1.20:1113 nxio-core-02 => 192.168.1.21:1113 /discover/services/nxio-01 node1 => 192.168.1.20:5678 node2 => 192.168.1.21:4523 !…. !/domains/ mydomain.nuxeo.io => nxio-01 !
mydomain.nuxeo.com
Managing a cloud platform
• Why use a « soft » reverse proxy• No service « restart » = full dynamic
• Allow to intercept calls for metrics
• Useful for passivation
• Allow to deal with interruptions of service
• Ask the user to wait
• Ask the cluster to start a new instance
�25
Actual State
• Labs using Vagrant on bare metal
• Still have to know how to start nuxeo container ;-)• via a systemd service
• like a job via flynn-host
• POC on AWS for end of february
�26
Conclusion
• Docker allows us to start/stop new instances very fast
• It allows to design an infrastructure that is not tied to IaaS provider (but can be run onto)
• Very young ecosystem/tools like etcd, discoverd, flynn stack etc…
�27
Recommended