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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
DockerÖÕ¼«Ö¸ÄÏ£ºÎªÊ²Ã´DockerÄÜ×öÕâô¶àÊÂ
 
УÒ룺ÁºÏþÓ ÀîÓ±½Ü À´Ô´£º51CTO ·¢²¼ÓÚ 2015-1-27
  2586  次浏览      28
 

±¾½Ì³ÌÓÐÈý¸öÄ¿±ê£ºËµÃ÷Docker½â¾öµÄÎÊÌ⡢˵Ã÷ËüÈçºÎ½â¾öÕâ¸öÎÊÌâ¡¢ÒÔ¼°ËµÃ÷ËüʹÓÃÁËÄÄЩ¼¼ÊõÀ´½â¾öÕâ¸öÎÊÌ⣬Õâ²»ÊÇһƪ½ÌÄãÔõôÔËÐа²×°DockerµÄ½Ì³Ì¡£

DockerÊÇÒ»¸öÏà¶Ô½ÏÐÂÇÒ·¢Õ¹·Ç³£¿ìËÙµÄÏîÄ¿£¬¿ÉÓÃÀ´´´½¨·Ç³£ÇáÁ¿µÄ¡°ÐéÄâ»ú¡±¡£×¢ÒâÕâÀïµÄÒýºÅ·Ç³£ÖØÒª£¬Docker´´½¨µÄ²¢·ÇÕæÕýµÄÐéÄâ»ú£¬¶ø¸üÏñÊÇ´òÁ˼¤ËصÄchroot£¬àÅ£¬ÊÇ´óÁ¿µÄ¼¤ËØ¡£

ÔÚÎÒÃǼÌÐøÖ®Ç°£¬ÎÒÏÈ˵Ï£¬½ØÖÁĿǰ£¨2015Äê1ÔÂ4ÈÕ£©ÎªÖ¹£¬DockerÖ»ÄÜÔÚLinuxÉϹ¤×÷£¬Ôݲ»Ö§³ÖWindows»òOSX£¨ÒëÕß×¢£º²»Ö±½ÓÖ§³Ö£©¡£ÎÒÉÔºó»á½²µ½DockerµÄ¼Ü¹¹£¬Äã»áÃ÷°×ÆäÖеÄÔ­Òò¡£ËùÒÔ£¬Èç¹ûÏëÔÚ·ÇLinuxƽ̨ÉÏʹÓÃDocker£¬ÄãÐèÒªÔÚÐéÄâ»úÀïÔËÐÐLinux¡£

±¾½Ì³ÌÓÐÈý¸öÄ¿±ê£ºËµÃ÷Docker½â¾öµÄÎÊÌ⡢˵Ã÷ËüÈçºÎ½â¾öÕâ¸öÎÊÌâ¡¢ÒÔ¼°ËµÃ÷ËüʹÓÃÁËÄÄЩ¼¼ÊõÀ´½â¾öÕâ¸öÎÊÌâ¡£Õâ²»ÊÇһƪ½ÌÄãÔõôÔËÐа²×°DockerµÄ½Ì³Ì£¬Docker´ËÀà½Ì³ÌÒѾ­Óкܶ࣬°üÀ¨Docker×÷ÕßµÄÔÚÏß»¥¶¯½Ì³Ì£¨ÒëÕß×¢£º×÷ÕߺÜϲ»¶ÔÚÒ»¸ö¾ä×ÓÀïÒýÓöà¸öÁ´½Ó£¬ÏÂͬ£©¡£±¾ÎÄ×îºóÓÐÒ»¸ö²½Öè˵Ã÷£¬Ä¿µÄÊÇÓÃÒ»¸öÃ÷È·µÄÏÖʵÊÀ½çµÄÀý×ÓÀ´´®ÁªÎÄÕÂÖÐËùÓеÄÀíÂÛ£¬µ«²»»áÌ«¹ýÏêϸ¡£

DockerÄÜ×öʲô£¿

Docker¿ÉÒÔ½â¾öÐéÄâ»úÄܹ»½â¾öµÄÎÊÌ⣬ͬʱҲÄܹ»½â¾öÐéÄâ»úÓÉÓÚ×ÊÔ´ÒªÇó¹ý¸ß¶øÎÞ·¨½â¾öµÄÎÊÌâ¡£DockerÄÜ´¦ÀíµÄÊÂÇé°üÀ¨£º

1.¸ôÀëÓ¦ÓÃÒÀÀµ

2.´´½¨Ó¦ÓþµÏñ²¢½øÐи´ÖÆ

3.´´½¨ÈÝÒ×·Ö·¢µÄ¼´Æô¼´ÓõÄÓ¦ÓÃ

4.ÔÊÐíʵÀý¼òµ¥¡¢¿ìËÙµØÀ©Õ¹

5.²âÊÔÓ¦Óò¢ËæºóÏú»ÙËüÃÇ

Docker±³ºóµÄÏë·¨ÊÇ´´½¨Èí¼þ³ÌÐò¿ÉÒÆÖ²µÄÇáÁ¿ÈÝÆ÷£¬ÈÃÆä¿ÉÒÔÔÚÈκΰ²×°ÁËDockerµÄ»úÆ÷ÉÏÔËÐУ¬¶ø²»ÓùØÐĵײã²Ù×÷ϵͳ£¬ÀàËÆ´¬²°Ê¹Óõļ¯×°Ï䣬ҰÐIJª²ªµÄËûÃdzɹ¦ÁË¡£

Docker¾¿¾¹×öÁËʲô£¿

