ÕªÒª£º±¾ÎÄ´ÓʲôÊÇDockerÇÐÈ룬Ïêϸ·ÖÏíÁËDockerfileÖ§³ÖµÄÓï·¨ÃüÁ×îºóËû½éÉÜÁËÔõô°Ñnodeclub¹¹½¨³ÉDocker¾µÏñ¡£
14Äê±ÏÒµºó¿ªÊ¼½Ó´¥node£¬½ñÌì¾ÍÏë¸ú´ó¼ÒÁÄÁÄÔõô°ÑnodeclubÏîĿԴÂë¹¹½¨³ÉÒ»¸ö¾µÏñ¡£»°ËµDockerÊǽñÄê¸Õ½Ó´¥µÄ£¬»¹ÔÚÈëÃÅÖУ¬ÏÂÃæÎÒ¼òµ¥½éÉÜÏÂDocker¡¢DockerfileµÄÓï·¨ÒÔ¼°ÈçºÎ°ÑnodeclubÔ´Âë¹¹½¨³É¾µÏñ¡£
1.ʲôÊÇdocker£¿
Docker allows you to package an application with all of its dependencies into a standardized unit for software development.
DockerÊÇÒ»¸ö¿ªÔ´µÄÓ¦ÓÃÈÝÆ÷ÒýÇæ£¬Èÿª·¢Õß¿ÉÒÔ´ò°üËûÃǵÄÓ¦ÓÃÒÔ¼°ÒÀÀµ°üµ½Ò»¸ö¿ÉÒÆÖ²µÄÈÝÆ÷ÖУ¬È»ºó·¢²¼µ½ÈκÎÁ÷ÐÐµÄ Linux »úÆ÷ÉÏ£¬Ò²¿ÉÒÔʵÏÖÐéÄ⻯¡£ÈÝÆ÷ÊÇÍêȫʹÓÃɳÏä»úÖÆ£¬Ï໥֮¼ä²»»áÓÐÈκνӿڣ¨ÀàËÆ iPhone µÄ app£©¡£¼¸ºõûÓÐÐÔÄÜ¿ªÏú£¬¿ÉÒÔºÜÈÝÒ×µØÔÚ»úÆ÷ºÍÊý¾ÝÖÐÐÄÖÐÔËÐС£×îÖØÒªµÄÊÇ£¬ËûÃDz»ÒÀÀµÓÚÈκÎÓïÑÔ¡¢¿ò¼Ü°üÀ¨ÏµÍ³¡£
Docker µÄÄ¿±êÊÇʵÏÖÇáÁ¿¼¶µÄ²Ù×÷ϵͳÐéÄ⻯½â¾ö·½°¸¡£Docker µÄ»ù´¡ÊÇ Linux ÈÝÆ÷£¨LXC£©µÈ¼¼Êõ¡£ÔÚ LXC µÄ»ù´¡ÉÏ Docker ½øÐÐÁ˽øÒ»²½µÄ·â×°£¬ÈÃÓû§²»ÐèҪȥ¹ØÐÄÈÝÆ÷µÄ¹ÜÀí£¬Ê¹µÃ²Ù×÷¸üΪ¼ò±ã¡£Óû§²Ù×÷ Docker µÄÈÝÆ÷¾ÍÏñ²Ù×÷Ò»¸ö¿ìËÙÇáÁ¿¼¶µÄÐéÄâ»úÒ»Ñù¼òµ¥¡£
ÏÂÃæµÄͼƬ±È½ÏÁË Docker ºÍ´«Í³ÐéÄ⻯·½Ê½µÄ²»Í¬Ö®´¦£¬¿É¼ûÈÝÆ÷ÊÇÔÚ²Ù×÷ϵͳ²ãÃæÉÏʵÏÖÐéÄ⻯£¬Ö±½Ó¸´Óñ¾µØÖ÷»úµÄ²Ù×÷ϵͳ£¬¶ø´«Í³·½Ê½ÔòÊÇÔÚÓ²¼þ²ãÃæÊµÏÖ¡£

