±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬Ö÷ҪΪ´ó¼Ò½²½âÁËdocker
imageµÄÒâÒ壬docker image´æ´¢Î»ÖÃÒÔ¼°´¢´æÐÎʽ¡£ |
|
docker imageÊÇʲô£¬´æ´¢ÔÚʲôλÖá£
±¾ÎĻشðÁ½¸öÎÊÌ⣺
1. docker imageÊÇʲô¡£
2. docker image´æ´¢ÔÚÄÄÀÒÔʲôÐÎʽ´æ´¢¡£
1. docker imageÊÇʲô
image ÀïÃæÊÇÒ»²ã²ãÎļþϵͳ£¬½Ð×ö Union FS£¨ÁªºÏÎļþϵͳ£©¡£ÁªºÏÎļþϵͳ£¬¿ÉÒÔ½«¼¸²ãĿ¼¹ÒÔØµ½Ò»Æð£¬ÐγÉÒ»¸öÐéÄâÎļþϵͳ¡£ÐéÄâÎļþϵͳµÄĿ¼½á¹¹¾ÍÏñÆÕͨ
linux µÄĿ¼½á¹¹Ò»Ñù£¬docker ͨ¹ýÕâЩÎļþÔÙ¼ÓÉÏËÞÖ÷»úµÄÄÚºËÌṩÁËÒ»¸ö linux µÄÐéÄâ»·¾³¡£Ã¿Ò»²ãÎļþϵͳÎÒÃǽÐ×öÒ»²ã
layer£¬ÁªºÏÎļþϵͳ¿ÉÒÔ¶Ôÿһ²ãÎļþϵͳÉèÖÃÈýÖÖȨÏÞ£¬Ö»¶Á£¨readonly£©¡¢¶Áд£¨readwrite£©ºÍд³ö£¨whiteout-able£©£¬µ«ÊÇ
docker ¾µÏñÖÐÿһ²ãÎļþϵͳ¶¼ÊÇÖ»¶ÁµÄ¡£
¹¹½¨¾µÏñµÄʱºò£¬´ÓÒ»¸ö×î»ù±¾µÄ²Ù×÷ϵͳ¿ªÊ¼£¬Ã¿¸ö¹¹½¨µÄ²Ù×÷¶¼Ï൱ÓÚ×öÒ»²ãµÄÐ޸ģ¬Ôö¼ÓÁËÒ»²ãÎļþϵͳ¡£Ò»²ã²ãÍùÉϵþ¼Ó£¬ÉϲãµÄÐ޸ĻḲ¸Çµ×²ã¸ÃλÖõĿɼûÐÔ£¬ÕâÒ²ºÜÈÝÒ×Àí½â£¬¾ÍÏñÉϲã°Ñµ×²ãÕÚסÁËÒ»Ñù¡£µ±ÄãʹÓõÄʱºò£¬ÄãÖ»»á¿´µ½Ò»¸öÍêÈ«µÄÕûÌ壬Äã²»ÖªµÀÀïÃæÓм¸²ã£¬Ò²²»Çå³þÿһ²ãËù×öµÄÐÞ¸ÄÊÇʲô¡£½á¹¹ÀàËÆÕâÑù£º

´Ó»ù±¾µÄ¿´Æð£¬Ò»¸öµäÐ굀 Linux ÎļþϵͳÓÉ bootfs ºÍ rootfs Á½²¿·Ö×é³É£¬bootfs(boot
file system) Ö÷Òª°üº¬bootloader ºÍ kernel£¬bootloader Ö÷ÒªÓÃÓÚÒýµ¼¼ÓÔØ
kernel£¬µ± kernel ±»¼ÓÔØµ½ÄÚ´æÖкó bootfs »á±» umount µô¡£rootfs
(root file system) °üº¬µÄ¾ÍÊǵäÐÍ Linux ϵͳÖеÄ/dev£¬/proc£¬/bin£¬/etc
µÈ±ê׼Ŀ¼ºÍÎļþ¡£ÏÂͼ¾ÍÊÇ docker image ÖÐ×î»ù´¡µÄÁ½²ã½á¹¹£¬²»Í¬µÄ linux ·¢Ðа棨Èç
ubuntu ºÍ CentOS ) ÔÚ rootfs ÕâÒ»²ã»áÓÐËùÇø±ð£¬ÌåÏÖ·¢Ðа汾µÄ²îÒìÐÔ¡£

