ºìÁªLinuxÃÅ»§
Linux°ïÖú

ÐéÄâ»úÒÑËÀ£¬ÈÝÆ÷²ÅÊÇδÀ´£¿

·¢²¼Ê±¼ä:2016-05-04 14:43:56À´Ô´:ºìÁª×÷Õß:teisac
À´Ô´£º¹Ô¹ÔÖ®¼Ò

ÎÒÒ²Ôø¾­ÊÇÈÝÆ÷¼¼ÊõÓÈÆäÊÇ Docker ·ÛË¿£¬µ«ÓÃÁËÒ»Äêºó¾õµÃÊÂÇéҲûÄÇôÃÀºÃ£¬¶øÆÄÓÐһЩͬѧÒÔ¼°Ò»Ð©¹«Ë¾ÒÀÈ»ÈÏΪÈÝÆ÷¾ÍÊÇÒøµ¯£¬ÐéÄâ»úÒѾ­ÊÇ×ò¶ù»Æ»¨±ØÐë´òµ¹£¬´ó¼Ò¸Ï½ôÒ»ÇнÔÈÝÆ÷¡£ÕâÀïÎÒ¶ÔÕâÖÖ¹ÛµãÍÂͲۡ£½ö´ú±í×÷Õ߸öÈË¿´·¨

Ê×ÏÈÒªÃ÷È·µÄÊÇ£¬Èí¼þ¿ª·¢ºÍÔËά»î¶¯ÖУ¬¿Éά»¤ÐÔ¡¢ÕýÈ·ÐÔ¡¢ÐÔÄܵÄÓÅÏȼ¶ÊÇÒÀ´Î½µµÍµÄ£¬²»Òª¸úÎÒ̧¸ÜÉÙÊý¼«¶ËÇé¿ö¡£¹ØÓÚ¿Éά»¤ÐÔºÍÕýÈ·ÐÔµÄÏȺó£¬Öø ÃûµÄ "worse is better" ÎÄÕ¾ÍÊǺܺõÄÎÞÄεĽâÊÍ£¬Èç¹ûÄãÓÌÔ¥ÕâÁ½Õߣ¬Õ⻹ÇéÓпÉÔ­£¬±Ï¾¹ÕæÉÆÃÀºÍ²Ú¿ìÃ͵Ķ·Õù´ÓδͣЪ£¬¶øÄãÈç¹ûµÚÒ»·´Ó¦¾õµÃÐÔÄÜÊÇ×îÖØÒªµÄ£¬ÄǾͲ»Òª¼ÌÐøÍùÏ ¿´ÁË£¬Ï´Ï´È¥Ë¯°É----ÊʺϵIJÅÊÇ×îºÃµÄ¡£

ÄÇô¶ÔÓÚÐéÄâ»ú vs ÈÝÆ÷£¬×ÔÈ»ÎÒÃÇÒ²ÐèÒª´ÓÕâÈý·½Ã濼²ì¡£

»ØºÏÒ»£º¿Éά»¤ÐÔÖ®Õù

ÐéÄâ»ú--ά»¤ÐÔ

´Ó hypervisor ½²£¬Xen/KVM/vSphere/HyperV ¶¼ºÜ³ÉÊìÁË£¬¾Ã¾­¿¼Ñ飬BSD Ò²ÔÚ´ÕÈÈÄÖ¸ã bhyve(FreeBSD) ºÍ vmm(OpenBSD)£¬×î½ü unikernel Ò²ÔÚÊÔͼÅÜÔÚ hypervisor ÉÏ£¬¶ø AWS/GCE/Azure µÈµÈÔƼÆËã¾ÞÍ·ÒÔ¼° Intel/AMD µÈÔÚCPU¡¢´ÅÅ̺ÍÍøÂçIOÐéÄ⻯¼¼ÊõÉϵÄͶ×ÊÏÔÈ»²»»áÁ¢ÂíÍÆ·­£¬Linux ÉÏÐéÄâ»úµÄ¿ªÔ´¹ÜÀí·½°¸Ò²ÒѳÉÊ춨ÐÍ£ºlibvirt, OpenStack£¬ ûÈ˳Ա¥Á˳ŵÄȥŪ¸ö ¡°ÐµĿªÔ´¡± ÏîÄ¿Ìæ»»ËüÃÇ£¬ËäÈ»ÎҺܲ»Ï²»¶ OpenStack µÄÂÒÔãºÍ¸´ÔÓ¡£VM µÄ¶¯Ì¬Ç¨ÒÆÒ²ÊdzÉÊì¼¼Êõ£¬³öÀ´ºÃ¶àÄêÁË£¬ÊµÏÖÔ­Àí·Ç³£¼òµ¥£¬·´ÕýÕû¸ö OS ÄÚ´æÒ»¹ø¶ËŪ¹ýÈ¥£¬²»²ÙÐÄÉÙ¸öÒÀÀµ½ø³ÌµÄÄÚ´æû¹ýÈ¥¡£ÏëÓò»Í¬°æ±¾Äںˣ¿ ÏëÒª×Ô¶¨ÒåÄÚºËÄ£¿é£¿Ïëµ÷ÕûÄں˲ÎÊý£¿ÆÚÍû¸ü°²È«µÄ¸ôÀ룿ÆÚÍûÈçͬÎïÀí»ú°æ¼¸ºõÒ»ÖµÄʹÓÃÌåÑ飿VM ¾ÍÊÇÐéÄâ»úµÄËõдÂÕâЩ¶¼ÊÇÄÃÊÖÏ·¡£

