±¾ÎĵÄÄ¿µÄ
DockerÔÉúÌṩÁ˶àÖÖ´æ´¢Çý¶¯£¬Óû§ÐèÒª×öµÄÊǽáºÏ×Ô¼ºµÄ³¡¾°Ñ¡ÓÃÆäÖÐÖ®Ò»¡£Ã»ÓÐÒ»ÖÖ´æ´¢Çý¶¯ÊÇÊʺÏËùÓг¡¾°µÄ¡£±¾ÎÄÏȼòµ¥½éÉÜÈçϼ¸ÖÖ´æ´¢Çý¶¯£ºAUFS¡¢DeviceMapper¡¢Btrfs¡¢overlayFs¡¢ZFS£¬Ö®ºó˵Ã÷PPTVÔÚ¹¹½¨DCOSµÄÑ¡Ð͹ý³Ì¡£
ÈçºÎÖ¸¶¨´æ´¢Çý¶¯
Óû§¾ö¶¨Ê¹ÓÃÄÄ¿îÇý¶¯£¬ÒªÔÚDockerÊØ»¤½ø³ÌÆô¶¯Ê±Ö¸¶¨£¬µ±È»Ö¸¶¨µÄÇý¶¯±ØÐë±»µ×²ã²Ù×÷ϵͳ֧³Ö¡£Èç¸ü»»´æ´¢Çý¶¯£¬ÐèÖØÆôÊØ»¤½ø³Ì¡£Ö¸¶¨´æ´¢Çý¶¯µÄ·½·¨¿É²Î¿¼Docker¹ÙÍø£¬²Ù×÷¼òµ¥·½±ã¡£¸÷´æ´¢Çý¶¯¶¼·â×°ÁËͳһ½Ó¿Ú¹©ÊØ»¤½ø³Ìµ÷Óã¬Ò»µ©Íê³É³õʼ»¯£¬´æ´¢Çý¶¯µÄ²îÒì¶ÔÊØ»¤½ø³ÌÀ´ËµÊÇ͸Ã÷µÄ¡£
Copy On Write¼¼Êõ
ÏëÒªÓÐЧµÄʹÓô洢Çý¶¯£¬ÐèÒªÁ˽âDockerÈçºÎ´æ´¢¾µÏñÒÔ¼°ÈÝÆ÷ÈçºÎʹÓþµÏñ¡£Docker¾µÏñº¬ÓÐÆô¶¯DockerÈÝÆ÷ËùÐèµÄÎļþϵͳ½á¹¹¼°ÆäÄÚÈÝ¡£ÔÚ´«Í³µÄLinux²Ù×÷ϵͳÄÚºËÆô¶¯Ê±£¬Ê×ÏȹÒÔØÒ»¸öÖ»¶ÁµÄrootfs£¬µ±ÏµÍ³¼ì²âÆäÍêÕûÐÔºó£¬ÔÙ½«ÆäÇл»Îª¶Áдģʽ¡£¶øÔÚDocker¼Ü¹¹ÖУ¬µ±Docker
daemonΪDockerÈÝÆ÷¹ÒÔØrootfsʱ£¬ÑØÓÃÁËLinuxÄÚºËÆô¶¯Ê±µÄ·½·¨£¬¼´½«rootfsÉèΪֻ¶Áģʽ£¬ÔÚ¹ÒÔØÍê±ÏÖ®ºó£¬ÔÚÒÑÓеÄÖ»¶ÁrootfsÉÏÔÙ¹ÒÔØÒ»¸ö¶Áд²ã¡£ÕâÑù¡£¿É¶Áд²ã´¦ÓÚDockerÈÝÆ÷ÎļþϵͳµÄ×î¶¥²ã£¬ÆäÏ¿ÉÄܹÒÔØ¶à¸öÖ»¶Á²ã£¬Ö»ÓÐÔÚDockerÈÝÆ÷ÔËÐйý³ÌÖÐÎļþϵͳ·¢Éú±ä»¯Ê±£¬²Å»á°ÑÎļþ¿½±´µ½¶Áд²ãÔÙÐ޸ģ¬ÕâÑùµÄ¼¼Êõ±»³ÆÎªÐ´Ê±¸´ÖÆ£¨Copy
On Write£©¡£´æ´¢Çý¶¯ÌṩÁ˽ӿÚÖ§³Ö¾µÏñ·Ö²ãÓëдʱ¸´ÖÆ»úÖÆ¡£
AUFS
DockerÍŶÓ×ʼÔÚdotCloudÄÚ²¿±ãʹÓÃAUFSÀ´ÔËÐÐÈÝÆ÷£¬Òò´ËAUFSÓÐ×µÄÀúÊ·£¬Ò²¾ÍÓµÓнÏΪ·á¸»µÄÔËά¾Ñé¡£AUFS²ã²ã¶Ñµþ¶à¸öÎļþϵͳ²ã£¬È»ºóÿһ²ã¶¼¶ÔÍ⹫¿ªÒ»¸öµ¥¶ÀµÄ¹ÒÔØµã¹©·ÃÎÊ¡£Ëüÿһ´ÎµÄ²éÕÒ×ÜÊÇÏÈ´Ó×î¶¥²ã¿ªÊ¼£¬µ±Ä³¸öÎļþÐèÒª×÷¶Áд²Ù×÷ʱ¸ÃÎļþ½«»á±»¸´ÖƵ½×î¶¥²ã£¬Òò´ËÔÚÐÔÄÜ·½ÃæµÄÆ¿¾±Ö÷ÒªÔÚÓÚÐèҪдÈë´óÎļþµÄ³¡¾°¡£²»¹ýAUFS´æ´¢Çý¶¯×îÖ÷ÒªµÄÎÊÌ⻹ÊÇAUFSÎļþϵͳ±¾ÉíûÓб»ÄÉÈëÖ÷Á÷µÄLinuxÄں˰汾¡£