ÕâÒ»½ÚÎÒ²»»á˵Ã÷DockerʹÓÃÁËÄÄЩ¼¼ÊõÀ´Íê³ÉËüµÄ¹¤×÷£¬»òÓÐʲô¾ßÌåµÄÃüÁî¿ÉÓã¬ÕâЩ·ÅÔÚÁË×îºóÒ»½Ú£¬ÕâÀïÎÒ½«ËµÃ÷µÄÊÇDockerÌṩµÄ×ÊÔ´ºÍ³éÏó¡£

DockerÁ½¸ö×îÖØÒªµÄ¸ÅÄîÊǾµÏñºÍÈÝÆ÷¡£³ý´ËÖ®Í⣬Á´½ÓºÍÊý¾Ý¾íÒ²ºÜÖØÒª¡£ÎÒÃÇÏÈ´Ó¾µÏñÈëÊÖ¡£

¾µÏñ

DockerµÄ¾µÏñÀàËÆÐéÄâ»úµÄ¿ìÕÕ£¬µ«¸üÇáÁ¿£¬·Ç³£·Ç³£ÇáÁ¿£¨Ï½Úϸ˵£©¡£

´´½¨Docker¾µÏñÓм¸ÖÖ·½Ê½£¬¶àÊýÊÇÔÚÒ»¸öÏÖÓоµÏñ»ù´¡ÉÏ´´½¨Ð¾µÏñ£¬ÒòΪ¼¸ºõÄãÐèÒªµÄÈκζ«Î÷¶¼ÓÐÁ˹«¹²¾µÏñ£¬°üÀ¨ËùÓÐÖ÷Á÷Linux·¢Ðа棬ÄãÓ¦¸Ã²»»áÕÒ²»µ½ÄãÐèÒªµÄ¾µÏñ¡£²»¹ý£¬¾ÍËãÄãÏë´ÓÍ·¹¹½¨Ò»¸ö¾µÏñ£¬Ò²Óкü¸ÖÖ·½·¨¡£

Òª´´½¨Ò»¸ö¾µÏñ£¬Äã¿ÉÒÔÄÃÒ»¸ö¾µÏñ£¬¶ÔËü½øÐÐÐÞ¸ÄÀ´´´½¨ËüµÄ×Ó¾µÏñ¡£ÊµÏֵķ½Ê½ÓÐÁ½ÖÖ£ºÔÚÒ»¸öÎļþÖÐÖ¸¶¨Ò»¸ö»ù´¡¾µÏñ¼°ÐèÒªÍê³ÉµÄÐ޸ģ»»òͨ¹ý¡°ÔËÐС±Ò»¸ö¾µÏñ£¬¶ÔÆä½øÐÐÐ޸IJ¢Ìá½»¡£²»Í¬·½Ê½¸÷ÓÐÓŵ㣬²»¹ýÒ»°ã»áʹÓÃÎļþÀ´Ö¸¶¨Ëù×öµÄ±ä»¯¡£

¾µÏñÓµÓÐΨһID£¬ÒÔ¼°Ò»¸ö¹©ÈËÔĶÁµÄÃû×ֺͱêÇ©¶Ô¡£¾µÏñ¿ÉÒÔÃüÃûΪÀàËÆubuntu:latest¡¢ubuntu:precise¡¢django:1.6¡¢django:1.7µÈµÈ¡£

ÈÝÆ÷

ÏÖÔÚ˵ÈÝÆ÷ÁË¡£Äã¿ÉÒÔ´Ó¾µÏñÖд´½¨ÈÝÆ÷£¬ÕâµÈͬÓÚ´Ó¿ìÕÕÖд´½¨ÐéÄâ»ú£¬²»¹ý¸üÇáÁ¿¡£Ó¦ÓÃÊÇÓÉÈÝÆ÷ÔËÐеġ£

¾Ù¸öÀý×Ó£¬Äã¿ÉÒÔÏÂÔØÒ»¸öUbuntuµÄ¾µÏñ£¨Óиö½Ðdocker registryµÄ¾µÏñ¹«¹²²Ö¿â£©£¬Í¨¹ý°²×°GunicornºÍÄãµÄDjangoÓ¦Óü°ÆäÒÀÀµÍê³É¶ÔËüµÄÐ޸ģ¬È»ºó´Ó¸Ã¾µÏñÖд´½¨Ò»¸öÈÝÆ÷£¬ÔÚËüÆô¶¯ºóÔËÐÐÄãµÄÓ¦Óá£

ÈÝÆ÷ÓëÐéÄâ»úÒ»Ñù£¬ÊǸôÀëµÄ£¨ÓÐÒ»µãҪעÒ⣬ÎÒÉÔºó»áÌÖÂÛµ½£©¡£ËüÃÇÒ²ÓµÓÐÒ»¸öΨһIDºÍΨһµÄ¹©ÈËÔĶÁµÄÃû×Ö¡£ÈÝÆ÷ÓбØÒª¶ÔÍⱩ¶·þÎñ£¬Òò´ËDockerÔÊÐí±©Â¶ÈÝÆ÷µÄÌØ¶¨¶Ë¿Ú¡£

ÈÝÆ÷ÓëÐéÄâ»úÏà±ÈÓÐÁ½¸öÖ÷Òª²îÒì¡£µÚÒ»¸öÊÇ£ºËüÃDZ»Éè¼Æ³ÉÔËÐе¥½ø³Ì£¬ÎÞ·¨ºÜºÃµØÄ£ÄâÒ»¸öÍêÕûµÄ»·¾³£¨Èç¹ûÄÇÊÇÄãÐèÒªµÄ£¬Çë¿´¿´LXC£©¡£Äã¿ÉÄ᳢ܻÊÔÔËÐÐrunit»òsupervisordʵÀýÀ´Æô¶¯¶à¸ö½ø³Ì£¬µ«£¨ÒÔÎÒµÄÓÞ¼û£©ÕâÕæµÄûÓбØÒª¡£