ÈÝÆ÷-- ά»¤ÐÔ

Linux ÈÝÆ÷£¬Linux Ò»¹áµÄ×÷·ç£¬ÂýÂýÑÝ»¯£¬²»Çó×ÐϸÉè¼Æ£¬È»ºó¾ÍÊÇ cgroup, pid/uts/ipc/net/uid namespace Ò»¸ö¸öʵÏÖ³öÀ´£¬´Õ³öÒ»¸öÈÝÆ÷¼¼Êõ£¬Ã²ËÆ uid namespace »¹ÊÇ×î½ü¸Õ¸Õ³öÀ´µÄÌØÐÔ¡£Óû§¿Õ¼äÔò¸üÊÇȺÐÛ²¢Æð£¬LXC£¬Docker£¬rkt£¬LXD£¬¸÷ÓÐӵ忣¬Â¹ËÀË­ÊÖ£¬»¹Õæ²»ºÃ˵£¬ÔÚÕâ¸ö¾Ö»¹Ã»Ã÷ÀʵÄʱ ºò£¬Mesos¡¢Swarm¡¢Kubernetes¡¢Nomad ÓÖ³öÀ´Ò»¶Ñ½Á¾ÖµÄ£¬ÑÛÏ¿´À´×îÎüÒýÑÛÇòµÄ Kubernetes ٲȻÓÐ OpenStack ¼ÌÈÎÕߵĸоõ£¬µ«ÒÀÈ»ºÜÄÛ£¬Ã»¼¸¸öÈ˸ÒÔÚÉú²ú»·¾³´ó¹æģʹÓá£

LinuxÈÝÆ÷Àï½ø³ÌµÄ¿ç»úÆ÷¶¯Ì¬Ç¨ÒÆÎÒ»¹Ã»Ìý˵£¬²»ÒªËµÊǸö·þÎñ¾ÍµÃÓм¯ÈºÓÐ HA Â¿É»¹ÕæÓв»ÉÙÓû§Ò»¸ö·þÎñ¾Íµ¥»ú¶¥×ÅÄØ£¬¾ÍËãÓÐÈȱ¸»òÕßÀ䱸£¬ÔÚÏßÄÇ̨»úÆ÷ÄÚ´æÀïµÄ¶«Î÷¿É±¦¹óÁË£¬ÇáÒײ»Äܶª¡£ÓÃLinuxÈÝÆ÷¾Í²»ÄÜÌôÄںˣ¬²»ÄÜ¼Ó ÔØÄÚºËÄ£¿é£¬²»ÄܹÒÔØÎļþϵͳ£¬²»Äܵ÷ÕûÄں˲ÎÊý£¬²»ÄܸÄÍøÂçÅäÖ㬵ȵȣ¬²»Òª¸æËßÎÒÄãÄÜ----ÄãÊDz»ÊÇ¿ªÁË docker run --privileged ÁË£¿ ÄãÊDz»ÊÇû drop capability£¿ÄãÊDz»ÊÇûÓÐ remap uid£¿»°ËµÄ³´ó¹«Ë¾µÄÈÝÆ÷»¹Õæ¾ÍÓà --privileged Ñ¡ÏîÅܵÄÄØ¡£ ¶ø Linux µÄ¸ôÀë²»³¹µ×¿ÖÅ´󲿷ÖÈ˶¼Ã»Òâʶµ½£¬/sys, /dev, /selinux »¹ÓÐ /proc ϵÄijЩ¹Ø¼üÎļþ±ÈÈç /proc/kcore û¸ôÀëÄØ¡£