ͼ1 AUFS¾µÏñ²ãÈÝÆ÷²ã
DeviceMapper
DeviceMapperʹÓÃÔ¤·ÖÅä¼¼ÊõÀ´ÊµÏÖ¾µÏñ·Ö²ã£¬DeviceMapperµÄдʱ¸´ÖƼ¼ÊõÊÇ»ùÓÚ¿é¼¶±ðµÄ£¬²»Í¬ÓÚAUFS»ùÓÚÎļþ¼¶±ð¡£µ±DockerÊØ»¤½ø³ÌÆô¶¯Ê±£¬»á´´½¨Ô¤·ÖÅä»úÖÆËù±ØÐëµÄÁ½¸ö¿éÉ豸£ºÓÃ×÷´æ´¢³ØµÄÊý¾ÝÉ豸ºÍά»¤ÔªÊý¾ÝµÄÉ豸£¬ÊØ»¤½ø³ÌÔÚÔ¤·ÖÅäµÄ´æ´¢³ØÉÏ´´½¨Ò»¸ö»ù´¡É豸£¬ËùÓÐеľµÏñ²ã¶¼ÊÇ»ù´¡É豸µÄÒ»¸ö¿ìÕÕ£¬»ù´¡É豸µÄ´óСĬÈÏΪ10GB£¬¿ÉÒÔÔÚÊØ»¤½ø³ÌÆô¶¯Ê±Í¨¹ýdm.basesize²ÎÊýÀ´ÐÞ¸ÄÕâÒ»ÅäÖá£DeviceMapperÓÐÁ½ÖÖģʽ£¬Ä¬ÈÏΪloopģʽ£¬Éú²ú»·¾³½¨ÒéʹÓÃdirect-lvmģʽ£¬ÔÒòΪloopģʽÊÇ»ùÓÚÁ½¸öÏ¡ÊèÎļþ´´½¨ÐéÄâµÄ¿éÉ豸µÄ£¬Ó°ÏìÐÔÄÜ¡£

ͼ2 DeviceMapper¾µÏñ²ãÈÝÆ÷²ã
Btrfs
BtrfsÒÔ¿éΪµ¥Î»´æ´¢Êý¾Ý£¬Ò»¸ö¿é¾ÍÊÇÒ»¶ÎÔʼ´æ´¢¡£DockerÀûÓÃBtrfsµÄ×Ó¾íÌØÐÔ£¬Ã¿Ò»¸öд´½¨µÄÈÝÆ÷¶¼»á±»·ÖÅäÒ»¸öеÄBtrfs×Ó¾í£¬Èç¹û´æÔÚ¸¸¾µÏñ²ã£¬ÄÇôËü»áÒÔ¸¸¾µÏñ²ã×Ó¾íµÄÒ»¸ö¿ìÕÕµÄÐÎʽ´´½¨¡£

