DockOne¼¼Êõ·ÖÏí£¨Ê®Ò»£©£ºDockerCon ¼ûÎÅ
±¾´ÎÖ÷Òª·ÖÏíDockerConÉϵļûÎÅ£¬·ÖÏíËùÓÐÄÚÈÝ´óÖ¿ÉÒÔ·ÖΪÈý¸ö²¿·Ö£º1.
Docker 1.7.0Éî¶È½âÎö£»2.DockerCon Hackathon¼ûÎÅ£»3. DockerConÊ¢µä¡£
µÚÒ»»·½Ú£ºDocker 1.7.0Éî¶È½âÎö
´ÓDockerµÄ°æ±¾±ä¸üÈÕÖ¾À´¿´£¬Docker 1.7.0ÔÚËĸö·½Ãæ»áÓлò¶à»òÉٵı䶯£¬·Ö±ðÊÇ£ºDockerÔËÐÐʱ£¨Runtime£©£¬DockerµÄ´úÂë±ä»¯£¬DockerµÄbuilderÄ£¿é£¬ÒÔ¼°DockerµÄbugÐÞ¸´¡£
´Ë´Î·ÖÏíÖ÷񻃾¼°Docker 1.7.0µÄruntime¡£
1.1.ÔöÌíÁËÒ»¸öÈÔÈ»´¦ÓÚÊÔÑé½×¶ÎµÄÌØÐÔ£ºÖ§³Öout of processµÄÊý¾Ý¾í²å¼þ
ºÎΪÊÔÑéÐÔÖʵÄÌØÐÔ£¬»»ÑÔÖ®DockerµÄÕⲿ·ÖÌØÐÔ»¹²»Ö§³ÖÔÚÉú²ú»·¾³ÖвÉÓã¬ÕâÐ©ÌØÐÔ¸ü¶àµÄÏ£ÍûÓû§½ö½öÔÚ²âÊÔ»·¾³£¬ÒÔ¼°É³Ïä»·¾³ÖвÉÓá£ÊÔÑéÐÔÌØÐÔÍêÈ«ÊÇDocker
1.7.0µÄÒ»´óÁÁµã¡£
ÔÚÒÔÉϵĻù´¡ÉÏÀí½âout-of-process£¬¾ÍÈÝÒ׺ܶ࣬²å¼þ±¾ÉíÓëDocker DaemonÎÞñîºÏ£¬¼´²å¼´Óã¬ÔÚDocker
Daemon·¶³ëÖ®Íâ·¢»Ó×÷Óá£
ĿǰDockerµÄÊÔÑéÐÔÌØÐÔ¿ÉÒÔ´ÓÁ½¸ö·½ÃæÀ´ÃèÊö£¬Ê×ÏÈDockerĿǰÒѾ֧³ÖÓû§×Ô¶¨ÒåµÚÈý·½²å¼þµÄʹÓã»ÁíÍâÔÚÕâ»ù´¡ÉÏ£¬Docker×ÔÉíÖ§³ÖÁËÈÝÆ÷Êý¾Ý¾ívolume²å¼þ¡£´ËÍ⣬Docker»¹¶¨ÒåÁËÒ»ÕûÌ×Óë²å¼þÏà¹ØµÄAPI£¬·½±ãÓû§Ê¹Óᣵ±È»£¬ÏàÐźóÐøÔÚ¸ÃÁìÓò£¬²»ÂÛÊÇDocker¹Ù·½£¬»¹ÊÇÕû¸öÉçÇø£¬¶¼»á²»¶ÏÓÐеIJå¼þµ®Éú¡£ÖµµÃÒ»ÌáµÄ£¬ÔÚÊý¾Ý¾ívolume²å¼þ·½Ã棬³öÏÖÁËFlockerµÄÉíÓ°£¬ÕâÒ²Òâζ×ÅÈÝÆ÷µÄÊý¾Ý´æ´¢ÎÊÌâ£¬ÕæÕý±»ÌáÉÏÌ¨Ãæ£¬²¢ÓÐÏàÓ¦ºÏÀíµÄ½â¾ö·½°¸¡£
1.2.´Ódocker daemonµÄ½Ç¶È£¬Ìí¼ÓÁËuserland-proxyµÄÆðÍ£¿ª¹Ø
Ê×ÏȽéÉÜuserland-proxyÒ»Ö±ÒÔÀ´µÄ×÷Óá£ÖÚËùÖÜÖª£¬ÔÚDockerµÄÇŽÓbridgeÍøÂçģʽÏ£¬DockerÈÝÆ÷ʱÊÇͨ¹ýËÞÖ÷»úÉϵÄNATģʽ£¬½¨Á¢ÓëËÞÖ÷»úÖ®ÍâÊÀ½çµÄͨÐÅ¡£È»¶øÔÚËÞÖ÷»úÉÏ£¬Ò»°ãÇé¿öÏ£¬½ø³Ì¿ÉÒÔͨ¹ýÈýÖÖ·½Ê½·ÃÎÊÈÝÆ÷£¬·Ö±ðΪ£º<eth0IP>:<hostPort>,
<containerIP>:<containerPort>,ÒÔ¼°<0.0.0.0>:<hostPort>¡£Êµ¼ÊÉÏ£¬×îºóÒ»ÖÖ·½Ê½µÄ³É¹¦·ÃÎÊÍêÈ«µÃÒæÓÚuserland-proxy£¬¼´Docker
DaemonÔÚÆô¶¯Ò»¸öDockerÈÝÆ÷ʱ£¬Ã¿ÎªÈÝÆ÷ÔÚËÞÖ÷»úÉÏÓ³ÉäÒ»¸ö¶Ë¿Ú£¬¶¼»áÆô¶¯Ò»¸ödocker-proxy½ø³Ì£¬ÊµÏÖËÞÖ÷»úÉÏ0.0.0.0µØÖ·É϶ÔÈÝÆ÷µÄ·ÃÎÊ´úÀí¡£
µ±Ê±ÒýÈëuserland-proxyʱ£¬Ò²ÐíÊÇÒòΪÉè¼ÆÕßÒâʶµ½ÁË0.0.0.0µØÖ·ÒÔ¼°localhost¶ÔÈÝÆ÷·ÃÎÊÉϵŦÄÜȱÏÝ¡£È»¶ø£¬ÔÚdocker-proxy¼ÓÈëDockerÖ®ºóÏ൱³¤µÄÒ»¶Îʱ¼äÄÚ¡£Docker°®ºÃÕ߯ձé¸ÐÊܵ½£¬ºÜ¶à³¡¾°Ï£¬docker-proxy²¢·Ç±ØÐ裬ÉõÖÁ»á´øÀ´Ò»Ð©ÆäËûµÄ±×¶Ë¡£
Ó°Ïì½Ï´óµÄ³¡¾°Ö÷ÒªÓÐÁ½ÖÖ¡£
µÚÒ»£¬µ¥¸öÈÝÆ÷ÐèÒªºÍËÞÖ÷»úÓжà¸ö¶Ë¿ÚµÄÓ³Éä¡£´Ë³¡¾°Ï£¬ÈôÈÝÆ÷ÐèÒªÓ³Éä1000¸ö¶Ë¿ÚÉõÖÁ¸ü¶à£¬ÄÇôËÞÖ÷»úÉϾͻᴴ½¨1000¸öÉõÖÁ¸ü¶àµÄdocker-proxy½ø³Ì¡£¾Ý²»ÍêÈ«²âÊÔ£¬Ã¿Ò»¸ödocker-proxyÕ¼ÓõÄÄÚ´æÊÇ4-10MB²»µÈ¡£Èç´ËÒ»À´£¬Ö±½ÓÏûºÄÖÁÉÙ4-10GBÄڴ棬ÒÔ¼°ÖÁÉÙ1000¸ö½ø³Ì£¬ÎÞÂÛÊÇ´ÓϵͳÄڴ棬»¹ÊÇ´ÓϵͳCPU×ÊÔ´À´·ÖÎö£¬Õâ¶¼»áÊǺܴóµÄ¸ºµ£¡£
µÚ¶þ£¬ÖÚ¶àÈÝÆ÷ͬʱ´æÔÚÓÚËÞÖ÷»úµÄÇé¿ö£¬µ¥¸öÈÝÆ÷Ó³Éä¶Ë¿Ú¼«ÉÙ¡£ÕâÖÖ³¡¾°Ï£¬¹ØÓÚËÞÖ÷»ú×ÊÔ´µÄÏûºÄ²¢Ã»ÓÐÈçµÚÒ»ÖÖ³¡¾°ÏÂÄÇÑù±©Á¦£¬¶øÇÒÒ»ÖÖ½ÏΪÂýÐԵķ½Ê½ÇÖÊÉ×ÊÔ´¡£
Èç½ñ£¬Docker DaemonÒýÈë- -userland-proxyÕâ¸öflag£¬½«ÒÔÉϳ¡¾°µÄ¿ØÖÆÈ¨ÍêÈ«½»¸øÁËÓû§£¬ÓÉÓû§¾ö¶¨ÊÇ·ñ¿ªÆô£¬Ò²ÎªÓû§µÄ³¡¾°µÄproxy´úÀíÌṩÁËÁé»îÐÔ¡£
1.3. docker execÃüÁîÔö¼Ó- -user²ÎÊý£¬Óû§¿ØÖÆdocker
execÔÚÈÝÆ÷ÖÐÖ´ÐÐÃüÁîʱËù´¦µÄÓû§
×Ô´Ódocker 1.3.0ÒýÈëdocker execÖ®ºó£¬Óû§¶ÔÈÝÆ÷µÄ²Ù×ÝÄÜÁ¦±»´ó´óÊÍ·Å£¬ÈÝÆ÷¶ÔÓû§¶øÑÔ²»ÔÙÊÇÒ»¸öÔËÐеĺںС£È»¶ø£¬docker
exec´øÀ´¾Þ´óºÃ´¦µÄͬʱ£¬ÎÒÃÇÒ²ÄÜ¿´µ½ÕâÆäÖеÄһЩ覴㬵±È»DockerÉçÇøÒ²ÔÚ²»¶ÏµØÍêÉÆdocker
exec¡£
Ê×ÏÈ£¬docker execÔÚÈÝÆ÷ÖÐÔËÐеĽø³Ì»áÒÔrootȨÏÞÔËÐУ¬ÔÚȨÏÞ·½ÃæÈ±·¦Áé»îÐÔµÄͬʱ£¬ÈÝÆ÷µÄ°²È«ºÜÓпÉÄÜʧ¿Ø¡£²ÎÊý-
-userÇ¡ºÃÃÖ²¹ÁËÕâ·½ÃæµÄ²»×ã¡£Æä´Î£¬docker execµÄ´æÔÚ´òÆÆÁËÈÝÆ÷ÄÚ½ø³Ì³ÊÏÖÊ÷×´¹ØÏµµÄÏÖ×´£¬¶øÉè¼Æ³õÆÚDockerÈÝÆ÷µÄºÜ¶à¸ÅÄî¾ùÒÔÊ÷µÄ˼Ïë´Óinit
processÈëÊÖ£¬Òò´ËĿǰdocker execµÄ½ø³Ì²¢²»ÄܺÍÔÉú̬ÈÝÆ÷½ø³ÌÍêȫһÑùµØ±»Docker
Daemon¹ÜÀí¡£
1.4. ÔöÇ¿DockerÈÝÆ÷Íø¹ØµØÖ·µÄÅäÖùã¶È
Docker 1.7.0·¢²¼Ö®Ç°£¬ÔÚbridgeÇŽÓģʽÏ£¬DockerÈÝÆ÷µÄÍø¹ØµØÖ·ÊÇĬÈÏÉú³ÉµÄ£¬Ò»°ãΪDocker»·¾³ÖеÄdocker0ÍøÇŵØÖ·¡£´ÓÈÝÆ÷ͨÐŵĽǶȶøÑÔ£¬Ä¬Èϵķ½Ê½ÒѾ¿ÉÒÔÂú×ãÐèÒª¡£µ«ÊÇ£¬ÎÒÃÇÒÀÈ»¿ÉÒÔ·¢ÏÖ£¬ÕâÖÖģʽ´æÔÚһЩ±×¶Ë£¬±ÈÈçÍøÂçÅäÖõÄÁé»îÐÔÒÔ¼°ÍøÂ簲ȫÐÔ¡£
DockerÈÝÆ÷µÄÍøÂçÒ»Ö±¹ãÊܹØ×¢£¬È±·¦¿ÉÅäÖõÄÌØÐÔ£¬ÔÚÈç½ñµÄÈí¼þ·¢Õ¹ÖУ¬¼¸ºõ¾ÍÒâζ×Å·â±Õ¡£ ¨Cdefault-gateway
ÒÔ¼°¨Cdefault-gateway-v6 ÕâÁ½¸ö²ÎÊý£¬ºÜ´ó³Ì¶ÈÉÏÌá¸ßÁËÓû§×Ô¶¨ÒåÈÝÆ÷ÍøÂçµÄÁé»îÐÔ£¬Óû§¸ü¶à³¡¾°µÄ¸²¸Ç£¬Ëƺõ´ÓDockerµÄ·¢Õ¹ÖÐÈôÓ°ÈôÏÖ¡£½áºÏ×î½ü¼¸´Îа汾£¬¹¦ÄܵÄÔöÇ¿Óë·á¸»£¬²»ÄѲ²⣬DockerµÄÆóÒµ»¯ÒÔ¼°Éú²ú»¯£¬ÒѾ¸üÉÏÒ»²ãÂ¥¡£
ĬÈÏÍø¹ØµÄÉèÖã¬ÎªÊ²Ã´Ëµ»áºÍÈÝÆ÷µÄÍøÂ簲ȫÏà¹ØÄØ£¿¹ýÈ¥ºÜ³¤Ò»¶Îʱ¼äÄÚ£¬docker0×÷ΪÈÝÆ÷µÄÍø¹ØµØÖ·£¬ÕâÖÖ·½Ê½½«ÈÝÆ÷ÓëËÞÖ÷»úµÄñîºÏ¹ØÏµÌåÏֵĺܳ¹µ×¡£docker0×÷ΪËÞÖ÷»úÉϵÄÍøÂç½Ó¿Ú£¬³äµ±ÈÝÆ÷ÓëËÞÖ÷»úµÄÇÅÁº¡£È»¶ø£¬Ò²ÕýÊÇÇÅÁºµÄ´æÔÚ£¬Ê¹µÃÈÝÆ÷ÄÚ²¿½ø³ÌºÜÈÝÒ×´©¹ýÍø¹Ø£¬µ½´ïËÞÖ÷»ú£¬´Ë¹ý³Ì²¢·Ç¶ÔÓû§Í¸Ã÷¡£
1.5. ÈÝÆ÷CFS quotaµÄÖ§³Ö
ÍêÉÆDocker¶ÔÄÚºËcgoupsµÄÖ§³Ö£¬Ö¸µÄÊǶÔÓÚÒ»¸ö×éÄڵĽø³Ì×éÔÚÒ»¸öÖÜÆÚÄÚ±»ÄÚºËCFSµ÷¶ÈËã·¨µ÷¶ÈµÄʱ¼äÏ޶µ¥Î»ÎªÎ¢Ãë¡£¸ÃÅäÖÃÏîÔÚcgroupsÖÐÏàÓ¦µÄÎļþΪ/sys/fs/cgroup/cpu/cpu.cfs_quota_us¡£
1.6. ÈÝÆ÷´ÅÅÌIOÏÞÖÆµÄÖ§³Ö
ÖÚËùÖÜÖª£¬ÈÝÆ÷½«»áΪÓû§Ìṩһ¸ö¸ôÀëµÄÔËÐл·¾³£¬ÈÝÆ÷ÄÚ²¿µÄ½ø³Ì»òÕß½ø³Ì×éʹÓÃ×ÊԴʱ½«Êܵ½ÏÞÖÆ£¬ÕâÑùµÄ×ÊÔ´£¬°üÀ¨£ºÄÚ´æ×ÊÔ´£¨ÎïÀíÄÚ´æÒÔ¼°swap£©£¬CPU×ÊÔ´£¨CPUʱ¼äƬÒÔ¼°CPUºËµÈ£©£¬´ÅÅ̿ռä×ÊÔ´µÈ£¬ÒÔÉÏÕⲿ·ÖÄÚÈÝ»ò¶à»òÉÙ£¬DockerµÄа汾֮ǰ»ò¶à»òÉÙ¶¼¿ÉÒÔʵÏÖ£¬È»¶ø¸ôÀëά¶ÈÒÀ¾É²»¹»ÍêÃÀ£¬Õâ´ÎDockerÌí¼ÓÁË¡ªblkio-weight²ÎÊý£¬ÊµÏÖ¶ÔÈÝÆ÷´ÅÅÌIOÏÞÖÆµÄÖ§³Ö¡£¸ôÀë¸ü¼ÓÍ걸£¬Óû§Ò²²»ÔÙÐèÒªµ£ÐÄÈÝÆ÷¼ä´ÅÅÌIO×ÊÔ´µÄ¾ºÕù¡£
1.7. ZFSÖ§³Ö
Docker 1.7.0 ÕýʽÐû²¼Ö§³ÖZFSÎļþϵͳ¡£´Ë¾ÙÒ²Òâζ×ÅDockerÈÝÆ÷ÎļþϵͳµÄÖ§³Ö´ÓÔÏȵÄ5ÖÖÔö¼Óµ½6ÖÖ¡£´Ëǰ£¬DockerÖ§³Öaufs£¬devmapper£¬btrfs£¬ovelayfs£¬vfs£¨ÓÃÓÚÖ§³Övolume£©£¬Èç½ñÌí¼Ó¶ÔZFSµÄÖ§³Ö¡£ZFSµÄÖ§³Ö£¬²»½ûÈÃÈËÁªÏëµ½ÓëDockerµÄÊý¾Ý¾ívolume²å¼þµÄFlocker¡£´í½ø´í³ö£¬Ëƺõ¹ØÏµ½ÏΪ΢Ãî¡£
ÖµµÃÒ»ÌáµÄÊÇ£¬³ýÁËÖ§³ÖZFSÖ®Í⣬±ÊÕß·¢ÏÖÔÚ¸ºÔðÈÝÆ÷ÎļþϵͳµÄgraphÄ£¿éÖУ¬Ìí¼ÓÁËdriver_windows.go,ËäÈ»ÄÚÈݼ«Æä¼òÒ×£¬²¢·ÇÍêȫʵÏÖ¶ÔwindowsµÄÈ«ÅÌÖ§³Ö£¬µ«ÊÇÖÁÉÙÈôó¼Ò¿´µ½DockerÖ§³ÖwindowsµÄ²½·¥ÔÚ²»¶ÏÂõ½ø¡£
1.8. docker logsµÄ¹¦ÄÜÀ©Õ¹
²é¿´ÈÝÆ÷ÈÕÖ¾£¬ÏàÐźܶàDocker°®ºÃÕß¶¼ÌåÑé¹ý£¬ÕâÒ²ÊÇÓû§²é¿´ÈÝÆ÷ÔËÐÐ״̬µÄÖØÒªÒÀ¾Ý¡£
¿ÉÒÔ¼òµ¥Á˽âDockerÈÝÆ÷ÈÕÖ¾µÄÔÀí£º¶ÔÓÚÿһ¸ö´´½¨µÄDockerÈÝÆ÷£¬Docker Daemon¾ù»áÔÚÄÚ²¿´´½¨Ò»¸ögoroutineÀ´¼àÌýÈÝÆ÷ÄÚ²¿½ø³ÌµÄ±ê×¼Êä³östdoutÒÔ¼°±ê×¼´íÎóstderr£¬²¢½«ÄÚÈÝ´«µÝÖÁÈÕÖ¾ÎļþÖС£Ã¿µ±Óû§·¢Í¨¹ýDocker
Client·¢Æð²é¿´ÈÝÆ÷ÈÕÖ¾µÄÇëÇódocker logsÖ®ºó£¬Docker Daemon»á½«ÈÕÖ¾ÎļþµÄÄÚÈÝ´«µÝÖÁDocker
ClientÏÔʾ¡£
docker logsµÄ·¢Õ¹£¬¼¸ºõ¿ÉÒÔ·ÖΪ4¸ö½×¶Î£ºDockerµ®Éú³õÆÚµÄÔÉú̬ÈÕÖ¾´òÓ¡£»ÔÊÐíÓû§followÈÝÆ÷µÄÈÕÖ¾£»¿ªÆôÈÝÆ÷ÈÕÖ¾µÄtail¹¦ÄÜ£¬ÒÔ¼°ÈÝÆ÷ÈÕÖ¾µÄsince¹¦ÄÜ£¬´òÓ¡´Óijһ¸öʱ¼ä´Á¿ªÊ¼Ö®ºóµÄÈÝÆ÷ÈÕÖ¾¡£
ËäÈ»ÈÝÆ÷ÈÕÖ¾µÄ¹¦ÄÜÔÚÖð½¥ÔöÇ¿£¬µ«ÊDz»¿É·ñÈϵÄÊÇ£¬ÈÝÆ÷ÈÕÖ¾ÊÇÈÝÆ÷±¾ÉíÓëDocker DaemonñîºÏ×î´óµÄÄ£¿éÖ®Ò»£¬¶øÕâÉæ¼°DockerÉè¼ÆÖ®³õµÄ¼Æ»®£¬¾ø·ÇÍêÃÀ£¬µ«µÄÈ·ÊǶÌʱ¼äÄÚ×îÒ×Óõķ½°¸¡£
1.9. ÈÝÆ÷ÓëËÞÖ÷»ú¹²ÏíUTSÃüÃû¿Õ¼äµÄÖ§³Ö
²»Í¬µÄ³¡¾°Ï£¬ÈÝÆ÷ÓëËÞÖ÷»ú¿ÉÒÔÍêÈ«¸ôÀ룬ÈÝÆ÷Ò²¿ÉÄÜÓëËÞÖ÷»ú´æÔÚ¹²ÏíÐÅÏ¢µÄÇé¿ö£¬DockerÍøÂçµÄhostģʽ¾ÍÊÇÒ»¸öºÜºÃµÄÀý×Ó£¬¸ÃģʽϵÄÈÝÆ÷¹²ÏíËÞÖ÷»úµÄÍøÂçÃüÃû¿Õ¼ä¡£
¹²ÏíUTSÃüÃû¿Õ¼äµÄÖ§³Ö£¬Òâζ×ÅÈÝÆ÷ÓëËÞÖ÷»úµÄ¹ØÏµÔ½À´Ô½Î¢Ãî¡£Ò²ÐíĿǰºÜ¶àDocker°®ºÃÕßÒѾϰ¹ßÈÝÆ÷ÓëËÞÖ÷»úÍêÈ«¸ôÀëµÄÔËÐУ¬µ±È»Ò²»áÓÐһЩÓû§Ôø¾±§Ô¹ÍêÈ«¸ôÀëµÄÔËÐл·¾³²¢²»ÄÜÆ½»¬µÄ½«´«Í³ÒÅÁôÒµÎñÈÝÆ÷»¯¡£ÄÇô£¬Ä¿Ç°DockerÔÚ¼æ¹ËÁ½ÕßµÄÇé¿öÏ£¬¸ü¶àµØÔÚÂú×ãºóÕßµÄÐèÇ󣬲»¾ÃµÄ½«À´£¬DockerÈÝÆ÷µÄÔËÓó¡¾°±Ø½«¸ü¼Ó·á¸»£¬ÕâÒ²ÊÇDocker×ßÏòÆóÒµ»¯ÒÔ¼°Éú²ú»¯±ØÐëÒªÌ˵Ä·¡£
×ÜÌå¶øÑÔ£¬Docker 1.7.0¸ø±ÊÕߵĸÐÊÜÊÇ£º¹¦ÄÜÉÏÖð½¥ÏòÆóÒµÐèÇó¿¿Â££¬ÔÚproduction-readyµÄ·Éϲ»¶ÏÓÅ»¯£¬ÁíÍâÔÚ°²È«·½ÃæÔÚ²»Éæ¼°Äں˻ù´¡ÉÏÒ²²»¶ÏÍêÉÆ¡£
¾ÍÔÚ·¢²¼1.7.0Ö®ºóû¼¸ÌìµÄDockerConÉÏ£¬DockerÐû²¼production-ready²¢ÑÏËà¿´´ý°²È«£¬Æäʵ´Ó1.7.0µÄ±ä¸üÀ´¿´£¬ÍêÈ«¿ÉÒÔ¸ÐÊܵ½ÕâÒ»µã¡£
ÁíÍ⣬ÐèÒªÌá¼°µÄÊÇ£ºÒÔÉϵÄ3¡¢5¡¢6Èýµã¾ùÊǹúÄÚ¹«Ë¾»ªÎªµÄ´óÁ¦Íƶ¯ÏÂÍê³ÉµÄ£¬×÷Ϊһ¸öDocker¿ª·¢Õߣ¬ÓÉÖԵĸÐл»ªÎªÒÔ¼°ÖÚ¶àµÄdocker
committerµÄ¹±Ïס£
µÚ¶þ»·½Ú£ºDockerCon Hackathon
6ÔÂ7ºÅ8ºÅ£¬ÔÛÃÇÖйúµÄ¿ª·¢ÕßÔÚ±±¾©¾Ù°ìÁËÒ»´ÎGolang&Docker Hackathon£¬DockerConǰϦ¾É½ðɽҲ¾Ù°ìÁËÒ»´ÎDocker
Hackathon¡£
Õâ´ÎºÚ¿ÍÂíÀËɵ®ÉúÁ˺ܶàÐÂÓ±µÄÏë·¨£¬¾¨Óã·ÛµÄGeek¾«Éñ·¢»ÓµÃÁÜÀ쾡Ö¡£ÓÉÓÚÄÚÈݹýÓڷḻ£¬ÎÒ½ö½ö¸ø´ó¼Ò½éÉÜÁ½¸öÎÒÓ¡Ïó·Ç³£Éî¿ÌµÄÏîÄ¿¡£
2.1.²ÎÈüÏîÄ¿£ºSwarm-SEC
ÕâÊÇÒ»¸öSwarm¼¯Èº°²È«ÆÀ¹À¹¤¾ß
ͨ¹ýSwarm¡¢Ô¤Ïȶ¨ÒåµÄ°²È«¹æ·¶À´É¨ÃèÕû¸ö¼¯Èº¡£ÆÀ¹ÀµÄ°²È«Î¬¶ÈÓÐÖ÷ÒªÓÐÈýµã£ºSwarmÖÐdocker
daemonµÄ°²È«ÅäÖã¬Swarm¼¯ÈºÖÐDocker NodeµÄ¾ßÌ尲ȫ²ßÂÔʹÓÃÇé¿ö£¬Swarm¼¯ÈºµÄÔËÐÐʱ°²È«Çé¿ö¡£
ÕâÊÇswarm-secµÄÆô¶¯·½Ê½£º
docker run -it --net host --pid host --cap-add audit_control \ -v /var/lib:/var/lib \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/lib/systemd:/usr/lib/systemd \ -v /etc:/etc --label swarm-sec \ swarm-sec <token-id> |
ÍøÂçÃüÃû¿Õ¼ä£¬PidÃüÃû¿Õ¼ä£¬¼¸ºõ½«ËùÓеÄDockerÐÅÏ¢¶¼¹ÒÔØµ½ÈÝÆ÷ÄÚ²¿ÁË£¬ÁíÍ⻹Ìí¼ÓÁËÒ»¸öCapabilityÄÜÁ¦audit_control£¬ÓÃÒÔ»ñÈ¡auditÊØ»¤½ø³ÌµÄÐÅÏ¢¡£
ÎÒÖ÷Òª½éÉÜÒ»ÏÂSwarm-sec¹Ø×¢ÁËSwarm DaemonÒÔ¼°Docker
NodeÉÏDocker DaemonµÄÄÄЩ°²È«ÎÊÌâ¡£
Swarm Daemon
1.²é¿´SwarmÊÇ·ñÔËÐÐÔÚÈÝÆ÷Ö®ÖУ¬
2.²é¿´SwarmÊÇ·ñÊÇÒ»¸ö×îеÄÎȶ¨°æ±¾
3.²é¿´SwarmµÄÈÕÖ¾¼¶±ð£¬²»½¨ÒéʹÓÃdebugģʽ
4.ÑéÖ¤ÊÇ·ñÕ¼ÓÃDockerµÄĬÈ϶˿Ú
5.ÑéÖ¤Swarm DaemonÊÇ·ñÆôÓÃÁËTLS°²È«´«ÊäÐÒé
6.ÑéÖ¤ÈÝÆ÷µ÷¶ÈÇý¶¯ÊÇ·ñÊÇmesos£¬Ä¿Ç°mesosÇý¶¯ÈÔ´¦ÓÚÊÔÑé½×¶Î
7.²é¿´ÀàËÆÓÚSELinuxºÍAppArmorÊÇ·ñÆôÓÃ
¡¡
Docker Daemon
ÑéÖ¤Docker NodeµÄlabelÉèÖÃÊÇ·ñ¹æ·¶£¬ÑéÖ¤docker daemonµÄÅäÖÃÊÖ·ñ·ûºÏ°²È«£¬±ÈÈç²»½¨ÒéʹÓÃAUFSµÈ¡£
ÏîĿԴÂ룺https://github.com/snrism/swarm-sec
2.2.²ÎÈüÏîÄ¿£ºSherdock RancherOSµÄ×÷Æ·
Ö÷ÒªµÄÌØÕ÷ÓУº
»ùÓÚÕýÔò±í´ïʽ£¬¶ÔDocker¾µÏñ½øÐÐ×Ô¶¯»ØÊÕ¡£
¾µÏñGCµÄµÄÔÒòÖ÷Òª»¹ÊÇÒòΪÔÚbuildʧ°ÜµÄʱºò»á²úÉúһϵÁеÄnone¾µÏñ£¬ÕâЩ¾µÏñδ±ØÓÐÓᣴËʱ¾Í¿ÉÒÔ»ùÓÚ¸ø¶¨µÄÕýÔò±í´ïʽ£¬½«ÕâÑùµÄ¾µÏñÇåÀíµô¡£
»ùÓÚdocker 1.7.0×ö¹Â¶ùÊý¾Ý¾íµÄÇåÀí¹¤×÷¡££¨¹Â¶ùÊý¾Ý¾í£ºÓÐdata
volumeµÄÈÝÆ÷ÔÚɾ³ýʱûÓÐÖ¸¶¨£v²ÎÊý£©
ÌṩUI½çÃæ¡£
HackathonµÄ±¨µÀ·ÖÏíµÃÌ«¶àÈÝÒ×ռƪ·ù£¬Èç¹û´ó¼Ò¸ÐÐËȤ£¬¿ÉÒÔ²éÔÄ£ºDockerConÖ®ºÚ¿ÍÂíÀËɼûÎÅ
µÚÈý»·½Ú£ºDockerConÊ¢µä
·ÖÏíDockerCon¼ûÎÅ£¬DockerConÁ½Ìì·¢ÉúµÄÄÚÈÝ×ÔÈ»ÊÇÖØÍ·Ï·¡£Õⲿ·ÖµÄ·ÖÏí£¬ÎÒÖ÷Òª·ÖΪÁ½²¿·Ö£ºµÚÒ»£¬keynotesµÄÄÚÈÝ£¬²¢Í¨¹ý¼¸¸ö¹Ø¼ü×Ö½øÐнéÉÜ£»µÚ¶þ£¬½éÉÜÎҲμӵö·Ö»á³¡µÄtopicÄÚÈÝ¡£
3.1 keynotes¹Ø¼ü×Ö
3.1.1 OCP
DockerÁªºÏÖÚ¶àIT¾ÞÍ·£¬¹²½¨ÍêÈ«¿ª·ÅµÄÈÝÆ÷±ê×¼£¬ÃûΪOCP£¬ÒâΪ¡°¿ª·ÅʽÈÝÆ÷ÏîÄ¿¡±£¬ÎÒ¹úµÄ¹«Ë¾»ªÎªÒ²ºÕÈ»ÔÚÁС£OCPÊÇÈ«ÇòÊ׸öÈÝÆ÷¼¼Êõ½ç¿ª·Å²¢Í³Ò»µÄ±ê×¼¡£
OCPµÄµ®ÉúÒâζ×ÅDockerÓëCoreOSÖ®¼äÔøÓеÄÈÝÆ÷±ê×¼Ö®Õù£¬ÔݸæÒ»¶ÎÂä¡£OCPµÄ¿ª·ÅÐÔʹµÃÈÝÆ÷µÄ±ê×¼Äܹ»µÃµ½¸üºÃµÄÍêÉÆ¡£
OCPʹµÃÈÝÆ÷µÄ·¢Õ¹Äܹ»±»¹ã·ºÈÏͬ²¢Ö§³Ö£¬¸öÈË»òÍŶÓÉìÖ±ÆóÒµ¶ÔÈÝÆ÷¼¼ÊõµÄ¹²ÏíÄܹ»¸ü¶àµÄ±»Ë¼¿¼£¬Äܹ»¸ü¶àµÄ±»Êµ¼ù£¬Æä·¢Õ¹¶ÔÈÝÆ÷µÄÓ°Ïì¾ø¶Ô²»¿ÉС¹À¡£
3.1.2 ÐÂÏîÄ¿
Experimental binary
DockerµÄexperimental binaryÊÇÄÇÖÖ¹¦Äܷdz£Ç¿´ó¡¢µ«²»¿ÉÄܱ»¼ÓÈëDocker¹Ù·½°æ±¾µÄ¹¦ÄÜ×é¼þ¡£ÕâÖÖʵÑéÐÔÖʵĹ¹½¨ÔÊÐíÓû§×ÔÐÐÌåÏÖDockerµÄй¦ÄÜ£¬²¢ÇÒ¸øDockerµÄά»¤ÕßÌṩ·´À¡¡£Í¨¹ýÕâÖÖ·½Ê½£¬Docker¹Ù·½Ï£Íû¿ÉÒÔ½«Ò»Ð©Ð¹¦ÄÜÔ¤Ïȱ©Â¶¸øÈ«ÇòµÄ¿ª·¢Õߣ¬´Ó¶øÈôó¼ÒÔÚʵ¼ùÒÔ¼°·´À¡ÖÐÖØËÜÕâÐ©ÖØÒª¹¦ÄÜ¡£
Ŀǰ£¬DockerµÄÍøÂç²å¼þÒÔ¼°Êý¾Ý¾ívolume²å¼þÊÇ×îÏÈÎÊÊÀÓë´ó¼Ò¼ûÃæµÄÊÔÑéÐÔ¹¦Äܲå¼þ¡£
Docker plugins
DockerµÄ¿ÉÀ©Õ¹ÐÔÔٴα»Solomom¼°ÆäÍŶÓÌáÉÏÒé³Ì²¢Êµ¼ù¡£Ä¿Ç°£¬DockerµÄnetworkÄ£¿é£¬Êý¾Ý¿âvolumeÄ£¿é£¬swarmÖеĵ÷¶ÈÄ£¿éÒÔ¼°·þÎñ·¢ÏÖÄ£¿é£¬¾ùÒѾÖð½¥±»²å¼þ»¯£¬ÌåÏÖDockerÉú̬ÖÐÈí¼þÇ¿´óµÄÀ©Õ¹ÐÔÄÜÁ¦Ö®Í⣬¸üÌåÏÖÁËDockerÉú̬µÄ¿ª·ÅÐÔ¡£µ±È»³ýÁËÒÔÉÏÕâЩÒѾ֧³ÖµÄ²å¼þÖ®Í⣬δÀ´µÄ²å¼þ±Ø¶¨»á¸ü¶à¡£
´ËÍ⣬²å¼þµÄʹÓ㬶ÔÓÚDocker DaemonÒÔ¼°ÆäËûµÄÈí¼þÄ£¿éûÓÐÆäËûµÄpatchÒýÈ룬Ȼ¶øÄ¿Ç°ÈÔÈ»ÐèÒªÖØÆôDocker
Daemon»òÕ߯äËûÈí¼þ¡£ÁíÍ⣬²å¼þµÄÖ§³Ö£¬¶ÔÓÚDockerÓ¦ÓöøÑÔÊÇÈ«ÅÌ͸Ã÷µÄ£¬²å¼þµÄÒýÈë²»»á¸Ä±äÔÓÐDockerÓ¦ÓõÄʹÓ÷½Ê½¡£
Docker Notary for security
NotaryÓÉserver¶ËºÍclient¶Ë×é³É£¬Server¶ËÖ÷ÒªÔËÐв¢Î¬»¤Ò»¸öÈÝÆ÷µÄÊÜÐż¯ºÏ£¬Client¶ËÓÃÒÔÓëServer½»»¥×îÖÕʵÏÖ°²È«ÈÎÎñµÄ·Ö·¢¡£
×ÜÌå¶øÑÔ£¬NotaryÏ£ÍûÌṩһÖÖ¼òµ¥µÄ·½Ê½£¬±ãÓÚÓû§¸ü°²È«µÄ·¢²¼ÒÔ¼°ÑéÖ¤ÍøÂçÊý¾Ý¡£ÔÔòÉÏ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýTLS°²È«´«Êä²ãÐÒé±£ÕÏͨÐÅË«·½µÄ°²È«ÐÔ£¬È»¶øÕâ±¾ÖÊÉÏ´æÔÚȱÏÝ£¬ÔÒòºÜ¼òµ¥£¬Server¶ËµÄÈκÎÊèºö£¬¶¼½«µ¼Ö¶ñÒâÄÚÈÝÌæ»»ºÏ·¨ÄÚÈÝ£¬´Ó¶øÇ°ÕßΣ¼°ÍøÂçͨÐÅ¡£
ÔÚNotaryµÄ°ïÖúÏ£¬ÍøÂçÄÚÈݵķ¢²¼Õß¿ÉÒÔͨ¹ýÇ¿°²È«µÄkey¶ÔÓû§ÄÚÈݽøÐÐÇ©Ãû¼ÓÃÜ¡£Ò»µ©Íê³É²¢×¼±¸·¢²¼£¬ÔòÄÚÈÝÊ×Ïȱ»ÍÆËÍÖÁNotaryÊÜÐŵļ¯ºÏÖС£·ÃÎÊÕßÖ»ÓÐͨ¹ý°²È«ËíµÀ»ñÈ¡ÁË·¢²¼ÕߵĹ«Ô¿Ö®ºó£¬²ÅÄܺÍNotaryÖеÄÈÎÒâserver½¨ÒéͨÐÅ£¬²¢·ÃÎʵ½ºÏÊÊ׼ȷµÄ×ÊÔ´¡£
runC.io
runCÊÇÒ»¸öOS²ãÃæÍ¨ÓõÄÔËÐÐʱ»·¾³£¬¶øÇÒ½ö½öÊÇOS²ãÃæµÄÔËÐÐʱ¡£ÏîÄ¿µØÖ·£º[https://runc.io]
Docker¹Ù·½Ðû³ÆrunCÒÔ¼°Í¨¹ýÈ«Ãæ²âÊÔ£¬²¢ÇÒproduction-ready¡£
ÔÚ¹¦ÄÜ·½Ã棬runCÖ§³ÖLinuxËùÓеİ²È«ÌØÐÔ£¬±ÈÈ磺SELinux£¬apparmor£¬cgroups£¬seccompµÈ¡£
Ö§³ÖĿǰÁ¬docker¶¼²»Ö§³ÖµÄuser namespace
Ö§³ÖÈÝÆ÷µÄÈÈÇ¨ÒÆ¡£
΢ÈíÕýÔÚ»ý¼«¿ªÕ¹windows¶ÔrunCµÄÖ§³Ö¡£
ARMÌåϵµÄÖ§³ÖÒ²ÕýÔÚ»ý¼«½øÕ¹ÖС£
IntelÒ²ÔÚ¶ÔDPDK¹±Ï×
Ã÷È·Á˱ê×¼»¯¡¢¿ÉÒÆÖ²¡¢¿ÉÔËÐеĸñʽ
¼æÈÝÓÚÃüÁîÐÐÐÎʽÒÔ¼°±à³Ì·½Ê½
3.1.3 Éú²ú»¯
Docker HubÏßÉÏ·þÎñµÄÔöÇ¿ºÍ¸Ä½ø
Éý¼¶µ½V2 open source registry
ÓÅ»¯ºó¶Ë£¬ÊµÏÖÁ˸ü¿ìµÄÏÂÔØËÙ¶È£¬¸üÉٵĿͷþ¶Ë/·þÎñÆ÷¶ËµÄ½»»¥´ÎÊý
Ìá¸ßÎȶ¨ÐÔ¡¢ÕûÌåÓû§ÌåÑéÌáÉý
еÄUI½çÃæ
ÌáÉý°²È«ÐÔ·½ÃæDocker×öÁ˺ܶàŬÁ¦£¬°üÀ¨
authentication micro services
content-addressable images
one time use build hosts
on-ging scanning and auditsµÈµÈ¡£
Ocra
Project OrcaµÄÔ¸¾°ÊÇÌṩһÌ××ÔÉ϶øÏµÄÕûºÏÕ»£¬Äܹ»×¥È¡ËùÓеŤ¾ßºÍplumbing£¨Docker
Engine¡¢Docker Swarm¡¢Networking¡¢GUI¡¢Docker Compose¡¢°²È«¡¢°²×°¹¤¾ß¡¢²¿Êð¡¢ÅäÖõȣ©¡£Project
Orca·Ç³£Êʺϡ°build£ship£run¡±ÖС°run¡±µÄ²¿·Ö¡£
´ú±í×ÅDocker¿ªÊ¼ÕæÕýµÄ½ø¾üÆóÒµÊг¡£¬Ë½Óл¯ÈÝÆ÷¹ÜÀí½â¾ö·½·¨DockerÍÆ³ö½â¾ö·½°¸¡£
3.2 ·Ö»á³¡·ÖÏí
3.2.1DockerµÄ°²È«
DockerÄÜÌṩµÄ°²È«±£ÕϽ«º¸ÇÒÔÏÂ7µã£º
namespace±£ÕÏϵͳ×ÊÔ´µÄ¸ôÀë
cgroupÍê³É½ø³Ì×é×ÊÔ´µÄÏÞÖÆ
LinuxµÄ°²È«Ä£¿éÌṩMAC£¨apparmor£¬ SELinux£©
capabilities½«rootµÄȨÏÞϸ·ÖΪ¶àÖÖÀàÐÍ
ulimitµÄ¹¦Äܸü¶àά¶ÈµÄÏÞÖÆ×ÊÔ´£¨docker 1.6Ö®ºóÖ§³Ö£©
user namespace±£ÕÏÈÝÆ÷ÄÚ²¿µÄrootÔÚhostÉϲ¢·Çroot£¨Ô¤¼Ædocker
1.8Ö§³Ö£©
seccompʹµÃÈÝÆ÷ÄÚ½ø³ÌÊܵ½ÏµÍ³µ÷ÓÃȨÏ޵ĿØÖÆ
DockerÔÚ°²È«·½Ã滹×öÁËÒÔϹ¤×÷£º
½µµÍ¾µÏñ´øÀ´µÄ°²È«·çÏò
ÉèÖøüΪ¾«¼òµÄLinux·¢Ðа棺
ÒÆ³ý²»ÐèÒªµÄpackage¡¢Óû§ÒÔ¼°¶þ½øÖƹ¤¾ßÎļþ
Ìá³öTailored Profiles
ÈÝÆ÷¿ÉÒÔ´´½¨least-privildgeµÄÎļþ
ÎļþÓÐÄÜÁ¦ËæÈÝÆ÷´«µÝ
ͨ¹ý¶ÀÁ¢µÄÎļþÅäÖñíÃ÷ËùÓеÄȨÏÞ
ÒѾ¹æ»®ÈërunC
ÃèÊöËùÓеĸôÀëÌØÐÔ
ÖµµÃÌá¼°µÄÊÇ£ºDockerCon°²È«»°ÌâµÄ·ÖÏíÕߣ¬¸ÐлÁËÀ´×ÔÖйúµÄ»ªÎª¹«Ë¾¡£
3.2.2 NetflixµÄDockerÆóÒµ¼¶Êµ¼ù
ΪʲôѡÔñDocker£¿
1. ÔÚnetflixÄÚ²¿½ø³Ì¸ôÀëµÄÐèÇóºÜ´ó
2. DockerÓÐÄÜÁ¦½«Öڶ๦Äܼ¯Ò»Éí£¬²¢´ò°ü³ÉÒ»¸öDocker¶þ½øÖÆÎļþ£¬Óû§Íê³ÉÎÞÐè¹ØÐÄÓëlinuxÄÚºËÓëÆäËûÌØÐÔÖ®¼äµÄÒÀÀµ¹ØÏµ£¬Ö»Ðè²Ù×ÝDocker¼òÒ×µÄAPI¼´¿É
3. DockerµÄÖܱ߹¤¾ßÁ´µÄ·¢Õ¹ÒÔ¼°¼¯Èº¼äÓ¦Ó÷¢²¼µÄ¿ÉÀ©Õ¹ÐÔ´ó´óÎüÒýÁËNetflix
DockOne¼¼Êõ·ÖÏí£¨Ê®¶þ£©£ºÐÂÀËÊÇÈçºÎ·ÖÎö´¦Àí32ÒÚÌõʵʱÈÕÖ¾µÄ£¿
ÎÒ´Ó2014Äê³õÈëÖ°ÐÂÀ˺ó¾Í¿ªÊ¼½Ó´¥ÊµÊ±ÈÕÖ¾·ÖÎöÏà¹ØµÄ¼¼Êõ£¬Ö÷ÒªÊÇELK£¨Elasticsearch¡¢Logstash¡¢Kibana£©£¬µ±Ê±ÊÇѧϰ+ELKÓÅ»¯£¬½ÓһЩÈÕÖ¾£¬Ð¡´òСÄÖ¡£´Ó2015ÄêÆð£¬ÎÒÃÇÕýʽµÃ°ÑʵʱÈÕÖ¾·ÖÎö×÷Ϊ·þÎñÌṩ¸ø¹«Ë¾µÄÆäËû²¿ÃÅ¡£½ñÌìÒª¸ø´ó¼Ò·ÖÏíµÄÊÇÔÚ·þÎñ»¯µÄµÀ·ÉÏ£¬ÎÒÃǵÄÏë·¨£¬·½°¸ºÍÒÉÎÊ¡£
·þÎñ½éÉÜ
Ëæ×Åʵʱ·ÖÎö¼¼ÊõµÄ·¢Õ¹¼°³É±¾µÄ½µµÍ£¬Óû§ÒѾ²»½ö½öÂú×ãÓÚÀëÏß·ÖÎö¡£Ä¿Ç°ÎÒÃÇ·þÎñµÄÓû§°üÀ¨Î¢²©¡¢Î¢ÅÌ¡¢ÔÆ´æ´¢¡¢µ¯ÐÔ¼ÆËãÆ½Ì¨µÈÊ®¶à¸ö²¿ÃŵĶà¸ö²úÆ·µÄÈÕÖ¾ËÑË÷·ÖÎöÒµÎñ£¬Ã¿Ìì´¦ÀíÔ¼32ÒÚÌõ£¨2TB£©ÈÕÖ¾¡£
¼¼Êõ¼Ü¹¹
¼òµ¥½éÉÜһϷþÎñµÄ¼¼Êõ¼Ü¹¹£º

ÕâÊÇÒ»¸öÔÙ³£¼û²»¹ýµÄ¼Ü¹¹ÁË£º
£¨1£©Kafka£º½ÓÊÕÓû§ÈÕÖ¾µÄÏûÏ¢¶ÓÁС£
£¨2£©Logstash£º×öÈÕÖ¾½âÎö£¬Í³Ò»³ÉJSONÊä³ö¸øElasticsearch¡£
£¨3£©Elasticsearch£ºÊµÊ±ÈÕÖ¾·ÖÎö·þÎñµÄºËÐļ¼Êõ£¬Ò»¸öschemaless£¬ÊµÊ±µÄÊý¾Ý´æ´¢·þÎñ£¬Í¨¹ýindex×éÖ¯Êý¾Ý£¬¼æ¾ßÇ¿´óµÄËÑË÷ºÍͳ¼Æ¹¦ÄÜ¡£
£¨4£©Kibana£º»ùÓÚElasticsearchµÄÊý¾Ý¿ÉÊÓ»¯×é¼þ£¬³¬Ç¿µÄÊý¾Ý¿ÉÊÓ»¯ÄÜÁ¦ÊÇÖڶ๫˾ѡÔñELK
stackµÄÖØÒªÔÒò¡£
ŬÁ¦Ìṩ¸üºÃµÄ·þÎñ
ÎÒÕâ´Î·ÖÏíµÄÖØµã²»ÊÇÕâÖּܹ¹µÄÓÅÁÓ»òΪʲôѡÔñÕâÑùµÄ¼Ü¹¹£¬¶øÊÇÔÚÈç´ËµÄ¼Ü¹¹ÉÏÈçºÎ¸üºÃµØ´«µÝʵʱÈÕÖ¾·ÖÎöµÄ¼ÛÖµ¡£ÎªÓû§×öºÃ·þÎñÒ²²»ÊÇÐ޸öÅäÖÃÎļþ£¬µ÷Óż¸¸ö³ÌÐòÔËÐвÎÊý¾ÍÄܸ㶨µÄ¡£ÎªÁËÌṩ¸üºÃµÄ·þÎñ£¬ÎÒÃÇÔÚÏÂÃæÈý¸ö·½Ïò×öÁËŬÁ¦£º
Ò»¡¢ÌáÉý·þÎñÖÊÁ¿
ÎÒÃÇÊ×ÏÈ×öÁËElasticsearchÓÅ»¯£¬Hardware LevelÓÉÓÚÎÒÃǵ±Ê±Äõ½»úÆ÷ûÓÐÑ¡ÔñÓàµØ£¬Ö»¿ªÆôÁ˳¬Ị̈߳»System
LevelµÄÓÅ»¯Èç¹Ø±Õswap£¬µ÷Õûmax open filesµÈ£»App LevelµÄÓÅ»¯ÈçJavaÔËÐл·¾³°æ±¾µÄÑ¡Ôñ£¬ES_HEAP_SIZEµÄÉèÖã¬ÐÞ¸Äbulk
indexµÄqueue sizeµÈ£¬ÁíÍ⻹ÉèÖÃÁËĬÈϵÄindex template£¬Ä¿µÄÊǸü¸ÄĬÈϵÄshard£¬replicaÊý²¢½«string¸ÄΪnot_analyzed£¬¿ªÆôdoc_valuesÒÔÓ¦¶Ôelasticsearch½ø³ÌOOM¡£ÏêϸµÄÓÅ»¯ÄÚÈݼûElasticsearch
Optimization Checklist¡£
Ëæ×ÅÓû§Êý¾ÝµÄ²»¶ÏÔö³¤£¬index¹ÜÀíÒ²³ÉÁË´óÎÊÌ⣬ÎÒÃÇÐèÒª»ùÓÚ´óÁ¿²»Í¬µÄÓû§ÅäÖö¨ÆÚµÄcreate¡¢optimize¡¢close¡¢delete¡¢snapshot²»Í¬µÄindex£¬ÔÚij¸ö·þÎñÆ÷ÉÏÊÖ¹¤ÅäÖÃcrontabÒÑÊDz»¿ÉÄÜ£¬¶øÇÒcronÊǵ¥µã¡£ÓÚÊÇÎÒÃÇ¿ª·¢ÁËÒ»¸ö¶ÀÁ¢µÄElasticsearch
Index¹ÜÀíϵͳ£¬¸ºÔðÒÔÉÏÈÎÎñµÄµ÷¶È¼°Ö´ÐС£Õâ¸ö¹ÜÀíϵͳ±³ºóʹÓõļ¼ÊõÊÇCelery£¬Ò»¸öÓÃPython¿ª·¢µÄÈÎÎñ¶ÓÁм°Ö´ÐÐϵͳ£¬ÌṩÁËÀàËÆcrontabµÄ¶¨Ê±ÈÎÎñÅäÖÃÓï·¨£¬²¢ÇÒʵÏÖÁË·Ö²¼Ê½£¬¿ÉÓÃÐÔ¸ü¸ßµÄ¼Ü¹¹¡£
×î½üµÄ·þÎñÉý¼¶£¬ÎÒÃÇΪElasticsearch°²×°ÁËHDFS Snapshot²å¼þ£¬¿ÉÒÔ¶¨ÆÚ½«index±¸·Ýµ½HDFS£¬Õâ¸ö¹¦ÄÜĿǰÖ÷ÒªÓÃÓÚ±¸·ÝKibanaµÄÅäÖÃindex£¬ÓÃÒÔ»Ö¸´Óû§²é¿´»òÅäÖÿÉÊÓ»¯½çÃæÊ±µÄ´íÎó²Ù×÷¡£
¼à¿Ø±¨¾¯·½Ã棬System LevelµÄ¼à¿Ø±¨¾¯£¨ÈçÓ²ÅÌÂú¡¢Ë𻵡¢·þÎñÆ÷å´»ú£©Ö±½ÓʹÓÃÁËÔÚÐÂÀËÄÚ²¿ÌṩÁ˶àÄê·þÎñµÄsinawatch£»App
Level£¨ÈçElasticsearch JVM Heap Usage¹ý¸ß£¬KibanaÄÜ·ñÕý³£·ÃÎÊ£¬Kafka
topicµÄconsumer offset lag£©£¬ÎÒÃÇ¿ª·¢Á˶ÔÓ¦µÄ¼à¿Ø±¨¾¯½Å±¾¡£User Level£¨ÈçÈÕÖ¾½âÎöʧ°ÜÊýÁ¿£©£¬Ö÷Ҫͨ¹ýelasticsearch
python clientÖ´ÐÐqueryȥͳ¼Æ»òËÑË÷¡£³£¼ûµÄ±¨¾¯ÊÇLogstash-filter-grok£¬logstash-filter-json½âÎöÈÕ־ʧ°Ü»áÊä³öµÄjsonÖÐÌí¼Ó_grokparserfailure¡¢_jsonparsefailure£¬ÎÒÃÇÖ´ÐÐqueryÅжϽâÎö´íÎóµÄÁ¿¡£
Ҫ˵Ã÷µÄÊÇ£¬MarvelÊÇElasticsearchºÜºÃµÄ¼à¿Ø¹¤¾ßºÍ²å¼þ£¬µ«ÊÇËüÃÇÊÇÉÌÒµÈí¼þ£¬ÎÒÃÇûÓвÉÓá£MarvelÊÇ»ùÓÚKibana×öµÄ£¬ÀïÃæ¶ÔÒ»Ð©ÖØÒªÖ¸±ê£¨Èçindex
bulk reject number£©µÄչʾºÜÓмÛÖµ¡£
¶þ¡¢ÔöÇ¿Ò×ÓÃÐÔ
ÔöÇ¿·þÎñµÄÒ×ÓÃÐÔ¾ÍÊǸøÓû§¸üºÃµÄÓû§ÌåÑ飬¼õÉÙÓû§µÄ±§Ô¹¡£ELKÐÔÄÜÓÅ»¯ÊÇÒ»·½Ã棬µ«ËüÊÇÔ¶Ô¶²»¹»µÄ£¬ÎÒÃÇÓöµ½µÄʵ¼ÊÇé¿öÊÇ£¬Óû§ÔÚÆäËû·½Ãæ±§Ô¹¸ü¶à£¬ÈçÏ£º
1£¬Óû§×îÏȱ§Ô¹µÄÊÇIP½âÎö³ÉµØÇø¡¢ISPÐÅÏ¢Ò»µã¶¼²»×¼£¬ÍêȫûÓвο¼ÒâÒå¡£
Èç¶ÔÓÚCDNÕâÖÖ·þÎñ£¬ÎÒÃǽâÎöÓû§IP²»×¼£¬¶¨Î»ÎÊÌâ±ßÔµ½Úµã´íÎó£¬ÎÊÌâû·¨²é£¬ÕâÊǰﵹæ¡£ÔÒò£ºLogstashĬÈÏ×Ô´øµÄIP¿âÊǹúÍâmaxmind¹«Ë¾µÄÃâ·Ñ°æ±¾£¬ÖйúµÄÐÅÏ¢ÓÈÆä²»×¼¡£½â¾ö·½°¸£ºÊ¹ÓÃÎÒÀ˽ÏнÏÈ«µÄIP¿âÉú³ÉÄÜÊÊÅämaxmind
geoip2 apiµÄ¶þ½øÖƸñʽIP¿â£¨maxmindDB£©£¬ÔÙ¿ª·¢logstash-filter-geoip2À´½âÎöIP¡£Êµ²â²»½öIP½âÎö׼ȷÂÊÓ빫˾IP¿âÏàͬÁË£¬½âÎöËÙ¶ÈÒ²Ìá¸ßÁË¡£
2£¬È»ºóÎÒÃÇÓëÓû§¶¼·¢ÏÖÈÕÖ¾½ÓÈëÁ÷³Ì¸´ÔÓ£¬¹µÍ¨À§ÄÑ¡£
ÈË×ö²»µ½»úÆ÷ÄÇÑù·ÖºÁ²»²î£¬ÓÐɶ˵ɶ¡£½ÓÈëÓû§ÈÕÖ¾µÄʱºò£¬ÀýÈç³£³£ÒòΪÓû§¶ÔÈÕÖ¾¸ñʽ±í´ïµÄ²»È«Ã棬ģÀâÁ½¿É£¬µ¼ÖÂÈÕÖ¾½âÎöʧ°Ü£¬·þÎñ¶Ô½ÓÈ˶à´ÎÖØÐ´ÅäÖᣴÓÓû§ÌáÐèÇóµ½Óû§¿ÉÒÔ¿´µ½Êý¾Ý¿ÉÊÓ»¯Ð§¹û»òËѵ½ÈÕÖ¾£¬ÐèÒª¼¸¸öСʱµ½¼¸Ìì¡£Ò»À´¶þÈ¥£¬Óû§ºÍÎÒÃǶ¼·³ÁË£¬Ö»ÄÜÇó±ä¡£Îª´Ë£¬ÎÒÃÇÕýÔÚÖð²½ÊµÏÖÓû§Êý¾Ý½ÓÈëµÄ×Ô¶¯»¯£¬¼õÉÙ½ÓÈëʱ¼äºÍ¹µÍ¨³É±¾Õâ¸ö¹ý³ÌÐèÒª3¸ö¹Ø¼ü£ºA.Óû§ÅäÖÃÈÕÖ¾¸ñʽµÄ½çÃæ£¬¾¡¿ÉÄܼò½à¼òµ¥£»B.¸ù¾ÝÓû§ÅäÖÃ×Ô¶¯Éú³Élogstash
config¡¢index¹ÜÀíÐèÒªµÄÅäÖã»C.×Ô¶¯²¿ÊðÅäÖã¨logstash configµÈ£©£¬´òͨÈÕÖ¾Á÷¡£
ºóÀ´ÎÒÃÇ×öÁËÒ»¸ö¼òµ¥µÄÓÃÀ´ÐÉÌÈÕÖ¾¸ñʽµÄ½çÃæ£º

ĿǰÎÒÃÇÒÑÍê³ÉÁËAµÄÒ»²¿·Ö£ºÓû§ÈÕÖ¾¸ñʽÅäÖýçÃæ£»BµÄÈ«²¿£º¿ª·¢ÁË×Ô¶¯Éú³Élogstash confµÄ
python api£»C¼´½«¿ªÊ¼£¬²¢ÇÒ¿¼ÂÇʹÓÃDocker¼¼ÊõΪÎÒÃÇÌṩһЩ±ãÀû¡£
3£¬²¿·ÖÊý¾Ý¿ÉÊÓ»¯ÐèÇóµÃ²»µ½Âú×㣬KibanaÅäÖÃÄѶȴó¡£
ÎÒÃÇÆð³õ²ÉÓùٷ½Kibana v3£¬Óû§Ìá³öµÄÀàËÆSQLÖеĶà¸ögroup
by£¬»°Ù·Ö±È£¬ÇóÖ¸¶¨Çø¼äÕ¼±ÈµÈ³£¼ûÐèÇóÎÞ·¨Âú×ã¡£Ö®ºóͨ¹ýÈý¶·´óÉñ(΢²©@argv)¶¨ÖưæµÄKibana
3Âú×ãÁËһЩÓû§ÐèÇó¡£Kibana 4µ®Éúºó£¬´úÂ뼸ºõÊǶÔKibana3µÄÖØÐ´£¬×öÁË´ó·ù¸Ä½ø£¬Í¨¹ýElasticsearch
AggregationµÄÇ¿´óÊý¾Ýͳ¼Æ¹¦Äܼ°Áé»îµÄÅäÖôÓKibana 3½â·Å³öÀ´¡£½üÆÚÎÒÃǽ«Ç¨ÒƵ½Kibana
4¡£
Èý¡¢Ìṩй¦ÄÜ
ÎÒÃÇΪElasticsearch°²×°Á˹úÄÚmedcl´óÉñ¿ª·¢µÄikÖÐÎķִʲå¼þelasticsearch-analysis-ik¡£Ö®Ç°±»·Ö´ÊΪ¡ºÖС»ºÍ¡º¹ú¡»µÄÖйú£¬ÏÖÔÚÖÕÓÚ¿ÉÒÔ±»µ±×öÒ»¸öÍêÕûµÄ´Ê»ã£¬·ñÔòËÑË÷¡ºÖйú¡»¡¢¡ºÃÀ¹ú¡»Ò²»á³öÏÖ¡£Î¢Å̵ÄһЩÀëÏßËÑË÷ÐèÇóʹÓÃÁËÎÒÃǵķþÎñ£¬Ò²Óõ½ÁËÖÐÎÄ·Ö´Ê£¬ElasticsearchµÄËÑË÷Ì츳Âú×ãÁËËûÃǵÄÐèÇ󣬼õÉÙÁËËûÃǵÄÍ´¿à¡£

ÎÒÃǾÀú¹ýµÄ¿ÓºÍ¿²¶ù£º
1£¬elasticsearch ½ø³ÌJVM Heap High Usage£¨ > 90% £©¡£
ºÜ³¤Ò»¶Îʱ¼ä£¬ÎÒÃǶ¼ÔÚÓ¦¶ÔJVM Heap High Usage£¬Ëû´øÁ˵ÄÎÊÌâÊÇOld GC´ÎÊý¶à£¬Ê±¼ä³¤£¬es½ÚµãƵ·±Í˳ö¼¯Èº£¬Õû¸ö¼¯Èº¼¸ºõÍ£Ö¹ÏìÓ¦¡£ÏÖÔÚÎÒÃǵÄÖ÷Òª²ßÂÔÊÇ¿ªÆôdoc_values£»ÏÞÖÆqueryÖ´ÐÐʱռÓõÄJVM
Heap size£»analyzed stringÖ»ÔÊÐí×öquery£¬²»ÔÊÐífacets»òÕßaggs£»¶¨ÆÚclose
Óû§²»ÐèÒªµÄindex¡£
2£¬Elasticsearch Query DSL¡¢Facets¡¢AggsѧϰÀ§»ó¡£
ÓÐÈËΪ´Ë¿ª·¢ÁËʹÓÃSQLÖ´ÐÐES QueryµÄ²å¼þ£¬Ò»¶¨³Ì¶ÈÉϼõÇáÁ˽øÈëÃż÷¡£ÎÒÃǸø³öµÄѧϰËûÃǵĽ¨ÒéÊǹ۲ìKibanaµÄRequest
Body»òÊÔÓÃMarvelµÄSenese²å¼þ£¬ËüÓÐ×Ô¶¯Íê³ÉQuery¡¢Facets¡¢AggsµÄ¹¦ÄÜ¡£ÁíÍâ×î³£ÓõÄqueryÊÇquery
string query£¬×î³£ÓõÄaggsÊÇTerms¡¢Date Histogram£¬¿ÉÒÔÓ¦¸¶´ó²¿·ÖÐèÇó¡£
3£¬logstash²»¹¤×÷¡£
·Ç¹Ù·½µÄÎÊÌâ²å¼þ£¬¼°Ê¹ÓÃlogstash-filter-rubyʱδ¿¼Âǵ½µÄÒì³£µÈ£¬µ¼ÖÂLogstashÔËÐÐʱ¹¤×÷Ị̈߳¨worker
thread£©Òì³£Í˳ö£¬Logstash½©ËÀ¡£ÎÒÃǵĽ¨ÒéÊǾ¡¿ÉÄܲ»ÒªÔÚconfigÖÐʹÓÃlogstash-filter-ruby£¬¾¡Á¿Ê¹Óùٷ½²å¼þ¡£²»¹ýÎÒÃÇÒ²Óöµ½¹ý¸´ÔÓµÄÈÕÖ¾£¬Ð´¹ý250ÐÐ+µÄconfig£¬Óþ¡ÁËruby
filter¡£µ±Ç°Î´·¢ÏÖLogstashÓкõijÉÊìµÄ¼à¿Ø·½°¸£¬LogstashµÄÄÚ²¿×´Ì¬Ò²»ñÈ¡²»µ½¡£ÎÒÃÇĿǰͨ¹ý¼ä½ÓµÄ¼à¿ØKafka
topic consumerÊÇ·ñÂäºó»òelasticsearch indexing rateÀ´¼ìÑélogstashµÄ¹¤×÷Çé¿ö¡£
4£¬KibanaûÓÐÓû§µÄ¸ÅÄ²»Í¬Óû§µÄÊý¾ÝÎÞ·¨¸ôÀë¡£
¶à¸öÓû§¹²ÏíµÄKibana Dashboard£¬Îó²Ù×÷»òÎóɾʱ³£Ó°ÏìÆäËûÓû§£¬±£´æµÄdashboardÌ«¶à£¬ÕÒµ½Ìض¨µÄdashboardºÜÀ§ÄÑ¡£¹Ù·½µ½Ä¿Ç°ÎªÖ¹£¬Î´ÔÚÕâ·½Ãæ×ö¹ý¸Ä½ø¡£Óкܶà·Ç¹Ù·½µÄ¸Ä½ø£¬ÎÒÃÇÒ²Ôø¾ÓùýÈý¶·´óÉñ¶¨ÖƵÄKibana3£¬Ò²¶ÔKibana
index×öÁËsnapshot´¢´æµ½HDFSÀïÃæ¡£
5£¬ÓëÓû§¹µÍ¨³É±¾¸ß¡£
ÓëÎÒÃǵÄÓû§ÐÉÌÈÕÖ¾¸ñʽ£¬Êý¾Ý¿ÉÊÓ»¯ÅäÖÃʱ£¬ÓÉÓÚÈ˵IJ»È·¶¨ÐÔÈÝÒ×Ôì³É¶à´ÎÀ´»ØÈ·¶¨ºÍÐ޸ģ¬Ð§ÂʵÍÏ¡£ÎÒÃDZϾ¹ÊÇÌṩÈÕÖ¾·ÖÎö·þÎñµÄ£¬²»¸øÓû§×öÈÕÖ¾ÔËά£¬ËùÒÔ½üÆÚÒ²ÔÚ̽Ë÷ͨ¹ýÈÕÖ¾½ÓÈë×Ô¶¯»¯¡¢ÍƼöÓû§Ìṩ¸øÎÒÃÇjson¸ñʽÊý¾Ý£¬¶¨ÆÚ×éÖ¯Óû§µÄKibanaÅàѵÀ´¼õÉÙ¹µÍ¨³É±¾¡£
DockOne¼¼Êõ·ÖÏí£¨Ê®Èý£©£ºÊ®¸öÎÊÌâ´øÄãÁ˽âWindows Docker
΢ÈíÔÚ5Ô·ÝBuild´ó»áÉϵĹٷ½Ëµ·¨£¬ËµÊÇÕâ¸öÏÄÌì»á·Å³öWindows
Server ContainerµÄ²âÊÔ°æ¡£Ò²¾ÍÊÇ˵£¬Ä¿Ç°ÎÒÃÇ»¹ÎÞ·¨¿´µ½Windows DockerµÄ²âÊÔ°æ±¾£¬ÎÞ·¨Ö±½ÓÉÏÊÖ²âÊÔ¡£
΢ÈíÔÚ5Ô·ÝBuild´ó»áÉϵĹٷ½Ëµ·¨£¬ËµÊÇÕâ¸öÏÄÌì»á·Å³öWindows
Server ContainerµÄ²âÊÔ°æ¡£Ò²¾ÍÊÇ˵£¬Ä¿Ç°ÎÒÃÇ»¹ÎÞ·¨¿´µ½Windows DockerµÄ²âÊÔ°æ±¾£¬ÎÞ·¨Ö±½ÓÉÏÊÖ²âÊÔ¡£½ÓÏÂÀ´ÎҾʹó¼Ò¹ØÐĵÄÊ®´óÎÊÌâ½øÐнéÉÜ£º
1. Windows DockerºÍHyper-VÓÐÉ¶Çø±ð£¿
Hyper-VºÍVMware/Xen/KVMµÈÀàËÆ£¬¶¼ÊÇÓ²¼þÐéÄ⻯£¬°²È«µ«±¿ÖØ¡£
Windows DockerÊÇOSÐéÄ⻯¼¼Êõ£¬¾ß±¸Ò»¶¨µÄ¸ôÀëÄÜÁ¦£¬ÐÔÄܸüºÃ¡¢ÈÝÒ×ÒÆÖ²¡£
Á½Õß²»ÊÇ»¥ÏàÈ¡´úµÄ¹ØÏµ¡£
×¢Ò⣺Windows Docker²¢²»ÊÇÎÒÃÇÔÚDocker 1.6ʱ¼ûµ½µÄWindows
Docker Client£¬Ò²²»ÊÇBoot2dockerÕâ¸öWindowsϵÄlinuxÐéÄâ»ú£¬¶øÊÇÕæÕýµÄWindows°æ±¾µÄDocker¡£ÆäʵÆäÕýʽÃû³Æ²¢²»½ÐDocker£¬¶øÊǽÐ×öWindows
Server Container£¬»¹ÓÐHyper-V Container£¬ÓÐ2¸ö²úÆ·£¬ÆäÖÐWindows
Server ContainerÀàËÆÓÚlinux Docker£¬¶øHyper-V ContainerÓÐЩÀàËÆÓÚclear
linux»òÕßHyper Docker¡£
ÕâÊÇÒòΪDockerÊÇÉ̱êÃû³Æ£¬Î¢Èí²»ÄÜÖ±½ÓÄÃÀ´Ê¹Óá£
2. Windows DockerºÍSoftgrid(APP-V)/ThinstallµÈÓÐÉ¶Çø±ð£¿
DockerÊÇOSÐéÄ⻯£¬Ö÷Òª³¡¾°ÊÇ·þÎñ¶ËÓ¦Óã¬ÕâЩÈÝÆ÷(Ó¦ÓÃ)Ö®¼äͨ¹ý±ê×¼µÄÍøÂç½Ó¿Ú½øÐÐͨÐÅ£¬ºÃÏñÐéÄâ»úÒ»Ñù¡£
SoftgridÊÇÓ¦ÓóÌÐòÐéÄ⻯£¬Ö÷ÒªÓÃÓÚ¿Í»§¶ËÓ¦Óò¿Êð¡£ÀýÈçOffice£¬ÕâЩӦÓÃÔÚͬһ¸ö»á»°ÀïÔËÐУ¬ÍêÈ«¾ÍÊÇ´«Í³µÄÓ¦Ó㬱˴ËÖ®
¼ä¿ÉÒÔ½øÐнø³Ì¼äͨÐÅ£¬ÀýÈçWord¿ÉÒÔOLEµ÷ÓÃExcelµÄ±íµ¥µÈµÈ¡£²»Í¬µÄ½ø³Ì£¬¿´µ½µÄÎļþϵͳ²»»á¸ôÀë¡£ÊÊÓÃÓÚÅúÁ¿²¿Êð¿Í»§¶ËÓ¦Óá£
3. ÈÝÆ÷ºÍɳºÐÊÇʲô¹ØÏµ£¿
Ôø¾¿´µ½Ò»¾äºÜ°ôµÄÆÀÓ±ØÐë·ÖÏí¸øÖîλ£º
Sandboxing is focused on just security with code isolation.
Containers have some security code isolation, but this
is not the only or primary purpose. One way to think
about containers is as a layered/quarantined filesystem
which makes it quick/easy/lightweight to run an application
and also makes the application (in the container) very
portable.
´ÓÏÂͼÖÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬ÔÚWindows 10ÀIEµÄ¼ÌÈÎÕßEdgeä¯ÀÀÆ÷¾Í²ÉÓÃÁËɳºÐ¼¼Êõ¡£

ͬÑùÔÚ±£»¤Ä£Ê½ÏÂÔËÐеÄOfficeÎĵµ£¬Ò²ÔËÐÐÔÚ É³ºÐÀï¡£ÈçÏÂͼËùʾ¡£

¶øÈÝÆ÷£¬Ôò»¹±ØÐëÒªÔÚÒÆ¶¯ÄÜÁ¦ÉÏÓÐËù¿¼Á¿£¬È·±£ÈÃÓ¦Óã¬Ò²Äܱä³É°´ÐèµÝ½»µÄ¶¯Ì¬·þÎñ¡£ÒÔǰµÄÓ²¼þÐéÄ⻯£¬Äܽ«OS¡¢AppµÈ±ä³ÉÎĵµ£¬´Ó¶ø°Ñ·þÎñÆ÷×ÊÔ´±ä³É°´ÐèµÝ½»µÄ·þÎñ£¬ÏÖÔÚWindows
DockerºÍlinuxÒ»Ñù£¬Ò²Äܱä³Éimage£¬±ä³ÉÎĵµ£¬±ä³É°´ÐèµÝ½»µÄ¶¯Ì¬·þÎñ¡£
4. Windows DockerºÍÆäËûOSÐéÄ⻯¹¤¾ßÖ®¼äÊÇʲô¹ØÏµ£¬ÀýÈçºÜÔç¾ÍÌýÎŵÄVPSµÈ£¿
´Ó¼¼Êõ½Ç¶È¿´£¬µ×²ãÔÀí´óͬСÒì¡£¿´Í¼°É¡£

DockerºÍÆäËûOSÐéÄ⻯¼¼ÊõÒ»Ñù£¬¼¼ÊõʵÏÖ´óÖ²¶à¡£¹Ø¼ü¿´ËÄÜ´ø¶¯Éú̬Ȧ£¬Äܹ»Ó®µÃÆäËû³§É̵ÄÖ§³Ö¡£Í¬Ê±DockerµÄ·Ö²ãÎļþ
ϵͳʵÏÖ£¬Ò²ÊÇÆäÌØ±ðÒýÈËÈëʤµÄµØ·½¡£Õâ¸ö½ØÍ¼µÄÏÂÔØµØÖ·ÔÚÕâÀï¡£
5. Windows Docker·Ö²ãÎļþϵͳ£¿
ÏÈ¿´¿´LinuxµÄʵÏÖ¡£DaoCloudµÄ´óÅ£ËïºêÁÁÀÏʦָ³ö£º¼ÙÉèÎÒÃÇÏÂÀÁËUbuntu:14.04Ó³Ïñ£¬²¢Í¨¹ýÃüÁîdocker
run ¨Cit ubuntu:14.04 /bin/bash½«ÆäÆô¶¯ÔËÐС£ÔòDockerΪÆä´´½¨µÄrootfsÒÔ¼°ÈÝÆ÷¿É¶ÁдµÄÎļþϵͳ¡£²Î¿¼ÕâÕŽØÍ¼

´ÓÈÝÆ÷µÄÊÓ½ÇÀ´¿´£¬ËäȻֻÓÐÒ»¸öÂß¼µÄÍêÕûÎļþϵͳ£¬µ«¸ÃÎļþϵͳÓÉ¡°2²ã¡±×é³É£¬·Ö±ðΪ¶ÁдÎļþϵͳºÍÖ»¶ÁÎļþϵͳ¡£ËïÀÏʦµÄÐÛÎÄÁ´½ÓÔÚ´Ë¡£
Windows Docker²ÉÓÃÀàËÆµÄ·Ö²ãÎļþϵͳ¡£²Î¿¼ÏÂͼ¡£

Windows Docker²ÉÓÃNTFSÎļþϵͳµÄÖØ½âÎöµã¼¼Êõ£¨reparse point£©£¬¶¥²ãµÄɳºÐ²ã(sandbox
layer)ÊǿɶÁдµÄ£¬Ö»ÔÊÐí¸ÃÈÝÆ÷×Ô¼ºÕ¼Ó㬶øÆäËû²ã ÔòÊÇÖ»¶ÁµÄ¡£ÔÚÕâÕÅͼÖУ¬µ×²ãµÄ»ù´¡OS²ãºÍÖмäµÄÓ¦ÓóÌÐò¿ò¼Ü²ã¶¼ÊÇÖ»¶ÁµÄ£¬¶ø¶¥²ãµÄɳºÐ²ãÔò¿É¶Áд£¬ÔÚ
ÈÝÆ÷µÄÊӽǿ´À´£¬Ëü¶ÀÕ¼ÁËÍêÕûµÄÎļþϵͳ¡£
ÕâÓеãÀàËÆÓÚHyper-VµÄ²îÒì´ÅÅÌÁ´£¨¶¥²¿µÄ×ÓÅ̲ÅÄܶÁд£¬ÆäÉÏ·½µÄËùÓи¸Å̺ÍBaseÅ̶¼ÊÇÖ»¶ÁµÄ£©¡£
Windows DockerµÄ·Ö²ãÎļþϵͳ£¬ÎÒÊǽ«ÆäÀí½âΪÀàËÆ·ûºÅÁ´½Ó(½ö½öÓÃÀ´°ïÖúÀí½â£¬²»ÒªÕæµÄÇáÐÅ)£¬µ±¶¥²ãµÄɳºÐ²ã´ò¿ªÎļþʱ£¬
Ï൱ÓÚ´ò¿ªÒ»¸ö·ûºÅÁ´½Ó£¬¶ø³¢ÊÔÐÞ¸Äʱ£¬ÔòCOW£¨Copy on write£©¡£µ½µ×²ÉÓÃʲôµ×²ãÎļþϵͳ¼¼Êõ£¬ÈçºÎʵÏÖ¶à¸öÈÝÆ÷²¢·¢·ÃÎÊÖ»
¶ÁLayerÎļþµÄÐÔÄÜ£¬ÈçºÎcacheµÈ£¬Ä¿Ç°Ò»¸Å²»ÖªµÀ¡£sorry£¡
6. Windows DockerµÄÎļþϵͳ¸ôÀë
ǰ¶Îʱ¼äµÄÈÈÃÅ»°Ì⣬³ýÁË¹ÉÆ±£¬¾ÍÒªËãÊÇijÔÚÏßÂÃÓÎÉ̵ı¯¾çÁË£¬·»¼äÉõÖÁ´«ÎÅÆäΪÊý¾ÝÎóɾ£¡£¡£¡
Óпͻ§Ôø¾Îʵ½£ºDockerÄÜ·ñ±ÜÃâÕâÖÖ±¯¾ç£¿ÆäʵDockerºÍÐéÄâ»úÒ»Ñù£¬¶¼Ìæ´ú²»ÁËÈÝÔֺͱ¸·ÝµÄ»úÖÆ¡£²»¹ýDockerȷʵÓÐÎļþϵͳ¸ôÀë
µÄÄÜÁ¦¡£ÎÒÔÚBuild´ó»áÀï¿´µ½£¬ÑÝʾÕßÔÚWindows ContainerÀïÖ´ÐÐɾ³ýCÅ̸ùĿ¼ÏÂËùÓÐÎļþºÍ×¢²á±í¼üÖµ£¬¾¡¹ÜÕâ¸öÈÝÆ÷±»»ÙÁË
£¬µ«ÊǸù±¾²»»áÓ°ÏìÆäËûÈÝÆ÷£¬¸ü²»»áÓ°ÏìÖ÷»ú£¬ÕâºÍlinux DockerÒ»Ñù¡£¿´Í¼Æ¬°É¡£

7. IPC¸ôÀë»úÖÆ
ÔÚÁíһλËïÀÏʦ£¬Ëィ²¨ÀÏʦµÄÎÄÕÂÀïÎÒÃÇ¿´µ½£¬linux Docker²ÉÓÃÁËIPC¸ôÀë»úÖÆ¡£¶øWindows
DockerÒ²²ÉÓÃÀàËÆµÄ¸ôÀë»úÖÆ¡£Õâ¸ö»úÖÆ¾ÍÊÇËùνµÄ»á»°¸ôÀë¡£
ÄÇôWindowsÀÄÄЩ¼¼Êõ»áÓõ½»á»°¸ôÀëÄØ£¬ÅèÅè¼òµ¥×ܽáһϣº
Ê×ÏÈÊÇÖÕ¶Ë·þÎñ£¬»á»°¾ÍÊÇΪÁËÕâ¸ö¼¼Êõ¶ø·¢Ã÷µÄ¡£
¿ìËÙÓû§Çл»£¬ÕâºÍÖÕ¶Ë·þÎñʵ¼ÊÉÏÊÇÒ»Ñù£¬Ö»²»¹ý¿ìËÙÓû§Çл»Ö»»áÌṩ×îеǼÓû§µÄ×ÀÃæ£¨shell£©¡£
´ÓWindows Vista¿ªÊ¼£¬ÏµÍ³¼¶½ø³ÌºÍ·þÎñ£¬ÔËÐÐÔڻỰ0ÀÕâ¾ÍÊÇΪʲôÎÒÃÇÎÞ·¨ÔÙÓÃ"mstsc
/console"ÃüÁîÀ´µÇ¼µ½·þÎñÆ÷µÄ¿ØÖÆÌ¨»á»°¡£
´ÓWindows 8¿ªÊ¼£¬Metro Application£¨Æ½°åרÓõÄÓ¦Óã©£¬Ò²²ÉÓûỰ¸ôÀë¼¼Êõ¡£
Ò²¾ÍÊÇ˵£¬»á»°ÊÇΪÁËÖÕ¶Ë·þÎñÕâÖÖ¶àÓû§»úÖÆÀ´×¼±¸µÄ¡£
ÓÃSysinternals Suite¹¤¾ß°üÀïµÄWinobjÕâ¸öС¹¤¾ß£¬¿ÉÒÔ¿´µ½»á»°¸ôÀëµÄЧ¹û¡£

ÔÚͼÖпÉÒÔ¿´µ½£¬²»Í¬»á»°ÀïÓµÓв»Í¬µÄ¶ÔÏóÃüÃû¿Õ¼ä£¬ÀýÈ粻ͬÈÝÆ÷£¬ÓÐ×Ô¼º¶ÀÁ¢µÄ´°¿ÚÕ¾(ÖÕ¶Ë·þÎñ£¬ÆäËû³¡ºÏÖ»Óе±Ç°µÇ¼ÓÃ
»§²ÅÓÐWinsta´°¿ÚÕ¾)£¬BaseNamedObjectsĿ¼£¬°üº¬Ê¼þ¡¢»¥³âÐźźÍÄÚ´æ¶ÎµÈ¶ÔÏó¡£²»Í¬»á»°ÀïµÄÓ¦Ó㬲»Äܹ»·¢ËÍ´°¿ÚÏûÏ¢£¨Window
Message£¬ÒÔ·ÀÖ¹·ÛËé¹¥»÷£©¡£
Windows DockerÑØÓÃÁ˻Ự¸ôÀë¼¼Êõ£¬²»Í¬ÈÝÆ÷ÔÚͬһ¸öWindowsÖ÷»úÉÏ·ÃÎÊͬһ¸öÃüÃû¶ÔÏ󣬾Ͳ»»áµ¼Ö³åÍ»¡£
ÔÚBuild´ó»áµÄÑÝʾÀÆô¶¯ÁË2¸öÈÝÆ÷£¬¶¼ÊÇ´Óͬһ¸öWindows Server
CoreÓ³ÏñÀï´´½¨³öÀ´¡£ÔÚÆäÖÐÒ»¸öÈÝÆ÷ÀïÔËÐÐtasklistÃüÁ ÏÔʾµ±Ç°µÄ½ø³ÌÐÅÏ¢£¬°üÀ¨»á»°¡£

ÔÚÕâ¸ö½ØÍ¼ÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½¸ÃÈÝÆ÷ÔËÐÐÔڻỰ14Àï¡£
ÔÚÁíÍâÒ»¸öÈÝÆ÷ÀïͬÑùÔËÐÐtasklist¡£¿ÉÒÔ¿´µ½¸ÃÈÝÆ÷ÔËÐÐÔڻỰ15Àï¡£

ÀàËÆÓÚÁ½¸öÈÝÆ÷£¬·Ö±ðͨ¹ýÔ¶³Ì×ÀÃæ·ÃÎÊÒ»Ñù£¬Äõ½²»Í¬µÄ»á»°£¨session£©£¬´Ó¶ø»ñµÃnamespace¸ôÀëÄÜÁ¦¡£
´ÓÁ½¸ö½ØÍ¼ÀïÄÜ¿´µ½Ê²Ã´£¿ÆäÖÐSystemºÍ¿ÕÏнø³ÌÊǹ²ÏíµÄ£¬Õâ˵Ã÷DockerÊǹ²ÏíËÞÖ÷»úµÄÄںˡ£µ±È»½ø³ÌºÅ¶¼Ò»Ñù²»´ú±íʲô£¬Òò
ΪËùÓÐWindowsÀÕâÁ½¸ö½ø³ÌµÄPID¶¼Ò»Ñù£¡¶øÃ¿¸öÈÝÆ÷¶¼ÓÐ×Ô¼ºµÄsvchost½ø³Ì¡¢csrss½ø³ÌºÍwininit½ø³ÌµÈ¡£ÕâЩ½ø³Ì¶¼ÊÇ
per-sessionµÄ¡£
8. Windows DockerÄÜÏÔʾͼÐλ¯½çÃæÂð£¿
´«Í³µÄWindowsÓ¦Óôó¶àÊÇÓÐGUIµÄ£¬ËùÒÔÕâЩӦÓÿÉÄÜÐèҪͨ¹ýͼÐλ¯·½Ê½½øÐÐÔ¶³Ì²Ù¿Ø¡£Windows
Docker»áͨ¹ýÈÝÆ÷µÄRDP·þÎñÁ¬ ½ÓÉÏÀ´¡£

ͼÖÐÏÔʾͨ¹ýRDP·þÎñÁ¬½Óµ½Process ExplorerÕâ¸ö´øGUIµÄϵͳ½ø³Ì¹ÜÀí¹¤¾ß¡£ÓÉÓÚRDPʵ¼ÊÉϾÍÊÇÖÕ¶Ë·þÎñ£¬ËùÒÔProcess
ExplorerÕâ¸öͼÐλ¯½ø³ÌÏ൱ÓÚÓÖÔËÐÐÔÚÒ»¸öеĻỰÀïÁË£¡Õâ¸ö˵ÆðÀ´ÓеãÞÖ¿Ú¡£

´ÓÕâÕÅͼÀïÎÒÃÇ¿ÉÒÔ¿´³ö£¬ÓÉÓÚProcess ExplorerÊÇÔÚÖն˻ỰÀï´ò¿ªµÄ£¬ËùÒÔÎÒÃÇ¿ÉÒÔÔÚÈÝÆ÷µÄÈÎÎñ¹ÜÀíÆ÷Àï¿´µ½ÓÐÁ½¸ö»á»°£º
1.»á»°14ÊÇDocker×Ô¼ºµÄ»á»°£¬ÔÚÕâÀï³¢ÊÔÆô¶¯Process Exploer£¬µ«ÊÇɶ¶¼¿´²»µ½£¬Õâ¸öÊÇÕý³£µÄ£¬ÒòΪͼÐλ¯½çÃæÎÞ·¨ÔÚDocker¿Í»§¶Ë
ÀïÏÔʾ£¬LinuxÒ²²ÉÓÃÀàËÆVNC/RDPµÈ°ì·¨¿ª×¨ÃŵÄͨµÀ·ÃÎÊ¡£
2.¶ø»á»°15ÔòÊÇͨ¹ýRDP·ÃÎʵĻỰ
9. ´´½¨Windows Docker
ºÍlinux Docker£¬Windows Docker£¨¼ÇסÓÐÁ½¸ö²úÆ·£¬Windows server
containerºÍhyper-v container£©Íêȫ֧³Ölinux DockerµÄ½Ó¿ÚºÍ¹¤¾ß¼¯¡£¾ÍºÃ±ÈµçÊÓ»úºÍͶӰÒÇ£¬ÆäÄÚ²¿ÊµÏÖ¹ÌÈ»´óÏྶͥ£¬È»ÆäºÍµçÄÔµÄÖ®¼äµÄ½Ó¿ÚÔò¼¸ºõÍêȫһÖ¡£
´´½¨Windows ÈÝÆ÷£¬ºÍlinuxÒ»Ñù£¬ÓÐDocker file£¬Ö±½ÓDocker build£¬Éú³ÉImage¡£
Docker FileµÄ¼òµ¥·¶Àý£º
From Windowsservercore WORKDIR \ COPY bin\Debug\ \Deapp CMD \DemoApp\Demoapp.exe |
½ñºó΢ÈíµÄWindows azureÔÆ£¬¿ÉÒÔÖ±½ÓÖ§³ÖDocker£¬²»¹ÜÊÇWindows»¹ÊÇlinux£¬¶¼¿ÉÒÔÖ±½ÓÓÃ×îеÄvisual
studio°Ñ´úÂëÇ©µ½azureµÄlinux»òÕßWindowsÈÝÆ÷Àï¡£µ±È»Ò²¿ÉÒÔÖ±½ÓÓÃazureµÄvisual
studio online·þÎñ¡£
10. Windows Docker²»Í¬°æ±¾£¬ÒÔ¼°linuxÖ®¼äÒìͬ
Ê×ÏÈ·ÖÏíÁéÈ¸ÔÆÀÏ´ó×ó«hÀÏʦµÄPPT¡£

¿ÉÒÔ¿´µ½sessionºÍJO£¬ÊÇWindows DockerµÄ¸ôÀë¼¼Êõ£¬Í¬Ê±JO¼¼ÊõÀàËÆÓÚlinuxÀïµÄCGroup¡£¿ÉÒԲο¼chromeµÄÏà¹Ø¼¼Êõ¡£chrome¾ÍÊÇÓõ½Á˲»ÉÙWindowsµÄ¸ôÀë¼¼Êõ¡£
ÔÙ¿´Ò»ÕÅͼƬ¡£

´ÓÕâÀï¿ÉÒÔ¿´³öWindows Docker²»Í¬°æ±¾ºÍlinuxÖ®¼äµÄÒìͬµã¡£ÆäÖÐHyper-V ContainerµÄ°²È«ÄÜÁ¦¸ßÓÚWindows
Server Container¡£
Windows Server ContainerºÍHyper-V ContainerÖ®¼äµÄ²îÒ죬¿ÉÒԲο¼Õâ¸öͼƬ¡£×î´óµÄ²î±ðÔÚÓÚ£¬hyper-v
containerÖ§³Ö¶à×â»§°²È«ÄÜÁ¦£¬Í¬Ê±Ö§³Ö¼ÓÓò¡£¶øWindows server containerÔò²»ÄܼÓÓò£¬ÕâÒâζ×ÅÈç¹ûÕâ¸öÓ¦ÓÃÐèÒª¼ÓÓòµÄ»°£¬ÔòÎÞ·¨ÓÃWindows
Server Container¡£

|