µ¥½ø³ÌÓë¶à½ø³ÌÖ®Õù·Ç³£¾«²Ê¡£ÄãÓ¦¸ÃÖªµÀµÄÊÇ£¬DockerÉè¼ÆÕß¼«Á¦ÍƳ硰һ¸öÈÝÆ÷Ò»¸ö½ø³ÌµÄ·½Ê½¡±£¬Èç¹ûÄãҪѡÔñÔÚÒ»¸öÈÝÆ÷ÖÐÔËÐжà¸ö½ø³Ì£¬ÄÇΨһÇé¿öÊÇ£º³öÓÚµ÷ÊÔÄ¿µÄ£¬ÔËÐÐÀàËÆsshµÄ¶«Î÷À´·ÃÎÊÔËÐÐÖеÄÈÝÆ÷£¬²»¹ýdocker execÃüÁî½â¾öÁËÕâ¸öÎÊÌâ¡£

ÈÝÆ÷ºÍÐéÄâ»úµÄµÚ¶þ¸ö¾Þ´ó²îÒìÊÇ£ºµ±ÄãÍ£Ö¹Ò»¸öÐéÄâ»úʱ£¬¿ÉÄܳýÁËһЩÁÙʱÎļþ£¬Ã»ÓÐÎļþ»á±»É¾³ý£»µ±ÄãÍ£Ö¹Ò»¸öDockerÈÝÆ÷£¬¶Ô³õʼ״̬£¨´´½¨ÈÝÆ÷ËùÓõľµÏñµÄ״̬£©×öµÄËùÓб仯¶¼»á¶ªÊ§¡£ÕâÊÇʹÓÃDockerʱ±ØÐë×ö³öµÄ×î´ó˼ά±ä»¯Ö®Ò»£ºÈÝÆ÷ÊǶÌÔݺÍÒ»´ÎÐԵġ£

Êý¾Ý¾í

Èç¹ûÄãµÄµç×ÓÉÌÎñÍøÕ¾¸ÕÊÕµ½¿Í»§Ö§¸¶µÄ3ÍòÔª£¬Äں˱ÀÀ£ÁË£¬ËùÓÐÊý¾Ý¿â±ä»¯¶¼¶ªÊ§ÁË¡­¡­¶ÔÄã»òDockerÀ´Ëµ¶¼²»ÊÇÒ»¼þºÃÊ£¬²»¹ý²»Òªµ£ÐÄ¡£DockerÔÊÐíÄ㶨ÒåÊý¾Ý¾í¡ª¡ªÓÃÓÚ±£´æ³Ö¾ÃÊý¾ÝµÄ¿Õ¼ä¡£DockerÇ¿ÖÆÄ㶨ÒåÓ¦Óò¿·ÖºÍÊý¾Ý²¿·Ö£¬²¢ÒªÇóÄ㽫ËüÃÇ·Ö¿ª¡£

¾íÊÇÕë¶ÔÈÝÆ÷µÄ£¬Äã¿ÉÒÔʹÓÃͬһ¸ö¾µÏñ´´½¨¶à¸öÈÝÆ÷²¢¶¨Ò岻ͬµÄ¾í¡£¾í±£´æÔÚÔËÐÐDockerµÄËÞÖ÷ÎļþϵͳÉÏ£¬Äã¿ÉÒÔÖ¸¶¨¾í´æ·ÅµÄĿ¼£¬»òÈÃDocker±£´æÔÚĬÈÏλÖᣱ£´æÔÚÆäËûÀàÐÍÎļþϵͳÉϵͼ²»ÊÇÒ»¸ö¾í£¬ÉÔºóÔÙ¾ßÌå˵¡£

Á´½Ó

Á´½ÓÊÇDockerµÄÁíÒ»¸öÖØÒª²¿·Ö¡£

ÈÝÆ÷Æô¶¯Ê±£¬½«±»·ÖÅäÒ»¸öËæ»úµÄ˽ÓÐIP£¬ÆäËüÈÝÆ÷¿ÉÒÔʹÓÃÕâ¸öIPµØÖ·ÓëÆä½øÐÐͨѶ¡£Õâµã·Ç³£ÖØÒª£¬Ô­ÒòÓжþ£ºÒ»ÊÇËüÌṩÁËÈÝÆ÷¼äÏ໥ͨÐŵÄÇþµÀ£¬¶þÊÇÈÝÆ÷½«¹²ÏíÒ»¸ö±¾µØÍøÂç¡£ÎÒÔø¾­Åöµ½Ò»¸öÎÊÌ⣬ÔÚͬһ̨»úÆ÷ÉÏΪÁ½¸ö¿Í»§Æô¶¯Á½¸öelasticsearchÈÝÆ÷£¬µ«±£Áô¼¯ÈºÃû³ÆÎªÄ¬ÈÏÉèÖ㬽á¹ûÕâÁ½Ì¨elasticsearch·þÎñÆ÷Á¢Âí±ä³ÉÁËÒ»¸ö×ÔÖ÷¼¯Èº¡£

Òª¿ªÆôÈÝÆ÷¼äͨѶ£¬DockerÔÊÐíÄãÔÚ´´½¨Ò»¸öÐÂÈÝÆ÷ʱÒýÓÃÆäËüÏÖ´æÈÝÆ÷£¬ÔÚÄã¸Õ´´½¨µÄÈÝÆ÷Àï±»ÒýÓõÄÈÝÆ÷½«»ñµÃÒ»¸ö£¨ÄãÖ¸¶¨µÄ£©±ðÃû¡£ÎÒÃǾÍ˵£¬ÕâÁ½¸öÈÝÆ÷Á´½ÓÔÚÁËÒ»Æð¡£