ͼ3 Btrfs¾µÏñ²ãÈÝÆ÷²ã
OverlayFs
OverlayFsÊÇÒ»¸öÁªºÏÎļþϵͳ£¬ÓëAUFSµÄ×ö·¨ÓÐЩÀàËÆ£¬ÓÉÓںϲ¢Ä¿Â¼£¬overlayFsÔÚ²éÕÒЧÂÊ·½Ãæ×÷Á˲»Ð¡µÄ¸Ä½ø£¬²»Í¬ÓÚAUFS¾µÏñ²ãÔ½¶àÔò²éÕÒʱ¼äÔ½³¤¡£»ùÓÚoverlayFs¼¼ÊõÓÐÁ½ÖÖ´æ´¢Çý¶¯£ºoverlayÓëoverlay2£¬¸ù¾Ý¹Ù·½Îĵµ£¬overlayÒªÇóÄں˰汾3.18ÒÔÉÏ£¬overlay2ÒªÇóÄں˰汾4.0ÒÔÉÏ¡£µ«ÊÇÎÒÃǾ¹ý³¢ÊÔ£¬¿ÉÒÔÔÚ3.10ÄÚºËʹÓÃoverlay¡£

ͼ4 overlay¾µÏñ²ãÈÝÆ÷²ã
ZFS
ZFSÊÇSun¹«Ë¾£¨ÏÖÔÚµÄOracle£©·¢Ã÷µÄ²¢ÔÚCDDLÌõ¿îÏ¿ªÔ´¡£¶øÓÉÓÚCDDLÓëGPL¿ªÔ´Ìõ¿îµÄ²»¼æÈÝ£¬ZFSÎÞ·¨²¢ÈëLinuxÄÚºËÖ÷Ïß¡£²»¹ýZFS
On Linux£¨ZoL£©ÏîÄ¿ÌṩÁËÒ»¸ö¿ÉÒÔµ¥¶À°²×°µÄÄÚºËÄ£¿éºÍÓû§¿Õ¼ä¹¤¾ß¡£³ý·ÇÄãÔÚZoLÏîÄ¿ÉÏÒѾÓдóÁ¿µÄʵ¼ù¾Ñ飬Ïֽ׶β¢²»ÍƼöÔÚÉú²ú»·¾³ÖÐʹÓÃzfs×÷ΪDockerµÄ´æ´¢Çý¶¯¡£
ÈçÏÂͼËùʾ£¬¾µÏñµÄ×îµ×²ã£¨base layer£©ÊÇÒ»¸öZFSÎļþϵͳ¡£Ã¿Ò»¸ö¾µÏñ×Ӳ㶼ÊÇÒ»¸ö»ùÓÚϲãZFS¿ìÕÕµÄZFS¿Ë¡ʵÌå¡£Ò»¸öÈÝÆ÷µÄÎļþϵͳÊÇÒ»¸öZFS¿Ë¡£¬Ï²ãÊÇ´Ó¾µÏñ²ã´´½¨µÄ¿ìÕÕ¡£ËùÓÐÊý¾ÝʵÌå¶¼´Ózpool·ÖÅä¿Õ¼ä¡£