´«Í³µÄ Linux ¼ÓÔØ bootfs ʱ»áÏȽ« rootfs ÉèΪ read-only£¬È»ºóÔÚϵͳ×Ô¼ìÖ®ºó½«
rootfs ´Ó read-only ¸ÄΪ read-write£¬È»ºóÎÒÃǾͿÉÒÔÔÚ rootfs ÉϽøÐжÁд²Ù×÷ÁË¡£µ«
Docker ÔÚ bootfs ×Ô¼ìÍê±ÏÖ®ºó²¢²»»á°Ñ rootfs µÄ read-only ¸ÄΪ read-write£¬¶øÊÇÀûÓÃ
union mount£¨UnionFS µÄÒ»ÖÖ¹ÒÔØ»úÖÆ£©½« image ÖÐµÄÆäËûµÄ layer ¼ÓÔØµ½Ö®Ç°µÄ
read-only µÄ rootfs²ãÖ®ÉÏ£¬Ã¿Ò»²ã layer ¶¼ÊÇ rootfs µÄ½á¹¹£¬²¢ÇÒÊÇread-only
µÄ¡£ËùÒÔ£¬ÎÒÃÇÊÇÎÞ·¨ÐÞ¸ÄÒ»¸öÒÑÓоµÏñÀïÃæµÄ layer µÄ£¡Ö»Óе±ÎÒÃÇ´´½¨Ò»¸öÈÝÆ÷£¬Ò²¾ÍÊǽ« Docker
¾µÏñ½øÐÐʵÀý»¯£¬ÏµÍ³»á·ÖÅäÒ»²ã¿ÕµÄ read-write µÄ rootfs £¬ÓÃÓÚ±£´æÎÒÃÇ×öµÄÐ޸ġ£Ò»²ã
layer Ëù±£´æµÄÐÞ¸ÄÊÇÔöÁ¿Ê½µÄ£¬¾ÍÏñ git Ò»Ñù¡£

×ÛÉÏ£¬imageÆäʵ¾ÍÊÇÒ»¸öÎļþϵͳ£¬ËüÓëËÞÖ÷»úµÄÄÚºËÒ»ÆðΪ³ÌÐòÌṩһ¸öÐéÄâµÄlinux»·¾³¡£ÔÚÆô¶¯docker
containerʱ£¬ÒÀ¾Ýimage£¬docker»áΪcontainer¹¹½¨³öÒ»¸öÐéÄâµÄlinux»·¾³¡£
2. docker image´æ´¢ÔÚÄÄÀÒÔʲôÐÎʽ´æ´¢¡£
µ±ÔËÐÐsudo docker pull ubuntuÃüÁ´ÓDocker HUBÉÏÏÂÔØÒ»¸öubuntu
imageºó£¬Õâ¸öimage´æ´¢ÔÚËÞÖ÷»úµÄʲôλÖã¬ÒÔʲôÐÎʽ´æ´¢µÄÄØ¡£ÏÂÃæÎÒÃÇÒ»²½²½À´½Ò¿ªÕâ¸ö´ð°¸¡£
DockerĿǰ֧³ÖÎåÖÖ¾µÏñ²ã´ÎµÄ´æ´¢driver£ºaufs¡¢device mapper¡¢btrfs¡¢vfs¡¢overlay¡£ÏÂÃæÒÔaufs×ö½éÉÜ£¬Õâ¸öÒ²ÊÇÎÒÃÇϵͳÉÏÓõġ£
ÏÂÔØÒ»¸öubuntu image£¬ÐÞ¸ÄtagΪxuzw£¬É¾³ýÆäËûËùÓоµÏñ¡£

ÔÚ°²×°dockerʱ£¬Ä¬ÈϵݲװλÖÃÊÇ/var/lib/docker¡£ÈÃÎÒÃÇ¿´¿´Õâ¸öĿ¼ÏÂÃæ¶¼ÓÐʲô¡£