Òò´Ë£¬Èç¹ûDBÈÝÆ÷ÒѾ­ÔÚÔËÐУ¬ÎÒ¿ÉÒÔ´´½¨web·þÎñÆ÷ÈÝÆ÷£¬²¢ÔÚ´´½¨Ê±ÒýÓÃÕâ¸öDBÈÝÆ÷£¬¸øËüÒ»¸ö±ðÃû£¬±ÈÈçdbapp¡£ÔÚÕâ¸öн¨µÄweb·þÎñÆ÷ÈÝÆ÷ÀÎÒ¿ÉÒÔÔÚÈκÎʱºòʹÓÃÖ÷»úÃûdbappÓëDBÈÝÆ÷½øÐÐͨѶ¡£

Docker¸ü½øÒ»²½£¬ÒªÇóÄãÉùÃ÷ÈÝÆ÷ÔÚ±»Á´½ÓʱҪ¿ª·ÅÄÄЩ¶Ë¿Ú¸øÆäËûÈÝÆ÷£¬·ñÔò½«Ã»Óж˿ڿÉÓá£

Docker¾µÏñµÄ¿ÉÒÆÖ²ÐÔ

ÔÚ´´½¨¾µÏñʱÓÐÒ»µãҪעÒâ¡£DockerÔÊÐíÄãÔÚÒ»¸ö¾µÏñÖÐÖ¸¶¨¾íºÍ¶Ë¿Ú¡£´ÓÕâ¸ö¾µÏñ´´½¨µÄÈÝÆ÷¼Ì³ÐÁËÕâЩÉèÖᣵ«ÊÇ£¬Docker²»ÔÊÐíÄãÔÚ¾µÏñÉÏÖ¸¶¨Èκβ»¿ÉÒÆÖ²µÄÄÚÈÝ¡£

ÀýÈ磬Äã¿ÉÒÔÔÚ¾µÏñÀﶨÒå¾í£¬Ö»ÒªËüÃDZ»±£´æÔÚDockerʹÓõÄĬÈÏλÖá£ÕâÊÇÒòΪÈç¹ûÄãÔÚËÞÖ÷ÎļþϵͳÀïÖ¸¶¨ÁËÒ»¸öÌØ¶¨Ä¿Â¼À´±£´æ¾í£¬ÆäËûʹÓÃÕâ¸ö¾µÏñµÄËÞÖ÷ÎÞ·¨±£Ö¤Õâ¸öĿ¼ÊÇ´æÔڵġ£

Äã¿ÉÒÔ¶¨ÒåÒª±©Â¶µÄ¶Ë¿Ú£¬µ«½öÏÞÄÇЩÔÚ´´½¨Á´½Óʱ±©Â¶¸øÆäËûÈÝÆ÷µÄ¶Ë¿Ú£¬Äã²»ÄÜÖ¸¶¨±©Â¶¸øËÞÖ÷µÄ¶Ë¿Ú£¬ÒòΪÄãÎÞ´ÓÖªÏþʹÓÃÄǸö¾µÏñµÄËÞÖ÷ÓÐÄÄЩ¶Ë¿Ú¿ÉÓá£

ÄãÒ²²»ÄÜÔÚ¾µÏñÉ϶¨ÒåÁ´½Ó¡£Ê¹ÓÃÁ´½ÓÒªÇóͨ¹ýÃû×ÖÒýÓÃÆäËûÈÝÆ÷£¬µ«ÄãÎÞ·¨Ô¤ÖªÃ¿¸öʹÓÃÄǸö¾µÏñµÄËÞÖ÷ÈçºÎÃüÃûÈÝÆ÷¡£

¾µÏñ±ØÐëÍêÈ«¿ÉÒÆÖ²£¬Docker²»ÔÊÐíÀýÍâ¡£

ÒÔÉϾÍÊÇÖ÷ÒªµÄ²¿·Ö£¬´´½¨¾µÏñ¡¢ÓÃËüÃÇ´´½¨ÈÝÆ÷£¬ÔÚÐèҪʱ±©Â¶¶Ë¿ÚºÍ´´Ôì¾í¡¢Í¨¹ýÁ´½Ó½«¼¸¸öÈÝÆ÷Á¬½ÓÔÚÒ»Æð¡£²»¹ý£¬ÕâÒ»ÇÐÈçºÎÄÜÔÚ²»ÒýÆð¶îÍ⿪ÏúÌõ¼þÏ´ï³É£¿

DockerÈçºÎÍê³ÉËüÐèÒªÍê³ÉµÄ¶«Î÷£¿

Á½¸ö´Ê£ºcgroupsºÍunionÎļþϵͳ¡£DockerʹÓÃcgroupÀ´ÌṩÈÝÆ÷¸ôÀ룬¶øunionÎļþϵͳÓÃÓÚ±£´æ¾µÏñ²¢Ê¹ÈÝÆ÷±äµÃ¶ÌÔÝ¡£

Cgroups

ÕâÊÇLinuxÄں˹¦ÄÜ£¬ËüÈÃÁ½¼þÊÂÇé±ä³É¿ÉÄÜ£º

1.ÏÞÖÆLinux½ø³Ì×éµÄ×ÊÔ´Õ¼Óã¨ÄÚ´æ¡¢CPU£©