ͼ5 ZFS¾µÏñ²ãÈÝÆ÷²ã
ÎÒÃǵÄÏÖ×´
ÔÚ¹ýÈ¥µÄÒ»¶Îʱ¼ä£¬ÎÒÃÇʹÓÃloopģʽµÄDeviceMapper×÷Ϊ´æ´¢Çý¶¯£¬ÊÇDockerĬÈϵģ¬ÔÚʹÓùý³ÌÖÐÓöµ½Ò»Ð©ÎÊÌâ¡£
[root@oak-qa-04 Deploy]# docker stop
b977235038bce3176279bdd27cf84b12755eff0ed08d6a11b09e5e8e97480f78
b977235038bce3176279bdd27cf84b12755eff0ed08d6a11b09e5e8e97480f78
[root@oak-qa-04 Deploy]# docker rm
b977235038bce3176279bdd27cf84b12755eff0ed08d6a11b09e5e8e97480f78
Error response from daemon: Driver devicemapperfailed
to remove root filesystem
b977235038bce3176279bdd27cf84b12755eff0ed08d6a11b09e5e8e97480f78
: Device is Busy |
ÈçÉÏÃæËùʾÎÊÌ⣬²»Ö»Ò»´Î³öÏÖ£¬Ä¿Ç°¶¼Ã»ÓÐÍêÈ«½â¾ö£¬×îÖÕÖ»ÄÜÓÃÖØÆôDockerµÄ·½·¨£¬Èç¹ûÔÚÉú²ú»·¾³ÖÐÓöµ½ÕâÑùµÄÎÊÌ⣬Ӧ¸ÃÊÇ´ó¼Ò²»Ï£Íû¿´µ½µÄ¡£
ÎÒÃÇ·ÖÎö²úÉú¸ÃÎÊÌâµÄÔÒò»¹ÊÇÔÚÓÚloopģʽµÄµÄdevicemapperËùÓõÄÊý¾ÝÉ豸ºÍÔªÊý¾ÝÉ豸¶¼Ö»Êǰ󶨵½»Ø»·É豸ÉϵÄÏ¡ÊèÎļþ£¬Èç²»×öÌØ±ðµÄÅäÖã¬ÕâЩÎļþ´óСһ°ã¿´ÉÏÈ¥ÊÇ100GB£¨ÈçÏÂͼËùʾloop0£©ºÍ2GB£¨ÈçÏÂͼËùʾloop1£©£¬ÓÉÓÚʹÓÃÔ¤·ÖÅä»úÖÆ£¬ÔÚʵ¼ÊдÈëÊý¾Ý֮ǰ£¬²¢²»»áÕæÕýÕ¼ÓÃ100GBºÍ2GBµÄ´ÅÅ̿ռ䡣ÕâÑùµÄ»úÖÆÈÃÎÒÃÇÏëµ½Á½¸öÎÊÌ⣺1¡¢Ï¡ÊèÎļþÐÔÄܲ»Ì«ºÃ£¬ÇÒÎļþ±¾Éí¿ÉÄÜ»áË𻵣»2¡¢ÓÉÓÚÔ¤·ÖÅä»úÖÆ£¬´ýÐèÒªÕ¼ÓõÄʱºò£¬Èç¹ûʵ¼Ê´ÅÅ̿ռäÒѾûÓÐÄÇô¶àÁË£¬¾Í»á·¢ÉúÒì³£¡£
[root@oak-qa-05]#lsblk NAME MAJ:MINRM SIZE RO TYPE MOUNTPOINT fd0 8:0 0 4k 0 disk sda1 sda2 loop0 7:0 0 100G 0 loop loop1 7:1 0 2G 0 loop |
½ÓÏÂÀ´ÈçºÎÑ¡Ôñ
Óû§¿É¸ù¾Ý×Ô¼ºµÄʵ¼ÊÐèÒª£¬¿¼ÂÇÒÔϼ¸¸ö·½Ã棺ÈÝÆ÷Ãܶȡ¢Îļþ´óС¡¢ÊÇ·ñIOÃܼ¯µÈ£¬ÒÔ¼°×Ô¼ºÔÚʹÓ÷½ÃæµÄϲºÃ£¬À´Ñ¡ÔñÒ»ÖÖ¡£
ÓÉÓÚAUFSûÓв¢ÈëlinuxÄÚºËÖ÷Ïߣ¬overlayûÓÐÍêȫ֧³ÖPOSIX±ê×¼£¬ZFSÒ²´æÔÚ¼æÈÝÐÔÎÊÌâ¡£¼øÓÚDeviceMapper£¨loopģʽ£©Ö®Ç°Óöµ½ÖÖÖÖÎÊÌ⣬ËùÒÔÎÒÃǼƻ®ÔÚBtrfsÓëDeviceMapper£¨direct-lvmģʽ£©Á½ÕßÖÐѡһÖÖ£¬ÏÂÃæ¶ÔËûÃǽøÐÐһЩIOÐÔÄܵIJâÊÔ£¬Ö®ºóÔÚÏÖÓл·¾³Öв¿·Ö²¿ÊðBtrfs£¬²¿·Ö²¿ÊðDeviceMapper£¬¶ÔÎȶ¨ÐÔ½øÐбȽϡ£
´ó¼Ò¶ÔÓÚ´òËãʹÓõĴ洢Çý¶¯£¬¿ÉÒÔ¹Ø×¢¹Ù·½ÍøÕ¾µÄbugÁÐ±í£¬Ò²ÊÇÒ»¸ö¿É²Î¿¼µÄÒòËØ¡£
IOÐÔÄܲâÊÔ
ʹÓÃIOzone²âÊÔ¹¤¾ß£¬¸Ã¹¤¾ß²ÎÊý¶àÑù£¬¿ÉÁé»îʹÓ㬲âÊÔ¸÷ÖÖ¶Áд£¬ÎÒÃǽáºÏ×Ô¼ºµÄ³¡¾°£¬Ö÷Òª²âÊÔ¶ÁµÄËÙ¶È£¬Ö÷Òª¹Ø×¢Îļþ´óСÔÚ¼¸°ÙkKBµ½¼¸MBÖ®¼äµÄÊý¾Ý£¬½ö±È½ÏBtrfsÓëDeviceMapper¡£
²âÊÔ»·¾³
ËÞÖ÷»úÅäÖÃÈçÏ£º