Redhat ×öµÄ project Atomic Òâʶµ½ÕâЩÎÊÌ⣬ÕýÔÚ»ý¼«µÄ¸ø Docker ¼Ó SELinux Ö§³Ö£¬Ö¸¶¨ SELinux policy£¬µ« Docker ¹Ù·½°®´î²»Àí£¬¶øÇÒ SELinux ÕâÖָ߶˼¼ÊõÊÇ·²ÈËÍæµÄô£¿ ½á¾Ö´ó¸ÅÒÀÈ»ÊÇ "FAQ 1: ¹Øµô SELinux"¡£Linux ÈÝÆ÷±¾À´²¢²»¾ÖÏÞÔÚÒ»¸öÈÝÆ÷ÀïÅܼ¸¸ö½ø³Ì£¬µ« Docker ¹Ù·½ÎªÁ˼ÓÇ¿¡°ÇáÁ¿¼¶¡±Õâ´ÊµÄÏ´ÄÔЧ¹û£¬¸ã³ö¸öÎÞ±ÈÄÔ²ÐµÄ single process ÀíÄ±»ÎÞÊýÈËÅõ³ô½Å£¬ËùÐÒÓÐЩÈËÂýÂýÒâʶµ½ÎÊÌ⣬Yelp ¸ãÁ˸ö dumb-init ²ÁÁËÒ»°ëƨ¹É£¬»¹ÓÐÎÞÊý docker image Óà runit¡¢supervisor Ö®ÀàµÄ×ö /sbin/init Ìæ»»£¬µ«ÎÊÌâÔÚÓÚÕâÒª×Ô¶¨ÒåÆô¶¯½Å±¾£¬ÐèÒª¼Ó ssh/cron/syslog/logrotate µÈµÈ±ß½ÇÁÏ----ÕâÒÑÈ»Êǽâ¾öÁËÎÞÊý±éµÄÎÊÌ⣬»¹Òª½â¾öÒ»±é£¬²»¾õµÃÂé·³Âð£¿ÄѵÀûÓÐÈËÈÏΪÕâЩ°üµÄ×÷Õß»òÕß´ò°üÕ߸üÉÆÓÚ´¦Àí·þÎñÆô¶¯½Å±¾Ã´£¿Ïñ systemd ÄÇÖָ㷨»¹ËãÕýµÀ£¬ÌØÒ⿼ÂÇÈÝÆ÷»·¾³£¬Ìø¹ýһЩ²½Ö裬µ«Ã²ËÆ»¹Ã»×öÍêÉÆ£¬ÐèÒªÊÖ¶¯É¾³ýһЩ .service Îļþ¡£

ÐéÄâ»ú vs ÈÝÆ÷

Ò²ÐíÓÐÈË»á˵ docker pull/push ¶à·½±ã°¡£¬docker build ¶à·½±ã°¡£¬¿É²»ÒªÍüÁË£¬vm image storage ÔçÔÚ openstack Àï¾Í½â¾öÁË£¬×Ô¼º´¦ÀíÒ²²»ÊǸö´óÊ£¬vm image build Ò²ÓÐ Hashicorp µÄ Packer ¹¤¾ß´úÀÍ£¬²»ÊǸöÊ¡£Docker ×ÔºÀµÄ¹Ù·½ docker registry Æäʵ´ó¼Ò×î¶àÓÃÓà base os image£¬ÄÇЩ app ¼¶±ðµÄ³öÓÚÐÅÈÎÒÔ¼°¶¨ÖÆ¿¼ÂǶ¼»á×Ô¼º build¡£¶ø Docker ×ÔºÀµÄ layered storage Ò²ÊÇÎÞÊýѪÀᣬaufs & overlayfs ¿ÓÁ˶àÉÙÈË£¿ÈÝÆ÷ÉçÇø×î½ü»¹Ìسç°Ý immutable deployment£¬ÒÔ°ÑÈÝÆ÷¸ùÎļþϵͳŪ×öÖ»¶ÁµÄΪÈÙ£¬È«È»²»¹ÜÓнô¼±°²È«¸üлòÕß¹¦ÄÜÐÞÕýÔõô´¦Àí----ʲô£¬ÄãҪ˵ docker rm && docker run ÔÙÆðÒ»Åú²»¾ÍÍêÊÂô£¿ÕæÓÐÕâô¼òµ¥¾ÍºÃÁË¡£