2.Ϊ½ø³Ì×éÖÆ×÷ PID¡¢UTS¡¢IPC¡¢ÍøÂç¡¢Óû§¼°×°ÔØÃüÃû¿Õ¼ä

ÕâÀïµÄ¹Ø¼ü´ÊÊÇÃüÃû¿Õ¼ä¡£±ÈÈç˵£¬Ò»¸öPIDÃüÃû¿Õ¼äÔÊÐíËüÀïÃæµÄ½ø³ÌʹÓøôÀëµÄPID£¬²¢ÓëÖ÷PIDÃüÃû¿Õ¼ä¶ÀÁ¢¿ªÀ´£¬Òò´ËÄã¿ÉÒÔÔÚÒ»¸öPIDÃüÃû¿Õ¼äÀïÓµÓÐ×Ô¼ºµÄPIDΪ1µÄ³õʼ»¯½ø³Ì¡£ÆäËûÃüÃû¿Õ¼äÓë´ËÀàËÆ¡£È»ºóÄã¿ÉÒÔʹÓÃcgroup´´½¨Ò»¸ö»·¾³£¬½ø³Ì¿ÉÒÔÔÚÆäÖÐÔËÐУ¬²¢Óë²Ù×÷ϵͳµÄÆäËû½ø³Ì¸ôÀ뿪£¬µ«ÕâÀïµÄ¹Ø¼üµãÊÇÕâ¸ö»·¾³ÉϵĽø³ÌʹÓõÄÊÇÒѾ­¼ÓÔØºÍÔËÐеÄÄںˣ¬Òò´Ë¶îÍ⿪ÏúÓëÔËÐÐÆäËû½ø³Ì¼¸ºõÊÇÒ»ÑùµÄ¡£ChrootÖ®ÓÚcgroup¾ÍºÃÏñÎÒÖ®ÓÚÂ̾ÞÈË£¨The Hulk£©¡¢±´¶÷£¨Bane£©ºÍ¶¾Òº£¨Venom£©µÄ×éºÏ£¨ÒëÕß×¢£º±¾ÎÄ×÷Õ߷dz£ÊÝÈõ£¬ºóÈýÕß¶¼·Ç³£Ç¿×³£©¡£

UnionÎļþϵͳ

UnionÎļþϵͳÔÊÐíͨ¹ýunion×°ÔØ±ä»¯µÄ·Ö²ãµþ¼Ó¡£ÔÚunionÎļþϵͳÀÎļþϵͳ¿ÉÒÔ±»×°ÔØÔÚÆäËûÎļþϵͳ֮ÉÏ£¬Æä½á¹û¾ÍÊÇÒ»¸ö±ä»¯µÄ·Ö²ã¼¯ºÏ¡£Ã¿¸ö×°ÔØµÄÎļþϵͳ±íʾǰһ¸öÎļþϵͳ֮ºóµÄ±ä»¯¼¯ºÏ£¬¾ÍÏñÊÇÒ»¸ödiff¡£

µ±ÄãÏÂÔØÒ»¸ö¾µÏñ£¬ÐÞ¸ÄËü£¬È»ºó±£´æ³Éа汾£¬ÄãÖ»ÊÇ´´½¨Á˼ÓÔØÔÚ°ü¹ü»ù´¡¾µÏñµÄ³õʼ²ãÉϵÄÒ»¸öеÄunionÎļþϵͳ¡£ÕâʹµÃDocker¾µÏñ·Ç³£Çᣬ±ÈÈ磺ÄãµÄDB¡¢NginxºÍSyslog¾µÏñ¶¼¿ÉÒÔ¹²Ïíͬһ¸öUbuntu»ù´¡£¬Ã¿Ò»¸ö¾µÏñ±£´æµÄÖ»ÊÇÔÚ»ù´¡Ö®ÉϹ¤×÷ÐèÒªµÄ±ä»¯¡£

½ØÖÁ2015Äê1ÔÂ4ÈÕ£¬DockerÔÊÐíÔÚunionÎļþϵͳÖÐʹÓÃaufs¡¢btrfs»òÉ豸ӳÉ䣨device mapper£©¡£

¾µÏñ

ÎÒÃÇÀ´¿´Ò»ÏÂpostgresqlµÄÒ»¸ö¾µÏñ£º