2.Dockerfile¼òµ¥ÈëÃÅ
Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands you would normally execute manually in order to build a Docker image. By calling docker build from your terminal, you can have Docker build your image step by step, executing the instructions successively. |
Dockerͨ¹ý¶ÁÈ¡DockerfileÎļþÖеÄÖ¸Áî×Ô¶¯¹¹½¨¾µÏñ¡£DcokerfileÊÇÒ»¸öÎı¾Îļþ£¬Ëü°üº¬Á˹¹½¨¾µÏñËùÐèÒªÖ´ÐеÄÈ«²¿ÃüÁî¡£Ö´ÐÐdocker buildÃüÁDocker¾Í»á°´ÕÕÎĵµÖ´Ðв¢×îÖÕ´´½¨Ò»¸ö¾µÏñ¡£
DockerfileÖ§³ÖÖ§³ÖµÄÓï·¨ÃüÁîÈçÏ£º
Ö¸Áî²»Çø·Ö´óСд¡£µ«ÊÇ£¬ÃüÃûÔ¼¶¨ÎªÈ«²¿´óд¡£
Dockerfile¶¼±ØÐëÒÔFROMÃüÁʼ¡£ FROMÃüÁî»áÖ¸¶¨¾µÏñ»ùÓÚÄĸö»ù´¡¾µÏñ´´½¨£¬½ÓÏÂÀ´µÄÃüÁîÒ²»á»ùÓÚÕâ¸ö»ù´¡¾µÏñ£¨ÒëÕß×¢£ºCentOSºÍUbuntuÓÐЩÃüÁî¿ÉÊDz»Ò»ÑùµÄ£©¡£FROMÃüÁî¿ÉÒÔ¶à´ÎʹÓ㬱íʾ»á´´½¨¶à¸ö¾µÏñ¡£¾ßÌåÓï·¨ÈçÏ£º
ÀýÈ磺
ÉÏÃæµÄÖ¸Áî¸æËßÎÒÃÇ£¬ÐµľµÏñ½«»ùÓÚgoogleµÄNode.jsµÄ¾µÏñÀ´¹¹½¨¡£
¼ÌFROMÃüÁDockefFile»¹ÌṩÁËһЩÆäËüµÄÃüÁîÒÔʵÏÖ×Ô¶¯»¯¡£ÔÚDockerfileÎļþÖÐÕâЩÃüÁîµÄ˳Ðò¾ÍÊÇËüÃDZ»Ö´ÐеÄ˳Ðò¡£
ÏÂÃæÎÒÃǾÍÁ˽âÏÂÕâЩÓÐȤµÄDockerfileÃüÁî°É¡£
1.MAINTAINER£ºÉèÖøþµÏñµÄ×÷Õß¡£Óï·¨ÈçÏ£º
2.RUN£ºÔÚshell»òÕßexecµÄ»·¾³ÏÂÖ´ÐеÄÃüÁî¡£RUNÖ¸Áî»áÔÚд´½¨µÄ¾µÏñÉÏÌí¼ÓеIJãÃæ£¬½ÓÏÂÀ´Ìá½»µÄ½á¹ûÓÃÔÚDockerfileµÄÏÂÒ»ÌõÖ¸ÁîÖС£Óï·¨ÈçÏ£º
3.ADD£º¸´ÖÆÎļþÖ¸Áî¡£ËüÓÐÁ½¸ö²ÎÊý<source>ºÍ<destination>¡£destinationÊÇÈÝÆ÷Äڵķ¾¶¡£source¿ÉÒÔÊÇURL»òÕßÊÇÆô¶¯ÅäÖÃÉÏÏÂÎÄÖеÄÒ»¸öÎļþ¡£Óï·¨ÈçÏ£º
4.CMD£ºÌṩÁËÈÝÆ÷ĬÈϵÄÖ´ÐÐÃüÁî¡£ DockerfileÖ»ÔÊÐíʹÓÃÒ»´ÎCMDÖ¸Áî¡£ ʹÓöà¸öCMD»áµÖÏû֮ǰËùÓеÄÖ¸ÁֻÓÐ×îºóÒ»¸öÖ¸ÁîÉúЧ¡£ CMDÓÐÈýÖÖÐÎʽ£º
CMD ["executable","param1","param2"] CMD ["param1","param2"] CMD command param1 param2 |
5.EXPOSE£ºÖ¸¶¨ÈÝÆ÷ÔÚÔËÐÐʱ¼àÌýµÄ¶Ë¿Ú¡£Óï·¨ÈçÏ£º
6.ENTRYPOINT£ºÅäÖøøÈÝÆ÷Ò»¸ö¿ÉÖ´ÐеÄÃüÁÕâÒâζ×ÅÔÚÿ´ÎʹÓþµÏñ´´½¨ÈÝÆ÷ʱһ¸öÌØ¶¨µÄÓ¦ÓóÌÐò¿ÉÒÔ±»ÉèÖÃΪĬÈϳÌÐò¡£Í¬Ê±Ò²ÒâζןþµÏñÿ´Î±»µ÷ÓÃʱ½öÄÜÔËÐÐÖ¸¶¨µÄÓ¦Óá£ÀàËÆÓÚCMD£¬DockerÖ»ÔÊÐíÒ»¸öENTRYPOINT£¬¶à¸öENTRYPOINT»áµÖÏû֮ǰËùÓеÄÖ¸ÁִֻÐÐ×îºóµÄENTRYPOINTÖ¸Áî¡£Óï·¨ÈçÏ£º
ENTRYPOINT ["executable", "param1","param2"] ENTRYPOINT command param1 param2 |
7.WORKDIR£ºÖ¸¶¨RUN¡¢CMDÓëENTRYPOINTÃüÁîµÄ¹¤×÷Ŀ¼¡£Óï·¨ÈçÏ£º
8.ENV£ºÉèÖû·¾³±äÁ¿¡£ËüÃÇʹÓüüÖµ¶Ô£¬Ôö¼ÓÔËÐгÌÐòµÄÁé»îÐÔ¡£Óï·¨ÈçÏ£º
9.USER£º¾µÏñÔËÐÐʱ£¬ÉèÖÃÒ»¸öUID¡£Óï·¨ÈçÏ£º
10.VOLUME£ºÊÚȨ·ÃÎÊ´ÓÈÝÆ÷ÄÚµ½Ö÷»úÉϵÄĿ¼¡£Óï·¨ÈçÏ£º
3.°Ñnodeclub¹¹½¨³ÉÒ»¸ö¾µÏñ
ÏȰÑÎÒдµÄDockerfileÌù³öÀ´£º
# Dockerfile to create a nodeclub image FROM google/nodejs MAINTAINER Carrotzpc # Add files to the image RUN mkdir -p /opt/nodejs ADD . /opt/nodejs WORKDIR /opt/nodejs # Install the dependencies modules RUN npm install # Run make build RUN make build # Expose environment variables ENV MONGO_CARROT_ADDR **LinkMe** ENV MONGO_CARROT_PORT **LinkMe** ENV MONGO_CARROT_DATABASE admin ENV MONGO_CARROT_USER **ChangeMe** ENV MONGO_CARROT_PASS **ChangeMe** # Expose the container port EXPOSE 5000 ENTRYPOINT ["node", "app.js"] |
Õâô¼òµ¥µÄ¼¸ÐÐÃüÁ¾Í¿ÉÒÔ¹¹½¨³öÒ»¸önodeclub¾µÏñ¡£ÏÂÃæÎÒÖØµãÁÄһϻ·¾³±äÁ¿ENV£¬nodeclubµÄÔ´ÂëÎÒÓõÄÊÇnode + mongo(ÎÞredis)µÄ°æ±¾£¬mongoÅäÖÃÐÅϢͨ¹ý»·¾³±äÁ¿´«µÝ£¬Õâ¾ÍÐèÒªÎÒÃǼòµ¥ÐÞ¸ÄÒ»ÏÂnodeclubµÄÅäÖÃÎļþ£¬ÎÒÔÚÅäÖÃÎļþÖÐÔö¼ÓÁËÒÔÏ´úÂ루²»¹ýÖ±½ÓÔÚÅäÖÃÎļþÀï±ßÕâÑùд²»Ì«ºÃ£©£¬ÓÃÀ´»ñÈ¡mongoÊý¾Ý¿âÁ¬½Ó×Ö·û´®£º
// Get mongodb connec string from env function _getMongoUrl(){ var db_addr = process.env.MONGO_CARROT_ADDR; var db_port = process.env.MONGO_CARROT_PORT; var db_user = process.env.MONGO_CARROT_USER; var db_pass = process.env.MONGO_CARROT_PASS; var db_database = process.env.MONGO_CARROT_DATABASE; var db_url = 'mongodb://'; if (db_user && db_pass) { db_url += (db_user + ':' + db_pass + '@'); } db_url += (db_addr? db_addr: 'localhost'); db_url += ':' + (db_port? db_port: 27017); db_url += '/' + (db_database? db_database: 'admin'); console.log('Connect to MongoStore Use this url:' + db_url); return db_url; } |
µ½ÕâÀïÎÒÃÇÍê³ÉÁËÔ´ÂëµÄÐ޸쬯äÖÐDockerfileÊÇ·ÅÔÚÔ´´úÂë¸ùĿ¼µÄ¡£ÏÖÔÚ¿ÉÒÔ¿ªÊ¼¹¹½¨nodeclub¾µÏñÁË£¬Windows°²×°Docker±È½Ïµ°ÌÛ£¬ÎÒ±¾µØÃ»Óа²×°Docker»·¾³£¬ÎÒÓõÄÊÇTenxCloudʱËÙÔÆµÄ±¾µØ¿Í»§¶Ëtce£¬°²×°ÅäÖö¼±È½Ï¼òµ¥£¬ÕâÀï¾Í²»ËµÁË£¬´ó¼Ò¿ÉÒԲο¼¹Ù·½Îĵµ¡£
ÔÚÃüÁîÐÐÖÐÊäÈëtce loginÌîдÓû§Ãû¡¢ÃÜÂëºóÍê³ÉµÇ¼£¬È»ºó½øÈëµ½Ô´´úÂë¸ùĿ¼£¬Ö´ÐÐtce push nodeclubÃüÁtce»á×Ô¶¯½«Dockerfile¼°ÒýÓõı¾µØÎļþ´ò°ü³Ézip£¬²¢ÉÏ´«µ½TenxCloud£¬ÓÉTenxCloudµÄÈÝÆ÷ÒýÇæ¹¹½¨Docker ¾µÏñ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½Docker¹¹½¨¾µÏñµÄÏà¹ØÈÕÖ¾£º