repositories-aufs£º¼Ç¼Á˾µÏñÃû³ÆÒÔ¼°¶ÔÓ¦µÄIdµÄjsonÎļþ£¬

graph£º±£´æµÄÊÇÏÂÔØ¾µÏñµÄÔªÊý¾Ý£¬°üÀ¨jsonºÍlayersize£¬ÆäÖÐjsonÎļþ¼Ç¼ÁËÏàÓ¦µÄimage
id¡¢ÒÀÀµ¹ØÏµ¡¢´´½¨Ê±¼äºÍÅäÖÃÐÅÏ¢µÈ¡£layersizeΪ¶ÔÓ¦²ãµÄ´óС¡£½øÈëgraphÎļþ»á·¢ÏÖÏÂÃæ°üº¬×Ŷà¸öÎļþ¼Ð£¬ÆäÖÐÓÐÒ»¸öÊÇÒÔÎÒÃÇÏÂÔØµÄ¾µÏñÃüÃûµÄÎļþ¼Ðca4¡¡£¬½øÈëÕâ¸öÎļþ¼Ð£¬¿ÉÒÔ¿´µ½jsonºÍlayersizeÎļþ¡£

jsonÎļþÄÚÈݲ¿·Ö½ØÍ¼ÈçÏ£¬layersizeÏÔʾΪ0¡£Ôõô»áΪ0ÄØ£¬²»ÓÃ׿±£¬ÕâÒ»²ãΪ0£¬²»±íʾ¾µÏñ´óС¾ÍÊÇ0¡£Graph´æ´¢¾µÏñʱ£¬ÊÇ·Ö²ã´æ´¢µÄ£¬graphĿ¼Ï¶à³öµÄÎļþ¼ÐÆäʵ¶¼¶ÔÓ¦Ò»¸ölayer¡£ÕâЩlayer¶¼ÓëÎÒÃǵľµÏñÃûÃüÃûµÄlayerÓйØÁª£¬¹ØÏµ¾Í¼Ç¼ÔÚjsonÎļþÖС£

´ÓÕâ¸öjsonÎļþÖУ¬¿ÉÒÔ¿´µ½Æð¸¸¾µÏñ»òÕßÉÏÒ»²ã¾µÏñ¾ÍÊÇa46¡¡£¬graphĿ¼ÏÂÒ²´æ´¢×ÅÕâÒ»²ãµÄÐÅÏ¢¡£ÔÙÍùÏ¿´£¬¿ÉÒÔ¿´µ½²ã´Î¹ØÏµÊÇ£ºca4-->
a46--> ea3- -> 233¡£
ÔÚgraphÕâ¸öĿ¼ÀﲢûÓÐÕÒµ½ÎÒÃÇÏëÕÒµ½µÄ¾µÏñÄÚÈÝ´æ·ÅµØ¡£graphĿ¼ÏÂÖ»ÊÇһЩ¾µÏñÏà¹ØµÄÐÅÏ¢Êý¾Ý¡£ÓÉÉÏÒ»½ÚÎÒÃÇÒѾ֪µÀ£¬imageÓ¦¸Ã°üº¬Ò»¸öÀàËÆlinuxµÄÎļþϵͳ²Å¶Ô¡£
containers£ºÕâ¸öÏÂÃæ¼Ç¼µÄÊÇÈÝÆ÷Ïà¹ØµÄÐÅÏ¢£¬Ã¿ÔËÐÐÒ»¸öÈÝÆ÷£¬¾ÍÔÚÕâ¸öĿ¼ÏÂÃæÉú³ÉÒ»¸öÈÝÆ÷Id¶ÔÓ¦µÄ×ÓĿ¼£¬ÈçÏÂͼ¡£

init£º±£´æµÄÊÇdocker initÏà¹ØµÄÐÅÏ¢¡£
tmp£ºÊÇÒ»¸ö¿ÕĿ¼£¬¾ßÌåÆðʲô×÷Óû¹²»Çå³þ¡£
volumes£ºÓëdockerµÄÊý¾ÝȯÏà¹Ø£¬Ôڴ˲»½øÐÐÀ©Õ¹¡£
ÏÖÔÚ¾ÍֻʣÏÂaufsÕâ¸öĿ¼ûÓп´ÁË£¬½øÈëaufsÕâ¸öĿ¼¡£