[{ 
"AppArmorProfile": "",
"Args": [
"postgres"
],
"Config": {
"AttachStderr": true,
"AttachStdin": false,
"AttachStdout": true,
"Cmd": [
"postgres"
],
"CpuShares": 0,
"Cpuset": "",
"Domainname": "",
"Entrypoint": [
"/docker-entrypoint.sh"
],
"Env": [
"PATH=/usr/lib/postgresql/9.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=en_US.utf8",
"PG_MAJOR=9.3",
"PG_VERSION=9.3.5-1.pgdg70 1",
"PGDATA=/var/lib/postgresql/data"
],
"ExposedPorts": {
"5432/tcp": {}
},
"Hostname": "6334a2022f21",
"Image": "postgres",
"MacAddress": "",
"Memory": 0,
"MemorySwap": 0,
"NetworkDisabled": false,
"OnBuild": null,
"OpenStdin": false,
"PortSpecs": null,
"StdinOnce": false,
"Tty": false,
"User": "",
"Volumes": {
"/var/lib/postgresql/data": {}
},
"WorkingDir": ""
},
"Created": "2015-01-03T23:56:12.354896658Z",
"Driver": "devicemapper",
"ExecDriver": "native-0.2",
"HostConfig": {
"Binds": null,
"CapAdd": null,
"CapDrop": null,
"ContainerIDFile": "",
"Devices": null,
"Dns": null,
"DnsSearch": null,
"ExtraHosts": null,
"IpcMode": "",
"Links": null,
"LxcConf": null,
"NetworkMode": "",
"PortBindings": null,
"Privileged": false,
"PublishAllPorts": false,
"RestartPolicy": {
"MaximumRetryCount": 0,
"Name": ""
},
"SecurityOpt": null,
"VolumesFrom": [
"bestwebappever.dev.db-data"
]
},
"HostnamePath": "/mnt/docker/containers/ 6334a2022f213f9534b45df33c64437081a38d50c7f462692b019185b8cbc6da/hostname",
"HostsPath": "/mnt/docker/containers/ 6334a2022f213f9534b45df33c64437081a38d50c7f462692b019185b8cbc6da/hosts",
"Id": "6334a2022f213f9534b45df33c64437081a38d50c7f462692b019185b8cbc6da",
"Image": "aaab661c1e3e8da2d9fc6872986cbd7b9ec835dcd3886d37722f1133baa3d2db",
"MountLabel": "",
"Name": "/bestwebappever.dev.db",
"NetworkSettings": {
"Bridge": "docker0",
"Gateway": "172.17.42.1",
"IPAddress": "172.17.0.176",
"IPPrefixLen": 16,
"MacAddress": "02:42:ac:11:00:b0",
"PortMapping": null,
"Ports": {
"5432/tcp": null
}
},
"Path": "/docker-entrypoint.sh",
"ProcessLabel": "",
"ResolvConfPath": " /mnt/docker/containers/6334a2022f213f9534b45df33c64437081a38d50c7f462692b019185b8cbc6da/resolv.conf",
"State": {
"Error": "",
"ExitCode": 0,
"FinishedAt": "0001-01-01T00:00:00Z",
"OOMKilled": false,
"Paused": false,
"Pid": 21654,
"Restarting": false,
"Running": true,
"StartedAt": "2015-01-03T23:56:42.003405983Z"
},
"Volumes": {
"/var/lib/postgresql/data": "/mnt/docker/vfs/dir/5ac73c52ca86600a82e61279346dac0cb3e173b067ba9b219ea044023ca67561",
"postgresql_data": "/mnt/docker/vfs/dir/abace588b890e9f4adb604f633c280b9b5bed7d20285aac9cc81a84a2f556034"
},
"VolumesRW": {
"/var/lib/postgresql/data": true,
"postgresql_data": true
}
}

¾ÍÊÇÕâÑù£¬¾µÏñÖ»ÊÇÒ»¸öjson£¬ËüÖ¸¶¨Á˴ӸþµÏñÔËÐеÄÈÝÆ÷µÄÌØÐÔ£¬union×°ÔØµã±£´æÔÚÄÄÀҪ±©Â¶Ê²Ã´¶Ë¿ÚµÈµÈ¡£Ã¿¸ö¾µÏñÓëÒ»¸öunionÎļþϵͳÏà¹ØÁª£¬Ã¿¸öDockerÉϵÄunionÎļþϵͳ¶¼ÓÐÒ»¸öÉϲ㣬¾ÍÏñÊǼÆËã»ú¿Æ¼¼Ê÷£¨²»ÏñÆäËûÊ÷ÓÐÒ»´ó¶ÑµÄ¼Ò×壩¡£Èç¹ûËü¿´ÆðÀ´ÓеãÏÅÈË»òÓÐЩ¶«Î÷´®²»ÆðÀ´£¬²»Òªµ£ÐÄ£¬ÕâÖ»ÊdzöÓÚ½ÌѧĿµÄ£¬Äã²¢²»»áÖ±½Ó´¦ÀíÕâЩÎļþ¡£

ÈÝÆ÷

ÈÝÆ÷Ö®ËùÒÔÊǶÌÔݵģ¬ÊÇÒòΪµ±Äã´Ó¾µÏñÉÏ´´½¨Ò»¸öÈÝÆ÷£¬Docker»á´´½¨Ò»¸ö¿Õ°×µÄunionÎļþϵͳ¼ÓÔØÔÚÓë¸Ã¾µÏñ¹ØÁªµÄunionÎļþϵͳ֮ÉÏ¡£

ÓÉÓÚunionÎļþϵͳÊǿհ׵ģ¬ÕâÒâζ×ÅûÓб仯»á±»Ó¦Óõ½¾µÏñµÄÎļþϵͳÉÏ£¬Äã´´½¨µÄ±ä»¯»áµÃµ½ÌåÏÖ£¬µ«Êǵ±ÈÝÆ÷Í£Ö¹£¬¸ÃÈÝÆ÷µÄunionÎļþϵͳ»á±»¶ªÆú£¬ÁôϵÄÊÇÄãÆô¶¯Ê±µÄԭʼ¾µÏñÎļþϵͳ¡£³ý·ÇÄã´´½¨Ò»¸öеľµÏñ£¬»òÖÆ×÷Ò»¸ö¾í£¬ÄãËù×öµÄ±ä»¯ÔÚÈÝÆ÷ֹͣʱ¶¼»áÏûʧ¡£

¾íËù×öµÄÊÇÔÚÈÝÆ÷ÄÚÖ¸¶¨Ò»¸öĿ¼£¬ÒÔ±ãÔÚunionÎļþϵͳ֮Íâ±£´æËü¡£

ÕâÊÇÒ»¸öbestwebappeverµÄÈÝÆ÷£º

[{ 
"AppArmorProfile": "",
"Args": [],
"Config": {
"AttachStderr": true,
"AttachStdin": false,
"AttachStdout": true,
"Cmd": [
"/sbin/my_init"
],
"CpuShares": 0,
"Cpuset": "",
"Domainname": "",
"Entrypoint": null,
"Env": [
"DJANGO_CONFIGURATION=Local",
"HOME=/root",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"TALPOR_ENVIRONMENT=local",
"TALPOR_DIR=/opt/bestwebappever"
],
"ExposedPorts": {
"80/tcp": {}
},
"Hostname": "44a87fdaf870",
"Image": "talpor/bestwebappever:dev",
"MacAddress": "",
"Memory": 0,
"MemorySwap": 0,
"NetworkDisabled": false,
"OnBuild": null,
"OpenStdin": false,
"PortSpecs": null,
"StdinOnce": false,
"Tty": false,
"User": "",
"Volumes": {
"/opt/bestwebappever": {}
},
"WorkingDir": "/opt/bestwebappever"
},
"Created": "2015-01-03T23:56:15.378511619Z",
"Driver": "devicemapper",
"ExecDriver": "native-0.2",
"HostConfig": {
"Binds": [
"/home/german/bestwebappever/:/opt/bestwebappever:rw"
],
"CapAdd": null,
"CapDrop": null,
"ContainerIDFile": "",
"Devices": null,
"Dns": null,
"DnsSearch": null,
"ExtraHosts": null,
"IpcMode": "",
"Links": [
"/bestwebappever.dev.db:/bestwebappever.dev.app/db",
"/bestwebappever.dev.redis:/bestwebappever.dev.app/redis"
],
"LxcConf": null,
"NetworkMode": "",
"PortBindings": {
"80/tcp": [
{
"HostIp": "",
"HostPort": "8887"
}
]
},
"Privileged": false,
"PublishAllPorts": false,
"RestartPolicy": {
"MaximumRetryCount": 0,
"Name": ""
},
"SecurityOpt": null,
"VolumesFrom": [
"bestwebappever.dev.requirements-data"
]
},
"HostnamePath": "/mnt/docker/containers/ 44a87fdaf870281e86160e9e844b8987cfefd771448887675fed99460de491c4/hostname",
"HostsPath": "/mnt/docker/containers/ 44a87fdaf870281e86160e9e844b8987cfefd771448887675fed99460de491c4/hosts",
"Id": "44a87fdaf870281e86160e9e844b8987cfefd771448887675fed99460de491c4",
"Image": "b84804fac17b61fe8f344359285186f1a63cd8c0017930897a078cd09d61bb60",
"MountLabel": "",
"Name": "/bestwebappever.dev.app",
"NetworkSettings": {
"Bridge": "docker0",
"Gateway": "172.17.42.1",
"IPAddress": "172.17.0.179",
"IPPrefixLen": 16,
"MacAddress": "02:42:ac:11:00:b3",
"PortMapping": null,
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8887"
}
]
}
},
"Path": "/sbin/my_init",
"ProcessLabel": "",
"ResolvConfPath": " /mnt/docker/containers/44a87fdaf870281e86160e9e844b8987cfefd771448887675fed99460de491c4/resolv.conf",
"State": {
"Error": "",
"ExitCode": 0,
"FinishedAt": "0001-01-01T00:00:00Z",
"OOMKilled": false,
"Paused": false,
"Pid": 21796,
"Restarting": false,
"Running": true,
"StartedAt": "2015-01-03T23:56:47.537259546Z"
},
"Volumes": {
"/opt/bestwebappever": "/home/german/bestwebappever",
"requirements_data": " /mnt/docker/vfs/dir/bc14bec26ca311d5ed9f2a83eebef872a879c9e2f1d932470e0fd853fe8be336"
},
"VolumesRW": {
"/opt/bestwebappever": true,
"requirements_data": true
}
}
]