Ïñ Linux kernel ºÍ git ÄÇÖÖ²ÅÊÇÕý¾­ unix Éè¼ÆµÄ˼Ï룬·Ö²ã¶Ñµþ£¬µ×²ãÌṩmechanism£¬¸ß²ãÌṩ policy£¬¸÷È¡ËùÐ裬¿ÉϧÈË×ÜÊÇÒ×ÓÚ±»Ï´ÄÔ£¬ÔÚ½ÓÊܸ÷ÖָߴóÉÏpolicyµÄʱºòÈ«È»ÍüÁËmechanism»¹ÔÚ²»ÔÚ×Ô¼ºÊÖÀï¡£

»ØºÏ¶þ£ºÕýÈ·ÐÔÖ®Õù

Ç¿¸ôÀë¡¢full OS ÌåÑé¡¢±£Áô mechanism£¬Õâ²ÅÊÇÕýµÀ¡£ÁíÍâÈÝÆ÷»¹Òþ²ØÁËÒ»¸ö¿Ó£¬/proc/cpuinfoºÍfreeÃüÁîÊä³öÊÇhost osµÄ£¬Õâ¿ÓÁËÎÞÊý̽²âϵͳ×ÊÔ´×Ô¶¯¾ö¶¨Ä¬ÈÏÏ̳߳غÍÄÚ´æ³Ø´óСµÄ³ÌÐò£¬ÓÈÒÔJava×îΪÆձ顣

»ØºÏÈý£ºÐÔÄÜÖ®Õù

ÈÝÆ÷·ÛË¿½ò½òÀÖµÀ----Æô¶¯ÈÝÆ÷¿ì£¬ÈÝÆ÷µÄ¿ªÏúÉÙ¡£ ÕâÁ½µãȷʵÈç´Ëµ«ºÃ´¦ÕæµÄÓÐÄÇô¾Þ´óô£¿Ë­ÓÐÊÂûʲ»Í£´´½¨ÐéÄâ»ú£¿Ë­µÄÐéÄâ»úÉúÃüÖÜÆÚƽ¾ùÔÚ·ÖÖÓ¼¶±ð£¿Ë­µÄ¡°ÓÃÍêÈ«Æô¶¯Ê±¼ä¡±Æ½¾ùÔÚÃ뼶£¿ ÖÁÓÚ˵µ½ÐéÄâ»úÀ˷ѵÄ×ÊÔ´Ì«¶à£¬ÆäʵҲ¾ÍÊǸöÕÏÑÛ·¨¡£ÀíÂÛÉÏ·þÎñÆ÷µÄ×ÊÔ´ÀûÓÃÂÊƽ¾ù²»Ó¦¸Ã³¬¹ý 80%¶øʵ¼ÊÉϾø´ó²¿·Ö¹«Ë¾µÄ·þÎñÆ÷×ÊÔ´ÀûÓÃÂÊÓ¦¸Ã¶¼²»µ½ 50%£¬´óÁ¿µÄCPU¡¢ÄÚ´æ¡¢±¾µØ´ÅÅ̶¼Êdz£ÄêÀ˷ѵģ¬ËùÒÔ VM µÄ¶îÍ⿪Ïú²»¹ýÊÇÀË·ÑÁËÔ­±¾¾ÍÔÚÀ˷ѵÄ×ÊÔ´°ÕÁË¡£¾Íµ¥»úµÄáÛ·å I/O ÄÜÁ¦À´ÑÔ£¬VM ȷʵ²»µÐÈÝÆ÷¡£µ«Æ½Ê±¸ù±¾¾ÍÓò»µ½áÛ·å״̬£¬ Ô­±¾Ò»¸ö VM Àï¶à½ø³Ì¸ÉµÄÊ£¬·ÇµÃ¸ã¶à¸öÈÝÆ÷ÅÜ£¬ÕâÈÝÆ÷¿ªÏú£¬ÕâÈËÁ¦¿ªÏúÔõôË㣿

