1 54
100%
Actual Size
Fit Width
Fit Height
Fit Page
Automatic
M ea N stack o n D ocker -- Daniel Ku ( http://kjunine.net/)
MeaNstack on Docker
Embed Size (px)
344 x 292
429 x 357
514 x 422
599 x 487
DESCRIPTION
MeaNstack on Docker - MongoDB - Node.js
Citation preview
1. MeaNstack on Docker -- Daniel Ku (http://kjunine.net/)
2. MEAN Stack? MongoDB: NoSQL Express: AngularJS: Node.js:
3. JavaScript . . MVP .
4. NPM: Yeoman: Bower: Grunt:
5. PM2: Node.js Application / MMS: MongoDB Management Service
New Relic: Application Monitoring Service
6. MeaNstack on Docker MongoDB Node.js
7. . , .
8.
9. on AWS ELB Application Layer: n Application Servers n x
Application Database Layer: 1 MongoDB Replica Set 2 x MongoDB
Server + MongoDB Arbiter MongoDB ReplSet Configurator MMS
Monitoring/Backup Agent
10. MongoDB Server MongoDB ReplSet Configurator // MMS
Monitoring Agent // MMS Backup Agent Sample Application
11. on Vagrant 1 MongoDB Replica Set (192.168.7.10) 2 x MongoDB
Server + MongoDB Arbiter MongoDB ReplSet Configurator 1 Sample
Application (192.168.7.20)
12. MongoDB
13. MongoDB Server FROM kjunine/ubuntu MAINTAINER Daniel Ku
"[email protected] " RUN apt-key adv --keyserver
hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 && echo 'deb
http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen'
| tee /etc/apt/sources.list.d/mongodb.list && apt-get
update && apt-get install -y mongodb-org VOLUME "/data"
WORKDIR /data EXPOSE 27017 ENTRYPOINT ["mongod", "--dbpath",
"/data"]
14. Build $ docker build -t kjunine/mongodb .
15. Run $ docker run -it -p 27017:27017 -v /data --name
mongodb1 --entrypoint=mongod kjunine/mongodb --dbpath /data
--replSet mnod $ docker run -it -p 27018:27017 -v /data --name
mongodb2 --entrypoint=mongod kjunine/mongodb --dbpath /data
--replSet mnod $ docker run -it -p 27019:27017 -v /data --name
mongodb3 --entrypoint=mongod kjunine/mongodb --dbpath /data
--replSet mnod
16. Client Run $ docker run -it --rm --entrypoint=mongo
kjunine/mongodb 192.168.7.10:27017
17. MongoDB ReplSet Configurator MongoDB Replica Set MongoDB
Shell .
https://github.com/kjunine/mongodb-replset-configurator
18. FROM kjunine/nodejs:latest MAINTAINER Daniel Ku
"[email protected] " ADD . /mrsc WORKDIR /mrsc RUN npm install ENV
MRSC_RECONFIG false ENTRYPOINT ["node", "index.js"]
19. MRSC_ID (): Replica Set ID MRSC_SERVERS (): ','
MRSC_ARBITERS: ',' Arbiter MRSC_RECONFIG: 'true'
20. Build $ docker build -t
kjunine/mongodb-replset-configurator . Run $ docker run -it --rm -e
MRSC_ID=mnod -e MRSC_SERVERS=192.168.7.10:27017,192.168.7.10:27018
-e MRSC_ARBITERS=192.168.7.10:27019
kjunine/mongodb-replset-configurator
21. Demo
22. MMS Monitoring Agent FROM kjunine/ubuntu MAINTAINER Daniel
Ku "[email protected] " RUN curl -OL
https://mms.mongodb.com/download/agent/monitoring/mongodb-mms-monitoring-agent_2.5.0.116-1_amd64.deb
&& dpkg -i
mongodb-mms-monitoring-agent_2.5.0.116-1_amd64.deb ENV MMS_API_KEY
CHANGE_ME ADD ./setup.sh /root/ ADD ./run.sh /root/ WORKDIR /root
CMD ./setup.sh && ./run.sh
23. setup.sh #!/bin/bash sed -i -e
"s/^(mmsApiKey=)$/1${MMS_API_KEY}/"
/etc/mongodb-mms/monitoring-agent.config run.sh #!/bin/bash
/usr/bin/mongodb-mms-monitoring-agent -conf
/etc/mongodb-mms/monitoring-agent.config
24. Build $ docker build -t kjunine/mms-monitoring-agent . Run
$ docker run -it --rm -e MMS_API_KEY=CHANGE_ME --name
mms-monitoring-agent kjunine/mms-monitoring-agent
25. MMS Backup Agent FROM kjunine/ubuntu MAINTAINER Daniel Ku
"[email protected] " RUN curl -OL
https://mms.mongodb.com/download/agent/backup/mongodb-mms-backup-agent_2.5.0.164-1_amd64.deb
&& dpkg -i mongodb-mms-backup-agent_2.5.0.164-1_amd64.deb
ENV MMS_API_KEY CHANGE_ME ADD ./setup.sh /root/ ADD ./run.sh /root/
WORKDIR /root CMD ./setup.sh && ./run.sh
26. setup.sh #!/bin/bash sed -i -e
"s/^(mmsApiKey=)$/1${MMS_API_KEY}/"
/etc/mongodb-mms/backup-agent.config run.sh #!/bin/bash
/usr/bin/mongodb-mms-backup-agent -c
/etc/mongodb-mms/backup-agent.config
27. Build $ docker build -t kjunine/mms-backup-agent . Run $
docker run -it --rm -e MMS_API_KEY=CHANGE_ME --name
mms-backup-agent kjunine/mms-backup-agent
28. Node.js
29. Node.js with Binary FROM kjunine/ubuntu MAINTAINER Daniel
Ku "[email protected] " RUN wget
http://nodejs.org/dist/v0.10.31/node-v0.10.31-linux-x64.tar.gz
&& tar xzf node-v0.10.31-linux-x64.tar.gz && rm
node-v0.10.31-linux-x64.tar.gz && mv
node-v0.10.31-linux-x64 node && mv node /usr/share/node
&& ln -s /usr/share/node/bin/node /usr/bin/node &&
ln -s /usr/share/node/bin/npm /usr/bin/npm
30. Node.js with NVM FROM kjunine/ubuntu MAINTAINER Daniel Ku
"[email protected] " RUN apt-get install -y man && git clone
https://github.com/creationix/nvm.git ~/.nvm && /bin/bash
-c '. ~/.nvm/nvm.sh && nvm install 0.10' && ln -s
~/.nvm/current/bin/node /usr/bin/node && ln -s
~/.nvm/current/bin/npm /usr/bin/npm
31. Build $ docker build -t kjunine/nodejs .
32. Sample Application
33. generator-angular-fullstack $ npm install -g yo bower
grunt-cli $ npm install -g generator-angular-fullstack $ mkdir
mnod.source $ cd mnod.source $ yo angular-fullstack
34. & & $ npm install $ bower install $ grunt test $
grunt serve $ grunt build
35. New Relic $ npm install newrelic --save $ cp
node_modules/newrelic/newrelic.js . server/app.js if ('production'
=== process.env.NODE_ENV) { require('newrelic'); }
36. Workarounds bower_components => docker build context 7MB
=> bower_components connect-mongo MongoDB =>
37. FROM kjunine/nodejs:latest MAINTAINER Daniel Ku
"[email protected] " ADD . /mnod WORKDIR /mnod RUN npm install -g
pm2 && npm install ENV NODE_ENV production ENV PORT 8080
ENV MONGOHQ_URL mongodb://localhost/mnod ENV NEW_RELIC_APP_NAME
MeaNstackOnDocker ENV NEW_RELIC_LICENSE_KEY CHANGE_ME EXPOSE 8080
CMD pm2 start server/app.js -i max --name mnod --no-daemon
38. Build $ grunt build $ cd dist $ docker build -t
kjunine/mnod . Run $ docker run -it --rm -p 8080:8080 -e
MONGOHQ_URL=mongodb://192.168.7.10:27017,192.168.7.10:27018/mnod?replicaSet=mnod
-e NEW_RELIC_LICENSE_KEY=CHANGE_ME --name mnod kjunine/mnod
39. #!/usr/bin/env bash VERSION=X.Y.Z npm install bower install
rm -rf dist mkdir dist grunt build ... cd dist git init git
checkout --orphan release git add --all git ci -m "$VERSION" git
remote add origin [email protected] :kjunine/mnod.release.git git push
origin release --force git checkout -b $VERSION git push origin
$VERSION cd ..
40. Demo
41. Vagrant with Docker Provisioner
42. Base Box config.vm.box = "ubuntu/trusty64" config.vm.define
"base" do |base| base.vm.provision :file, source: "docker",
destination: "~/docker" base.vm.provision :shell, inline: "cp
/home/vagrant/docker /etc/default/docker" base.vm.provision
:docker, images: [ "kjunine/mongodb:latest",
"kjunine/mongodb-replset-configurator:latest",
"kjunine/nodejs:latest", "kjunine/mnod:latest" ] end
DOCKER_OPTS="-H unix:// -H tcp://0.0.0.0:2375"
43. Demo Vagrant config.vm.box = "mnod/base" config.vm.define
"database" do |database| database.vm.hostname = "database"
database.vm.network "private_network", ip: "192.168.7.10"
database.vm.network "forwarded_port", guest: 2375, host: 2376 ...
end config.vm.define "application" do |application|
application.vm.hostname = "application" application.vm.network
"private_network", ip: "192.168.7.20" application.vm.network
"forwarded_port", guest: 2375, host: 2377 application.vm.network
"forwarded_port", guest: 8080, host: 8080 ... end
44. Database VM Provision database.vm.provision :docker do
|docker| docker.run "mongodb1", image: "kjunine/mongodb", args: "-p
27017:27017 -v /data --entrypoint=mongod", cmd: "--dbpath /data
--replSet mnod" ... docker.run
"kjunine/mongodb-replset-configurator", daemonize: false, args:
"--rm -e MRSC_ID=mnod -e
MRSC_SERVERS=192.168.7.10:27017,192.168.7.10:27018 -e
MRSC_ARBITERS=192.168.7.10:27019" end
45. Application VM Provision application.vm.provision :docker
do |docker| docker.run "kjunine/mnod", args: "-p 8080:8080 -e
MONGOHQ_URL=mongodb://192.168.7.10:27017,192.168.7.10:27018/mnod?replicaSet=mnod
-e NEW_RELIC_LICENSE_KEY=CHANGE_ME" end
46. vagrant up !
47. Demo
48.
49. Going Futher MMS Adding MongoDB user and password Sharding
MongoDB Fully Automated Build/Deploy Private Docker Repository
Monitoring and Logging
50. Dockerfile Sources
https://github.com/kjunine?tab=repositories Docker Hub Repository
https://registry.hub.docker.com/repos/kjunine/
51. Sample Source https://github.com/kjunine/mnod.source Sample
Release https://github.com/kjunine/mnod.release Vagrant
Provisioning https://github.com/kjunine/mnod.provision
52. Thank You!
LOAD MORE