»ù±¾ÉÏÓë¾µÏñÏàͬ£¬²»¹ýÏÖÔÚ»¹Ö¸¶¨ÁËһЩ±©Â¶¸øËÞÖ÷µÄ¶Ë¿Ú£¬Ò²ÉùÃ÷Á˾íλÓÚËÞÖ÷µÄλÖã¬ÈÝÆ÷״̬ÊÇ´ÓÏÖÔÚÖ±µ½½áÊø£¬µÈµÈ¡£ÓëÇ°ÃæÒ»Ñù£¬Èç¹ûËü¿´ÆðÀ´ÈÃÈËÉú磬²»Òªµ£ÐÄ£¬Äã²»»áÖ±½Ó´¦ÀíÕâЩjson¡£

³¬¼¶¡¢Îޱȼòµ¥µÄ²½Öè˵Ã÷

µÚÒ»²½£¬°²×°Docker¡£

DockerÃüÁ¾ßÐèÒªrootȨÏÞ²ÅÄܹ¤×÷¡£Äã¿ÉÒÔ½«ÄãµÄÓû§·ÅÈëdocker×éÀ´±ÜÃâÿ´Î¶¼ÒªÊ¹ÓÃsudo¡£

µÚ¶þ²½£¬Ê¹ÓÃÒÔÏÂÃüÁî´Ó¹«¹²registryÏÂÔØÒ»¸ö¾µÏñ£º

$> docker pull ubuntu:latest 
ubuntu:latest: The image you are pulling has been verified
3b363fd9d7da: Pull complete
.....<bunch of downloading-stuff output>.....
8eaa4ff06b53: Pull complete
Status: Downloaded newer image for ubuntu:latest
$>

