ÕâÊÇÁ½ÆªÁ¬ÔØÎÄÕµĵÚһƪ£¬½²½âÁËÈçºÎʹÓà Docker Ìæ´ú Vagrant ¿ª·¢»ùÓÚ Express ¿ò¼ÜµÄNodeJs AppµÄ²¿·Öϸ½Ú¡£²»¹ý£¬Õâ´ÎÒªÔö¼ÓµãÄѶȣºÎÒÃÇҪʹÓà connect-redis ÔÚ Redis ÖÐʵÏÖ session ¹¦ÄÜ¡£
The Node App
Õâ¸ö App ÓÉÒ»¸ö package.json , server.js ºÍ .gitignore Îļþ×é³É£¬¾ÍÕâô¼ò¼òµ¥µ¥£º
gitignore :
package.json :
{
"name": "docker-dev",
"version": "0.1.0",
"description": "Docker Dev",
"dependencies": {
"connect-redis": "~1.4.5",
"express": "~3.3.3",
"hiredis": "~0.1.15",
"redis": "~0.8.4"
}
}
|
server.js :
var express = require('express'),
app = express(),
redis = require('redis'),
RedisStore = require('connect-redis')(express),
server = require('http').createServer(app);
app.configure(function() {
app.use(express.cookieParser('keyboard-cat'));
app.use(express.session({
store: new RedisStore({
host: process.env.REDIS_HOST || 'localhost',
port: process.env.REDIS_PORT || 6379,
db: process.env.REDIS_DB || 0
}),
cookie: {
expires: false,
maxAge: 30 * 24 * 60 * 60 * 1000
}
}));
});
app.get('/', function(req, res) {
res.json({
status: "ok"
});
});
var port = process.env.HTTP_PORT || 3000;
server.listen(port);
console.log('Listening on port ' + port);
|
Server.js ´¦ÀíÁËÒÀÀµ¹ØÏµ²¢Æô¶¯ÁËÒ»¸öExpress App£¬Õâ¸öExpress App ÅäÖÃÁË Redis Àï´æ´¢µÄ Session ÐÅÏ¢²¢ÆØÂ¶ÁËÒ»¸ö¶Ëµã(endpoint)ÓÃÀ´·µ»Ø±ê×¼ json ¸ñʽµÄ·þÎñÆ÷״̬ÐÅÏ¢¡£
ÕâÀïÐèÒªÉÔ΢עÒâµÄÊÇ£¬Redis µÄÁ¬½ÓÐÅÏ¢»á±»Ê¹ÓõĻ·¾³±äÁ¿Ëù¸²¸Ç--ºóÃæ·¢²¼Ê±»áÓÐÓõ½ÕâÒ»ÐÅÏ¢¡£
The Dockerfile
ΪÁ˱ãÓÚ¿ª·¢£¬ÎÒÃÇ»á°Ñ redis ºÍ node ÔËÐÐÔÚͬһ¸öÈÝÆ÷ÀҪʵÏÖÕâµã£¬¾Í±ØÐëÓà Dockerfile À´ÅäÖÃÈÝÆ÷ :
Dockerfile :
FROM dockerfile/ubuntu
MAINTAINER Abhinav Ajgaonkar
# Install Redis
RUN \
apt-get -y -qq install python redis-server
# Install Node
RUN \
cd /opt && \
wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz && \
tar -xzf node-v0.10.28-linux-x64.tar.gz && \
mv node-v0.10.28-linux-x64 node && \
cd /usr/local/bin && \
ln -s /opt/node/bin/* . && \
rm -f /opt/node-v0.10.28-linux-x64.tar.gz
# Set the working directory
WORKDIR /src
CMD ["/bin/bash"]
|
ÈÃÎÒÃÇÖðÐÐÖðÐÐÀ´¿´¿´ Docherfile ÀïµÄ´úÂ룺
¸æËß Docker Óà Docker ¹«Ë¾ÌṩµÄ dockerfile/ubuntu µÄ¾µÏñÎļþ×÷Ϊ build ʱµÄ»ù´¡¾µÏñ¡£
1 RUN \
2 apt-get -y -qq install python redis-server
|
»ù´¡¾µÏñ±¾Éí²¢Ã»ÓÐÈκζ«Î÷£¬ËùÒÔ£¬ÎÒÃÇÐèÒªÓà apt-get ÃüÁËùÐèÒªµÄ×é¼þ´ò°ü½øÈ¥¡£ÕâÌõ±íʾ°²×° pythonºÍ redis-server£¬Redis ·þÎñÊDZØÐèµÄ£¬ÒòΪÎÒÃÇÒª°Ñ session ÐÅÏ¢´æ´¢½øÈ¥¡£¶ÔÓÚ npm ¶øÑÔ£¬python ¿ÉÒÔΪ Redis Node Éú³É C À©Õ¹¡£
RUN \
cd /opt && \
wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz && \
tar -xzf node-v0.10.28-linux-x64.tar.gz && \
mv node-v0.10.28-linux-x64 node && \
cd /usr/local/bin && \
ln -s /opt/node/bin/* . && \
rm -f /opt/node-v0.10.28-linux-x64.tar.gz
|
ÏÂÔØ²¢½âѹ 64 λ¶þ½øÖưæ NodeJs¡£
Õâ¾ä»°ÊǸæËß Docker -- ÈÝÆ÷¿ªÊ¼ÔËÐÐʱ½øÈë cd /src Ŀ¼¡£
´ËΪ×îºóÒ»²½£ºÆô¶¯ /bin/bash.
Build and run the container
Docker file ÅäÖúúó£¬ÎÒÃÇÀ´Éú³ÉÒ»¸ö Docker ¾µÏñ£º
1 docker build -t sqldump/docker-dev:0.1 .
|
Éú³É³É¹¦ºó£¬¾Í¿ÉÒÔÓÃÏÂÃæµÄÃüÁîÆô¶¯ÈÝÆ÷ÁË£º
1 docker run -i -t --rm \
2 -p 3000:3000 \
3 -v `pwd`:/src \
4 sqldump/docker-dev:0.1
|
ÎÒÃÇÀ´·ÖÎöÒ»ÏÂÕâ¸öÃüÁî¡£
-i£º ÒÔ½»»¥Ä£Ê½ÔËÐÐÈÝÆ÷ £¨²»Í¬ÓÚ -d : ÒÔ·ÖÀëģʽÔËÐÐÈÝÆ÷£©£¬ÕâÒâζ׎»»¥»Ø»° session ½áÊøÊ±£¬ÈÝÆ÷¾Í»áÍ£Ö¹ÔËÐС£
-t : ·ÖÅäÁËÒ»¸öÐéÄâÖÕ¶Ë£¨pseudo-tty£©¡£
--rm : Í£Ö¹ÔËÐÐÊ±ÒÆ³ýÈÝÆ÷ºÍÎļþϵͳ¡£
-p 3000:3000 £ºÖ÷»ú¶Ë¿Ú 3000 : ÈÝÆ÷¶Ë¿Ú 3000
ÕâÌõÃüÁî°ÑÖ÷»úµÄµ±Ç°¹¤×÷Ŀ¼(È磬ÏîÄ¿Îļþ)ÔØÈëÈÝÆ÷µÄ/srcÀïÃæ¡£ÎÒÃÇÔØÈëÎļþ¶ø²»ÊÇʹÓà add ÃüÁîÔö¼ÓÎļþ£¬ÕâʹµÃÎÒÃÇÔÚÎı¾±à¼Æ÷Àï¸ü°®ÎļþºóÄÜÁ¢¿ÌÔÚÈÝÆ÷Àï¿´µ½Ð§¹û¡£
sqldump/docker-dev:0.1 : µ±Ç°ÔËÐÐµÄ docker ¾µÏñµÄÃû×ֺͰ汾ºÅÓëÎÒÃÇÉú³ÉµÄ¾µÏñÊÇÒ»ÑùµÄ¡£
ÓÉÓÚ Dockerfiles Ö¸¶¨ÁË CMD ["/bin/bash"]£¬ÈÝÆ÷ÔËÐкóÎÒÃǾͽøÈëÁËÒ»¸ö bash shell¡£Èç¹û docker ³É¹¦ÔËÐÐÁËÃüÁÇé¾°Ó¦¸ÃÈçÏÂͼ£º

Start Developing
ÈÝÆ÷ÏÖÔÚÒѾÔËÐÐÆðÀ´ÁË£¬²»¹ý£¬ÔÚ¿ªÊ¼±àд´úÂë֮ǰ£¬ÐèÒª½«Ò»Ð©±êÅäµÄ£¬·Ç docker Îļþ·Ö±ð°²×°¡£Ê×ÏÈ£¬ÓÃÈçÏÂÃüÁîÔÚÈÝÆ÷ÀïÆô¶¯ redis ·þÎñ£º
1 service redis-server start
|
È»ºó£¬°²×°Ïà¹ØÒÀÀµºÍ nodemon ¡£Nodemon ¿ÉÒÔʵʱ¼àÌýÏîÄ¿ÎļþµÄ±ä»¯²¢ÖØÆô·þÎñ¡£
1 npm install
2 npm install -g nodemon
|
×îºó£¬ÓÃÈçÏÂÃüÁîÆô¶¯·þÎñ£º
ÏÖÔÚ£¬´ò¿ªÄãµÄä¯ÀÀÆ÷²¢·ÃÎÊ£ºhttp://localhost:3000£¬Ë³ÀûµÄ»°»á³öÏÖÏÂͼÇé¾°£º

¸ø server.js Ôö¼ÓÒ»¸ö¶ËµãÒÔÄ£Ä⿪·¢¹¤×÷Á÷£º
1 app.get('/hello/:name', function(req, res) {
2 res.json({
3 hello: req.params.name
4 });
5 });
|
Ä㽫¿ÉÒÔ¿´µ½ nodemon ¼ì²âµ½ÎļþµÄ¸ü¸Ä²¢ÖØÆôÁË·þÎñ£º

ÏÖÔÚ·ÃÎÊ£ºhttp://localhost:3000/hello/world£¬Ä㽫»á¿´µ½µÄÒ³Ãæ£º

Production
ÈÝÆ÷µ±Ç°µÄ״̬£¬»¹Ô¶Ã»ÓгÉÐÍ¡£redis ÀïÃæµÄÊý¾ÝÔÚÈÝÆ÷ÖØÆôºó»á¶ªÊ§¡£Í¬ÑùµÄ£¬Èç¹ûɾµôÕâ¸öÈÝÆ÷ÖØÐÂÉú³ÉÒ»¸ö£¬Ö®Ç°µÄÊý¾ÝÒ²²»»á±»±£´æ¡£ÕâÑùµÄ½á¹ûÊDz»Àֹ۵ģ¬ÄÇô£¬ÔÚ½ÓÏÂÀ´µÄµÚ¶þÕ£¬Îһὲ½â²úÆ·µÄÉèÖò¢½â¾öÕâÒ»ÎÊÌâ¡£
|