¹ØÓÚÈÝÆ÷»¹ÓÐÒ»¸ö»ÃÏ룬ÄǾÍÊÇ¿ÉÒÔÔÚÎïÀí»úÉÏÖ±½ÓÅÜÈÝÆ÷£¬¿ªÏú¾ÞµÍ¡¢¹ÜÀí¾Þ·½±ã£¬ÓÃרÓÃÎïÀí»ú·½Ê½Ìṩ¶à×⻧ǿ¸ôÀ롣ǰÃæÁ½µãÉÏÃæÒѾ­²µ¹ýÁË£¬»°Ëµ »¹ÓÐÈËÓà openstack ¹ÜÀí docker ÈÝÆ÷ÄØ¡£ ÎÒÖ»ÊÇ˵һϵÚÈýµã£¬ÔÚһ̨ÎïÀí»úÉÏÖ±½ÓÅÜÈÝÆ÷µÄÒ»¸ö×îÈÝÒ×±»ºöÊÓµÄÎÊÌ⣺ÏÖÔÚÓÃÀ´ÌṩÔÆ·þÎñµÄÎïÀí»úÒ»°ã¶¼ÊÇÓ²¼þ³¬¼¶Å£±Æ£¬ÅÜÉÏ°Ù¸öÈÝÆ÷¶¼Ã»ÎÊÌ⣬µ«ÎÊ ÌâÔÚÓÚÓû§ºÜ¿ÉÄÜÖ»ÐèÒª¼¸¸öÈÝÆ÷£¬ËùÒÔҪô¸úÈ˹²ÓÃÎïÀí»ú£¬ÒªÃ´ÀË·Ñ×ÊÔ´°×½»Ç®¡£ÄÄÅÂÓû§ÐèÒªÉÏ°Ù¸öÈÝÆ÷£¬³öÓÚÈÝÔÖ¿¼ÂÇ£¬Ò²²»¿ÉÒÔ°ÑÉÏ°ÙÈÝÆ÷²¿Êðµ½Ò»Ì¨Îï Àí»úÉÏ£¬ËùÒÔ»¹ÊÇҪô¸úÈ˹²ÓÃÎïÀí»ú£¬ÒªÃ´ÀË·Ñ×ÊÔ´¡£

·½°¸

ÒÔÉÏÊÇÎҵĹ۵㣬ÎÒ²¢²»ÊÇ¡°ÈÝÆ÷ºÚ¡±£¬¶øÊÇ¡°ÊµÓðס±¡£AWS¡¢Azure¡¢GCE ¶¼Ö÷ÍÆÔÚÐéÄâ»úÉÏÅÜÈÝÆ÷£¬°´ÐéÄâ»úÊÕ·Ñ£¬Õâ·Ç³£Ã÷ÖǵĽâ¾öÁËÎÊÌ⣺ÀϵĴ¿ VM »ù´¡ÉèÊ©²»Óö¯£¬¼Æ·ÑÕվɣ¬µ¥ÎïÀí»ú¿ÉÒÔ±»°²È«µÄ¶à×⻧¹²Óã¬×ÊÔ´¸ôÀëÓб£Ö¤£¨ÆðÂë±È¹²ÏíÄÚºËÇ¿¶àÁË£©£¬°ÑÈÝÆ÷¹ÜÀíÈí¼þÈç¡°kubernetes¡±¸øÓà »§£¬¼ÈÂú×ãÓû§µÄÈÝÆ÷ÐèÇó£¬ÓÖ²»µ£ÐÄÈÝÆ÷µÄ¶à×⻧ÎÊÌâ¡£

ËùÒÔÎÒÈÏΪ£ºÒÔ VM Ϊ»ù´¡£¬ÒÔÈÝÆ÷Ϊ¸¨Öúµã£¬ÒªÂò¾ÍÂò VM£¬×Ô¼º¹ÜÀíÈÝÆ÷£¬±ðÂò CAAS Ö±½ÓÌṩµÄÈÝÆ÷£¬±ð¿´²»µ½µ×ÏÂÎïÀí»ú»òÕßÐéÄâ»ú¡£Óà VM »¹ÊÇÓÃÈÝÆ÷£¬Àä¾²¿¼²ì×Ô¼ºµÄÓ¦ÓÃÉÏÈÝÆ÷ÊÇ·ñÓкô¦¡£×îºó£¬²ÐÄVM ¿ªÔ´¹ÜÀíÈí¼þÄܸã¸ö±È OpenStack ¼òµ¥µÄ¶«Î÷Âð£¿
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. Ô¸¾°Ô¶´ó ÓÚ 2016-05-04 16:24:47·¢±í:

    Óеã¹ýÂËÁË°É£¬¸Ð¾õºÃÒ£Ô¶µÄ