Õâ¸ö¹«¹²registryÉÏÓÐÄãÐèÒªµÄ¼¸ºõËùÓж«Î÷µÄ¾µÏñ£ºUbuntu¡¢Fedora¡¢Postgresql¡¢MySQL¡¢Jenkins¡¢Elasticsearch¡¢RedisµÈµÈ¡£Docker¿ª·¢ÈËÔ±ÔÚÕâ¸ö¹«¹²registryÀïά»¤×ÅÊý¸ö¾µÏñ£¬²»¹ýÄãÄÜ´ÓÉÏÃæÀ­È¡´óÁ¿À´×ÔÓû§·¢²¼µÄ×Ô½¨¾µÏñ¡£

Ò²ÐíÄãÐèÒª»òÏëÒªÒ»¸ö˽ÓеÄregistry£¨ÓÃÓÚ¿ª·¢Ó¦ÓÃÖ®ÀàµÄÈÝÆ÷£©£¬Äã¿ÉÒÔÏÈ¿´¿´Õâ¸ö¡£ÏÖÔÚ£¬Óкü¸¸ö·½Ê½¿ÉÒÔÉèÖÃÄã×Ô¼ºµÄ˽ÓÐregistry¡£ÄãÒ²¿ÉÒÔÂòÒ»¸ö¡£

µÚÈý²½£¬ÁгöÄãµÄ¾µÏñ£º

$> docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu latest 8eaa4ff06b53 4 days ago 192.7 MB

µÚËIJ½£¬´Ó¸Ã¾µÏñÉÏ´´½¨Ò»¸öÈÝÆ÷¡£

$> docker run --rm -ti ubuntu /bin/bash 
root@4638a40c2fbb:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root......
root@4638a40c2fbb:/# exit

ÉÏÒ»ÌõÃüÁîµÄ¼òҪ˵Ã÷£º

--rm£º¸æËßDockerÒ»µ©ÔËÐеĽø³ÌÍ˳ö¾Íɾ³ýÈÝÆ÷¡£ÕâÔÚ½øÐвâÊÔʱ·Ç³£ÓÐÓ㬿ÉÃâ³ýÔÓÂÒ

-ti£º¸æËßDocker·ÖÅäÒ»¸öαÖն˲¢½øÈë½»»¥Ä£Ê½¡£Õ⽫½øÈëµ½ÈÝÆ÷ÄÚ£¬¶ÔÓÚ¿ìËÙÔ­ÐÍ¿ª·¢»ò³¢ÊÔºÜÓÐÓ㬵«²»ÒªÔÚÉú²úÈÝÆ÷Öдò¿ªÕâЩ±êÖ¾

ubuntu£ºÕâÊÇÈÝÆ÷Á¢×ãµÄ¾µÏñ

/bin/bash£ºÒªÔËÐеÄÃüÁÒòΪÎÒÃÇÒÔ½»»¥Ä£Ê½Æô¶¯£¬Ëü½«ÏÔʾһ¸öÈÝÆ÷µÄÌáʾ·û

ÔÚÔËÐÐrunÃüÁîʱ£¬Äã¿ÉÖ¸¶¨Á´½Ó¡¢¾í¡¢¶Ë¿Ú¡¢´°¿ÚÃû³Æ£¨Èç¹ûÄãûÌṩ£¬Docker½«·ÖÅäÒ»¸öĬÈÏÃû³Æ£©µÈµÈ¡£

ÏÖÔÚ£¬ÎÒÃÇÔÚºǫ́ÔËÐÐÒ»¸öÈÝÆ÷£º

$> docker run -d ubuntu ping 8.8.8.8 
31c68e9c09a0d632caae40debe13da3d6e612364198e2ef21f842762df4f987f
$>

Êä³öµÄÊÇ·ÖÅäµÄID£¬ÒòΪÊÇËæ»úµÄ£¬ÄãµÄ½«ÓÐËù²»Í¬¡£ÎÒÃÇÀ´¼ì²éÒ»ÏÂÈÝÆ÷ÊÇ·ñÆðÀ´ÁË£º

$> docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31c68e9c09a0 ubuntu:latest "ping 8.8.8.8" 2 minutes ago Up 2 minutes loving_mcclintock

¾ÍÔÚÄÇ£¬Ëü±»×Ô¶¯·ÖÅäÁËÒ»¸ö½Ðloving_mcclintockµÄÃû³Æ¡£ÎÒÃÇ¿´¿´ÈÝÆ÷ÀïÕýÔÚ·¢Éúʲô£º

$> docker exec -ti loving_mcclintock /bin/bash 
root@31c68e9c09a0:/# ps -aux|grep ping
root 1 0.0 0.0 6504 636 ? Ss 20:46 0:00 ping 8.8.8.8
root@31c68e9c09a0:/# exit

ÎÒÃÇËù×öµÄÊÇÔÚÈÝÆ÷ÀïÔËÐгÌÐò£¬ÕâÀïµÄ³ÌÐòÊÇ/bin/bash¡£-ti±êÖ¾Óëdocker runµÄ×÷ÓÃÏàͬ£¬½«ÎÒÃÇ·ÅÖõ½ÈÝÆ÷µÄ¿ØÖÆÌ¨Àï¡£

½áβ

²î²»¶à¾ÍÊÇÕâÑùÁË¡£ÓÐÌ«¶àµÄ¶«Î÷¿ÉÒÔ½²£¬µ«Ädz¬³öÁ˱¾Îĵķ¶Î§¡£

DockerµÄ»ù±¾½á¹¹£º

https://docs.docker.com/introd ... cker/ 
http://blog.docker.com/2014/03 ... iner/

ÓëDockerÏà¹ØµÄÏîÄ¿£º

1.Phusion Docker baseimage

2.Shipyard

3.DockerUI

4.CoreOS

5.Decking

6.Docker-py

7.Docker-map

8.Docker-fabric

   
2586 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

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

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
Èí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Åàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