meteor - docker: the good, the bad & the awesome

Post on 20-Feb-2017

414 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Meteor - DockerThe Good, the Bad & the Awesome

...Studied SE at TU Vienna

Worked 2 years in Silicon Valley

About me

Not a Docker Expert!

What is Docker?

Build, Ship, RunAn open platform for distributed applications for developers and sysadmins

Server

Host OS

Hypervisor

Guest OS

Guest OS

Guest OS

Bin/Libs

Bin/Libs

Bin/Libs

App A App A’ App B

Host OS

Server

Bins/Libs Bins/Libs

Container E

ngine

App A

App A

App B

App B

App B

’ VMContainer

The goodMeteor is ready for Docker!

There is a Docker image!https://github.com/meteorhacks/meteord

Build server App Servers

Dev Environment

Sourcecode

Tarball

Tarball

my current setup

Git + Meteorfully automated process

post-receive hookmeteor build

scp + ssh

CoreOSLightweight LinuxShips with Docker

Uses SystemdUpdates automatically

The “Bad”One Process per Container

nginxis NOT ready for Docker

.. but it works for basic scenariosit’s better to use haproxy instead

MongoDBgreat Docker support

but does not support OPLOG out of the box→ you need to write your own Dockerfile to

make this work!

Networking is a bitchadditional layer

container doesn’t know about host network...

App Monitoringcan be tricky, but there are options:

Kadira, Logentries, ...

Service MonitoringI created a Docker image for that:

kromit/systemd_monhttps://github.com/faburem/systemd_mon/tree/Docker-image

(Pull request pending)

Continuous Integration

0 downtime Deployment

Rebuild Docker Image

Run temporary instance of current

Image

Run instance of new image

Stop main instance

Docker Host(CoreOS)

Stop temporary instance

Scaling is fun*docker run image/name

* configuring nginx not so much

Questions?

faburem Fabian Kromer @faburem

var promise = new Promise(function(resolve, reject) { while (! codingFinished){ // finish coding } if (/* everything turned out fine */) { resolve(/* sourceCode */); } else { reject(Error("Fail")); }});promise.then(function(result) { // make public release on Github}, function(err){console.log(err);});

top related