Íê³É¹¹½¨ºó´ò¿ªÊ±ËÙÔÆÍøÕ¾£¬½øÈë¾µÏñÊг¡>ÎҵľµÏñ¾Í¿ÉÒÔ¿´µ½ÎÒÃǸոչ¹½¨µÄ¾µÏñnodeclub£º

ÔÚ¾µÏñÏêÇéÒ³¿ÉÒÔÉÏ´«¾µÏñͼ±ê¡¢Ð޸ľµÏñÐÅÏ¢¡¢·þÎñ½Ó¿ÚµÈ£¬ÎÒÃǰÑDockerfileÖеÄENVÔö¼Óµ½·þÎñ½Ó¿ÚÖУ¬ÓÃÓÚÔÚ²¿Êð¾µÏñʱÌîдmongoµÄÏà¹ØÅäÖÃÐÅÏ¢£º

Íòʾ߱¸£¬Ö»Ç·Ò»¸ömongoÁË£¬ÕýºÃʱËÙÔÆÓÐÌṩmongoµÄ¾µÏñ£¬ÓÚÊÇÎÒ²¿ÊðÁËÒ»¸ömongo£¬È»ºóÔÚ²¿ÊðnodeclubʱÌîдÕâ¸ömongoµÄµØÖ·¡¢¶Ë¿ÚµÈÐÅÏ¢£¬ÕâÑù¾ÍÍê³ÉÁËnodeclubµÄ²¿Êð£º

»¹ÓÐÒ»ÖÖ·½Ê½¾ÍÊǰÑmongoÒ²¼¯³Éµ½ÎÒÃǵľµÏñÖУ¬Õâ¾ÍÉæ¼°µ½ÁËmongoµÄ°²×°ÒÔ¼°Æô¶¯£¬ÎÒÃÇÁôÔÚÏÂÒ»´ÎÌÖÂÛ¡£ÎÒ°ÑÔ´´úÂëÉÏ´«µ½ÁËgithub£¬´ó¼ÒÓÐÐËȤµÄ»°¿ÉÒÔ×Ô¼º¹¹½¨ÊÔÊÔ£ºhttps://github.com/Carrotzpc/docker-nodeclub¡£ ʾÀýÍøÕ¾£ºhttp://nodeclub-k9nmf.q1.tenxcloud.net:46141/¡£ PS£ºÓÉÓÚ²¿Êð¾µÏñǰhost²¢²»¿ÉÖª£¬ËùÒÔÎÒ°ÑÔ´Âë¸Ä³ÉÁËͨ¹ýreq.headers.hostÀ´»ñÈ¡host£¬ÕâÑù¼¤»îÓʼþÖеÄÁ´½Ó¾Í¿ÉÓÃÁË¡£
|