Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃDocker¿ª·¢NodeJs APP
 
×÷ÕߣºJoe.Huang À´Ô´£º²©¿ÍÔ°  ·¢²¼ÓÚ 2015-1-26
  2245  次浏览      33
 

ÕâÊÇÁ½ÆªÁ¬ÔØÎÄÕµĵÚһƪ£¬½²½âÁËÈçºÎʹÓà Docker Ìæ´ú Vagrant ¿ª·¢»ùÓÚ Express ¿ò¼ÜµÄNodeJs AppµÄ²¿·Öϸ½Ú¡£²»¹ý£¬Õâ´ÎÒªÔö¼ÓµãÄѶȣºÎÒÃÇҪʹÓà connect-redis ÔÚ Redis ÖÐʵÏÖ session ¹¦ÄÜ¡£

The Node App

Õâ¸ö App ÓÉÒ»¸ö package.json , server.js ºÍ .gitignore Îļþ×é³É£¬¾ÍÕâô¼ò¼òµ¥µ¥£º

gitignore :

1  node_modules/*

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 ÀïµÄ´úÂ룺

 FROM dockerfile/ubuntu

¸æËß 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¡£

1 WORKDIR  /src

Õâ¾ä»°ÊǸæËß Docker -- ÈÝÆ÷¿ªÊ¼ÔËÐÐʱ½øÈë cd /src Ŀ¼¡£

1 CMD ["/bin/bash"]

´ËΪ×îºóÒ»²½£ºÆô¶¯ /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

1 -v `pwd`:/src

ÕâÌõÃüÁî°ÑÖ÷»úµÄµ±Ç°¹¤×÷Ŀ¼(È磬ÏîÄ¿Îļþ)ÔØÈëÈÝÆ÷µÄ/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

×îºó£¬ÓÃÈçÏÂÃüÁîÆô¶¯·þÎñ£º

1 nodemon server.js

ÏÖÔÚ£¬´ò¿ªÄãµÄä¯ÀÀÆ÷²¢·ÃÎÊ£º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»Àֹ۵ģ¬ÄÇô£¬ÔÚ½ÓÏÂÀ´µÄµÚ¶þÕ£¬Îһὲ½â²úÆ·µÄÉèÖò¢½â¾öÕâÒ»ÎÊÌâ¡£

   
2245 ´Îä¯ÀÀ       33
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