²âÊÔ1
Read£¨¶Á²âÊÔ£©£¬Îļþ´óСΪ4kµ½128k£¬ÒÔrecord 4kÀ´´«Ê䣬²âÊÔ½á¹ûÈçÏÂͼËùʾ£º
ºìɫΪBtrfs£¬À¶É«ÎªDeviceMapper£»
ºá×ø±êΪÎļþ´óС£¬µ¥Î»ÎªkBytes£¬×Ý×ø±êΪ´«ÊäËÙ¶È£¬µ¥Î»ÎªkBytes/s£»

ͼ6 ²âÊÔ1
²âÊÔ2
Read£¨¶Á²âÊÔ£©£¬Îļþ´óСΪ128kµ½8192k£¬ÒÔrecord 4kÀ´´«Ê䣬²âÊÔ½á¹ûÈçÏÂͼËùʾ£º
ºìɫΪBtrfs£¬À¶É«ÎªDeviceMapper£»
ºá×ø±êΪÎļþ´óС£¬µ¥Î»ÎªkBytes£¬×Ý×ø±êΪ´«ÊäËÙ¶È£¬µ¥Î»ÎªkBytes/s£»

ͼ7 ²âÊÔ2
²âÊÔ3
Read£¨¶Á²âÊÔ£©£¬Îļþ´óСΪ256kµ½16384k£¬ÒÔrecord 256kÀ´´«Ê䣬²âÊÔ½á¹ûÈçÏÂͼËùʾ£º
ºìɫΪBtrfs£¬À¶É«ÎªDeviceMapper£»
ºá×ø±êΪÎļþ´óС£¬µ¥Î»ÎªkBytes£¬×Ý×ø±êΪ´«ÊäËÙ¶È£¬µ¥Î»ÎªkBytes/s£»

ͼ8 ²âÊÔ3
²âÊÔ4
Reread£¨¶Ô¸Õ¶Á¹ýµÄÎļþÖØ¶Á£©£¬Îļþ´óСΪ4kµ½128k£¬ÒÔrecord 4kÀ´´«Ê䣬²âÊÔ½á¹ûÈçÏÂͼËùʾ£º
ºìɫΪBtrfs£¬À¶É«ÎªDeviceMapper£»
ºá×ø±êΪÎļþ´óС£¬µ¥Î»ÎªkBytes£¬×Ý×ø±êΪ´«ÊäËÙ¶È£¬µ¥Î»ÎªkBytes/s£»

ͼ9 ²âÊÔ4
²âÊÔ5
Reread£¨¶Ô¸Õ¶Á¹ýµÄÎļþÖØ¶Á£©£¬Îļþ´óСΪ128kµ½8192k£¬ÒÔrecord 4kÀ´´«Ê䣬²âÊÔ½á¹ûÈçÏÂͼËùʾ£º
ºìɫΪBtrfs£¬À¶É«ÎªDeviceMapper£»
ºá×ø±êΪÎļþ´óС£¬µ¥Î»ÎªkBytes£¬×Ý×ø±êΪ´«ÊäËÙ¶È£¬µ¥Î»ÎªkBytes/s£»

