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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎ½«nodeclub¹¹½¨³ÉDocker¾µÏñ
 
×÷Õß Carrotzpc À´Ô´£ºCSDN »ðÁú¹ûÈí¼þ  ·¢²¼ÓÚ 2015-7-23
  2430  次浏览      27
 

ÕªÒª£º±¾ÎÄ´ÓʲôÊÇ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Ö§³ÖÖ§³ÖµÄÓï·¨ÃüÁîÈçÏ£º

INSTRUCTION argument

Ö¸Áî²»Çø·Ö´óСд¡£µ«ÊÇ£¬ÃüÃûÔ¼¶¨ÎªÈ«²¿´óд¡£

Dockerfile¶¼±ØÐëÒÔFROMÃüÁʼ¡£ FROMÃüÁî»áÖ¸¶¨¾µÏñ»ùÓÚÄĸö»ù´¡¾µÏñ´´½¨£¬½ÓÏÂÀ´µÄÃüÁîÒ²»á»ùÓÚÕâ¸ö»ù´¡¾µÏñ£¨ÒëÕß×¢£ºCentOSºÍUbuntuÓÐЩÃüÁî¿ÉÊDz»Ò»ÑùµÄ£©¡£FROMÃüÁî¿ÉÒÔ¶à´ÎʹÓ㬱íʾ»á´´½¨¶à¸ö¾µÏñ¡£¾ßÌåÓï·¨ÈçÏ£º

FROM <image name>

ÀýÈ磺

FROM google/nodejs

ÉÏÃæµÄÖ¸Áî¸æËßÎÒÃÇ£¬ÐµľµÏñ½«»ùÓÚgoogleµÄNode.jsµÄ¾µÏñÀ´¹¹½¨¡£

¼ÌFROMÃüÁDockefFile»¹ÌṩÁËһЩÆäËüµÄÃüÁîÒÔʵÏÖ×Ô¶¯»¯¡£ÔÚDockerfileÎļþÖÐÕâЩÃüÁîµÄ˳Ðò¾ÍÊÇËüÃDZ»Ö´ÐеÄ˳Ðò¡£

ÏÂÃæÎÒÃǾÍÁ˽âÏÂÕâЩÓÐȤµÄDockerfileÃüÁî°É¡£

1.MAINTAINER£ºÉèÖøþµÏñµÄ×÷Õß¡£Óï·¨ÈçÏ£º

MAINTAINER <author name>

2.RUN£ºÔÚshell»òÕßexecµÄ»·¾³ÏÂÖ´ÐеÄÃüÁî¡£RUNÖ¸Áî»áÔÚд´½¨µÄ¾µÏñÉÏÌí¼ÓеIJãÃæ£¬½ÓÏÂÀ´Ìá½»µÄ½á¹ûÓÃÔÚDockerfileµÄÏÂÒ»ÌõÖ¸ÁîÖС£Óï·¨ÈçÏ£º

RUN <command>

3.ADD£º¸´ÖÆÎļþÖ¸Áî¡£ËüÓÐÁ½¸ö²ÎÊý<source>ºÍ<destination>¡£destinationÊÇÈÝÆ÷Äڵķ¾¶¡£source¿ÉÒÔÊÇURL»òÕßÊÇÆô¶¯ÅäÖÃÉÏÏÂÎÄÖеÄÒ»¸öÎļþ¡£Óï·¨ÈçÏ£º

ADD <src> <destination>

4.CMD£ºÌṩÁËÈÝÆ÷ĬÈϵÄÖ´ÐÐÃüÁî¡£ DockerfileÖ»ÔÊÐíʹÓÃÒ»´ÎCMDÖ¸Áî¡£ ʹÓöà¸öCMD»áµÖÏû֮ǰËùÓеÄÖ¸ÁֻÓÐ×îºóÒ»¸öÖ¸ÁîÉúЧ¡£ CMDÓÐÈýÖÖÐÎʽ£º

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

5.EXPOSE£ºÖ¸¶¨ÈÝÆ÷ÔÚÔËÐÐʱ¼àÌýµÄ¶Ë¿Ú¡£Óï·¨ÈçÏ£º

EXPOSE <port>;

6.ENTRYPOINT£ºÅäÖøøÈÝÆ÷Ò»¸ö¿ÉÖ´ÐеÄÃüÁÕâÒâζ×ÅÔÚÿ´ÎʹÓþµÏñ´´½¨ÈÝÆ÷ʱһ¸öÌØ¶¨µÄÓ¦ÓóÌÐò¿ÉÒÔ±»ÉèÖÃΪĬÈϳÌÐò¡£Í¬Ê±Ò²ÒâζןþµÏñÿ´Î±»µ÷ÓÃʱ½öÄÜÔËÐÐÖ¸¶¨µÄÓ¦Óá£ÀàËÆÓÚCMD£¬DockerÖ»ÔÊÐíÒ»¸öENTRYPOINT£¬¶à¸öENTRYPOINT»áµÖÏû֮ǰËùÓеÄÖ¸ÁִֻÐÐ×îºóµÄENTRYPOINTÖ¸Áî¡£Óï·¨ÈçÏ£º

ENTRYPOINT ["executable", "param1","param2"]
ENTRYPOINT command param1 param2

7.WORKDIR£ºÖ¸¶¨RUN¡¢CMDÓëENTRYPOINTÃüÁîµÄ¹¤×÷Ŀ¼¡£Óï·¨ÈçÏ£º

WORKDIR /path/to/workdir

8.ENV£ºÉèÖû·¾³±äÁ¿¡£ËüÃÇʹÓüüÖµ¶Ô£¬Ôö¼ÓÔËÐгÌÐòµÄÁé»îÐÔ¡£Óï·¨ÈçÏ£º

ENV <key> <value>

9.USER£º¾µÏñÔËÐÐʱ£¬ÉèÖÃÒ»¸öUID¡£Óï·¨ÈçÏ£º

USER <uid>

10.VOLUME£ºÊÚȨ·ÃÎÊ´ÓÈÝÆ÷ÄÚµ½Ö÷»úÉϵÄĿ¼¡£Óï·¨ÈçÏ£º

VOLUME ["/data"]

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£¬ÕâÑù¼¤»îÓʼþÖеÄÁ´½Ó¾Í¿ÉÓÃÁË¡£

   
2430 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

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

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

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

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

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

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