mntÊÇaufsµÄ¹ÒÔØÄ¿Â¼£¬diffÊÇʵ¼ÊÊý¾ÝÀ´Ô´£¬Ò²¾ÍÊÇÎÒÃÇimageʵ¼Ê´æ´¢µÄµØ·½£¬°üÀ¨Ö»¶Á²ãºÍ¿É¶Áд²ã£¬ËùÓÐÕâЩ²ã×îÖÕ¶¼Ò»Æð¹ÒÔØµ½mmtËùÔÚµÄĿ¼¡£layersÏÂΪÿ²ãÒÀÀµÓйصÄÃèÊöÎļþ¡£
ÔÚdiff¡¢mnt¡¢layersÏÂÃæÓÐ6¸öÎļþ»ò×ÓĿ¼£¬µ«ÊÇ´ÓgraphĿ¼Ï¿´ÎÒÃǵÄimageÓ¦¸ÃÊÇ4²ã£¬ÎªÊ²Ã´»á¶à³öÀ´2¸öÄØ¡£×Ðϸ¹Û²ì¶à³öÀ´µÄÀ´¸öÎļþ»òÕß×ÓĿ¼£¬»á·¢ÏÖÆäÃû³ÆºÍÈÝÆ÷IdÒ»Ö£¬ÇÒÓÐÒ»¸ö°üº¬init¡£ÕâÊÇÎªÊ²Ã´ÄØ£¿
Æäʵ£¬ÔÚÈÝÆ÷Æô¶¯Ö®Ç°£¬mntºÍlayers¶¼ÊÇ¿ÕĿ¼£¬diffÏÂÃæÒ²Ö»ÓÐgraphĿ¼ÏÂÎÒÃÇ¿´µ½µÄ¾µÏñ²ã¶ÔÓ¦µÄ4¸öĿ¼¡£
ÔÚDockerÀûÓÃimageÆô¶¯Ò»¸öÈÝÆ÷ʱ£¬»áÔÚaufsÏÂн¨ÈÝÆ÷id¶ÔÓ¦µÄÎļþºÍ×ÓĿ¼£¬Í¬Ê±ÔÚ¾µÏñµÄ¿É¶Á²ãÖ´ÐÐн¨Ò»¸ö¿É¶ÁдµÄlayer¡£ÖÁÓÚid-initÎļþ»òÕß×ÓĿ¼¼Ç¼µÄ¶¼ÊÇÓëÈÝÆ÷ÄÚ»·¾³Ïà¹ØµÄÐÅÏ¢£¬Óë¾µÏñÎ޹ء£
¼ÈÈ»ÎÒÃÇÏÖÔÚÒѾ֪µÀÁ˾µÏñʵ¼ÊÊÇ´æ´¢ÔÚdiffĿ¼Ïµģ¬ÄÇôÎÒÃǾͿ´¿´diffĿ¼Ï¸÷¸ö×ÓĿ¼ÖеÄÄÚÈÝ¡£ÒÀÕÕ¾µÏñµÄ²ã´Î¹ØÏµca4-->
a46--> ea3- -> 233²é¿´¡£

×îÖÕÎÒÃÇ¿´µ½linuxÒ»ÑùµÄÎļþϵͳ¡£ÒѱíʾimageȷʵÊÇ´æ´¢ÔÚdiffĿ¼Ïµġ£×ÛÉÏ£¬docker
image×îÖÕÊÇ´æ´¢ÔÚÔÚ/var/lib/docker/aufs/diffÖеģ¬Í¬Ê±ÔÚgraphÖÐÓÐÓйؽøÐеļǼ¡£ÔÚÈÝÆ÷Æô¶¯Ê±£¬diffϵĿɶÁ²ãimageºÍÐÂÔöµÄ¿É¶Áд²ã¡°ÈÝÆ÷Id¡±¶¼½«¹ÒÔØµ½mmtĿ¼ÏÂÒÔÈÝÆ÷idÃüÃûµÄ×ÓĿ¼Ï¡£
|