ͼ10 ²âÊÔ5
²âÊÔ6
Reread£¨¶Ô¸Õ¶Á¹ýµÄÎļþÖØ¶Á£©£¬Îļþ´óСΪ256kµ½16384k£¬ÒÔrecord 256kÀ´´«Ê䣬²âÊÔ½á¹ûÈçÏÂͼËùʾ£º
ºìɫΪBtrfs£¬À¶É«ÎªDeviceMapper£»
ºá×ø±êΪÎļþ´óС£¬µ¥Î»ÎªkBytes£¬×Ý×ø±êΪ´«ÊäËÙ¶È£¬µ¥Î»ÎªkBytes/s£»

ͼ11 ²âÊÔ6
²âÊÔ7
Random read£¨Ëæ»ú¶Á£©£¬Îļþ´óСΪ4kµ½128k£¬ÒÔrecord 4kÀ´´«Ê䣬²âÊÔ½á¹ûÈçÏÂͼËùʾ£º
ºìɫΪBtrfs£¬À¶É«ÎªDeviceMapper£»
ºá×ø±êΪÎļþ´óС£¬µ¥Î»ÎªkBytes£¬×Ý×ø±êΪ´«ÊäËÙ¶È£¬µ¥Î»ÎªkBytes/s£»

ͼ12 ²âÊÔ7
²âÊÔ8
Random read£¨Ëæ»ú¶Á£©£¬Îļþ´óСΪ128kµ½8192k£¬ÒÔrecord 4kÀ´´«Ê䣬²âÊÔ½á¹ûÈçÏÂͼËùʾ£º
ºìɫΪBtrfs£¬À¶É«ÎªDeviceMapper£»
ºá×ø±êΪÎļþ´óС£¬µ¥Î»ÎªkBytes£¬×Ý×ø±êΪ´«ÊäËÙ¶È£¬µ¥Î»ÎªkBytes/s£»

ͼ13 ²âÊÔ8
²âÊÔ9
Random read£¨Ëæ»ú¶Á£©£¬Îļþ´óСΪ256kµ½16384k£¬ÒÔrecord 256kÀ´´«Ê䣬²âÊÔ½á¹ûÈçÏÂͼËùʾ£º
ºìɫΪBtrfs£¬À¶É«ÎªDeviceMapper£»
ºá×ø±êΪÎļþ´óС£¬µ¥Î»ÎªkBytes£¬×Ý×ø±êΪ´«ÊäËÙ¶È£¬µ¥Î»ÎªkBytes/s£»

ͼ14 ²âÊÔ9
С½á
¶ÔÓÚÎÒÃÇĿǰ´òËãÓÃdockerÉÏÏßµÄppÔÆµÈ·þÎñ£¬Ö÷Òª¹Ø×¢´Ó¼¸°ÙKBµ½¼¸MB´óСµÄÎļþ£¬Ö»Ð迼ÂǶÁ£¬Ð´µÄ²Ù×÷ÊDzÉÓùÒÔØ¾íµÄ·½Ê½£¬²»»áÖ±½ÓдÔÚÈÝÆ÷Àï¡£ÔÚ¶ÁµÄ·½Ã棬devicemapper±ÈBtrfsÐÔÄÜÂԺá£ÔÚÎȶ¨ÐÔ·½ÃæµÄ±È½Ï£¬ÓÉÓÚÏßϵÄÊÔÑé²¢²»ÄÜÍêȫģ·ÂÏßÉϵij¡¾°£¬³õ²½´òËãÉÏÏßʱһ²¿·ÖÈÝÆ÷ÔËÐÐÔÚdevicemapper´æ´¢Çý¶¯µÄ»·¾³Ï£¬Ò»²¿·ÖÈÝÆ÷ÔËÐÐÔÚBtrfs´æ´¢Çý¶¯µÄ»·¾³Ï£¬½øÐй۲졢±È½Ï¡£ |