1.
±³¾°
1.1. ÓÉPaaSµ½Container
2013Äê2Ô£¬Ç°GlusterµÄCEO Ben GolubºÍdotCloudµÄCEO Solomon
Hykes×øÔÚÒ»ÆðÁÄÌìʱ£¬Solomon̸µ½Ïë°ÑdotCloudÄÚ²¿Ê¹ÓõÄContainerÈÝÆ÷¼¼Êõµ¥¶ÀÄóöÀ´¿ªÔ´£¬È»ºóÎ§ÈÆÕâ¸ö¼¼Êõ¿ªÒ»¼Òй«Ë¾Ìṩ¼¼ÊõÖ§³Ö¡£28ËêµÄSolomonÔÚʹÓÃpython¿ª·¢dotCloudµÄPaaSÔÆÊ±·¢ÏÖ£¬Ê¹ÓÃ
LXC(Linux Container) ¼¼Êõ¿ÉÒÔ´òÆÆ²úÆ··¢²¼¹ý³ÌÖÐÓ¦Óÿª·¢¹¤³ÌʦºÍϵͳ¹¤³ÌʦÁ½ÕßÖ®¼äÎÞ·¨ÇáËÉÐ×÷·¢²¼²úÆ·µÄÄÑÌâ¡£Õâ¸öContainerÈÝÆ÷¼¼Êõ¿ÉÒÔ°Ñ¿ª·¢Õß´ÓÈÕ³£²¿ÊðÓ¦Óõķ±ÔÓ¹¤×÷ÖнâÍѳöÀ´£¬Èÿª·¢ÕßÄÜרÐÄдºÃ³ÌÐò£»´Óϵͳ¹¤³ÌʦµÄ½Ç¶ÈÀ´¿´Ò²ÊÇÒ»Ñù£¬ËûÃÇÆÈÇÐÐèÒª´Ó¸÷ÖÖ»ìÂҵIJ¿ÊðÎĵµÖнâÍѳöÀ´£¬ÈÃϵͳ¹¤³ÌʦרעÔÚÓ¦ÓõÄˮƽÀ©Õ¹¡¢Îȶ¨·¢²¼µÄ½â¾ö·½°¸ÉÏ¡£ËûÃÇÔ½ÉîÈ뽻̸£¬Ô½¾õµÃÕâÊÇÒ»´ÎÔÆ¼¼ÊõµÄ±ä¸ï£¬½ô½Ó×ÅÔÚ2013Äê3ÔÂDocker
0.1·¢²¼£¬À¿ªÁË»ùÓÚÔÆ¼ÆËãÆ½Ì¨·¢²¼²úÆ··½Ê½µÄ±ä¸ïÐòÄ»¡£
1.2 Docker¼ò½é

Docker ÊÇ Docker.Inc ¹«Ë¾¿ªÔ´µÄÒ»¸ö»ùÓÚ LXC¼¼ÊõÖ®ÉϹ¹½¨µÄContainerÈÝÆ÷ÒýÇæ£¬
Ô´´úÂëÍйÜÔÚ GitHub ÉÏ, »ùÓÚGoÓïÑÔ²¢×ñ´ÓApache2.0ÐÒ鿪Դ¡£ DockerÔÚ2014Äê6ÔÂÕÙ¿ªDockerConf
2014¼¼Êõ´ó»áÎüÒýÁËIBM¡¢Google¡¢RedHatµÈÒµ½çÖªÃû¹«Ë¾µÄ¹Ø×¢ºÍ¼¼ÊõÖ§³Ö£¬ÎÞÂÛÊÇ´Ó GitHub
ÉϵĴúÂë»îÔ¾¶È£¬»¹ÊÇRedhatÐû²¼ÔÚRHEL7ÖÐÕýʽ֧³ÖDocker, ¶¼¸øÒµ½çÒ»¸öÐźţ¬ÕâÊÇÒ»Ïî´´ÐÂÐ͵ļ¼Êõ½â¾ö·½°¸¡£
¾ÍÁ¬ Google ¹«Ë¾µÄ Compute Engine Ò²Ö§³Ö docker ÔÚÆäÖ®ÉÏÔËÐÐ, ¹úÄÚ¡°BAT¡±ÏÈ·æÆóÒµ°Ù¶ÈBaidu
App Engine(BAE)ƽ̨ҲÊÇÒÔDocker×÷ΪÆäPaaSÔÆ»ù´¡¡£

Docker²úÉúµÄÄ¿µÄ¾ÍÊÇΪÁ˽â¾öÒÔÏÂÎÊÌâ:
1) »·¾³¹ÜÀí¸´ÔÓ: ´Ó¸÷ÖÖOSµ½¸÷ÖÖÖмä¼þÔÙµ½¸÷ÖÖApp£¬Ò»¿î²úÆ·Äܹ»³É¹¦·¢²¼£¬×÷Ϊ¿ª·¢ÕßÐèÒª¹ØÐĵĶ«Î÷Ì«¶à£¬ÇÒÄÑÓÚ¹ÜÀí£¬Õâ¸öÎÊÌâÔÚÈí¼þÐÐÒµÖÐÆÕ±é´æÔÚ²¢ÐèÒªÖ±½ÓÃæ¶Ô¡£Docker¿ÉÒÔ¼ò»¯²¿Êð¶àÖÖÓ¦ÓÃʵÀý¹¤×÷£¬±ÈÈçWebÓ¦Óᢺǫ́ӦÓá¢Êý¾Ý¿âÓ¦ÓᢴóÊý¾ÝÓ¦ÓñÈÈçHadoop¼¯Èº¡¢ÏûÏ¢¶ÓÁеȵȶ¼¿ÉÒÔ´ò°ü³ÉÒ»¸öImage²¿Êð¡£ÈçͼËùʾ£º

2) ÔÆ¼ÆËãʱ´úµÄµ½À´: AWSµÄ³É¹¦, Òýµ¼¿ª·¢Õß½«Ó¦ÓÃ×ªÒÆµ½ÔÆÉÏ, ½â¾öÁËÓ²¼þ¹ÜÀíµÄÎÊÌ⣬Ȼ¶øÈí¼þÅäÖú͹ÜÀíÏà¹ØµÄÎÊÌâÒÀÈ»´æÔÚ
(AWS cloudformationÊÇÕâ¸ö·½ÏòµÄÒµ½ç±ê×¼, ÑùÀýÄ£°å¿É²Î¿¼ÕâÀï)¡£DockerµÄ³öÏÖÕýºÃÄܰïÖúÈí¼þ¿ª·¢Õß¿ªÀ«Ë¼Â·£¬³¢ÊÔеÄÈí¼þ¹ÜÀí·½·¨À´½â¾öÕâ¸öÎÊÌâ¡£
3) ÐéÄ⻯Êֶεı仯: ÔÆÊ±´ú²ÉÓñêÅäÓ²¼þÀ´½µµÍ³É±¾£¬²ÉÓÃÐéÄ⻯ÊÖ¶ÎÀ´Âú×ãÓû§°´Ðè·ÖÅäµÄ×ÊÔ´ÐèÇóÒÔ¼°±£Ö¤¿ÉÓÃÐԺ͸ôÀëÐÔ¡£È»¶øÎÞÂÛÊÇKVM»¹ÊÇXen£¬ÔÚ
Docker ¿´À´¶¼ÔÚÀË·Ñ×ÊÔ´£¬ÒòΪÓû§ÐèÒªµÄÊǸßЧÔËÐл·¾³¶ø·ÇOS, GuestOS¼ÈÀË·Ñ×ÊÔ´ÓÖÄÑÓÚ¹ÜÀí,
¸ü¼ÓÇáÁ¿¼¶µÄLXC¸ü¼ÓÁé»îºÍ¿ìËÙ¡£ÈçͼËùʾ£º

4) LXCµÄ±ãЯÐÔ: LXCÔÚ Linux 2.6 µÄ Kernel Àï¾ÍÒѾ´æÔÚÁË£¬µ«ÊÇÆäÉè¼ÆÖ®³õ²¢·ÇÎªÔÆ¼ÆË㿼Âǵģ¬È±ÉÙ±ê×¼»¯µÄÃèÊöÊֶκÍÈÝÆ÷µÄ¿É±ãЯÐÔ£¬¾ö¶¨Æä¹¹½¨³öµÄ»·¾³ÄÑÓÚ·Ö·¢ºÍ±ê×¼»¯¹ÜÀí(Ïà¶ÔÓÚKVMÖ®ÀàimageºÍsnapshotµÄ¸ÅÄî)¡£Docker¾ÍÔÚÕâ¸öÎÊÌâÉÏ×ö³öÁËʵÖÊÐԵĴ´Ð·½·¨¡£
1.3 DockerµÄHello World
ÒÔFedora 20×÷ΪÖ÷»úΪÀý£¬Ö±½Ó°²×°docker-io£º
$ sudo yum -y install docker-io |
Æô¶¯dockerºǫ́Daemon:
$ sudo systemctl start docker |
ÅÜÎÒÃǵÚÒ»¸öHello WorldÈÝÆ÷£º
$ sudo docker run -i -t fedora /bin/echo hello world Hello world |
¿ÉÒÔ¿´µ½ÔÚÔËÐÐÃüÁîÐкóµÄÏÂÒ»Ðлá´òÓ¡³ö¾µäµÄHello World×Ö·û´®¡£
2. ºËÐļ¼ÊõÔ¤ÀÀ
DockerºËÐÄÊÇÒ»¸ö²Ù×÷ϵͳ¼¶ÐéÄ⻯·½·¨, Àí½âÆðÀ´¿ÉÄܲ¢²»ÏñVMÄÇÑùÖ±¹Û¡£ÎÒÃÇ´ÓÐéÄ⻯·½·¨µÄËĸö·½Ã棺¸ôÀëÐÔ¡¢¿ÉÅä¶î/¿É¶ÈÁ¿¡¢±ãЯÐÔ¡¢°²È«ÐÔÀ´Ïêϸ½éÉÜDockerµÄ¼¼Êõϸ½Ú¡£
2.1. ¸ôÀëÐÔ: Linux Namespace(ns)
ÿ¸öÓû§ÊµÀýÖ®¼äÏ໥¸ôÀë, »¥²»Ó°Ïì¡£ Ò»°ãµÄÓ²¼þÐéÄ⻯·½·¨¸ø³öµÄ·½·¨ÊÇVM£¬¶øLXC¸ø³öµÄ·½·¨ÊÇcontainer£¬¸üϸһµã½²¾ÍÊÇkernel
namespace¡£ÆäÖÐpid¡¢net¡¢ipc¡¢mnt¡¢uts¡¢userµÈnamespace½«containerµÄ½ø³Ì¡¢ÍøÂç¡¢ÏûÏ¢¡¢Îļþϵͳ¡¢UTS("UNIX
Time-sharing System")ºÍÓû§¿Õ¼ä¸ôÀ뿪¡£
1) pid namespace
²»Í¬Óû§µÄ½ø³Ì¾ÍÊÇͨ¹ýpid namespace¸ôÀ뿪µÄ£¬ÇÒ²»Í¬ namespace ÖпÉÒÔÓÐÏàͬpid¡£ËùÓеÄLXC½ø³ÌÔÚdockerÖеĸ¸½ø³ÌΪdocker½ø³Ì£¬Ã¿¸ölxc½ø³Ì¾ßÓв»Í¬µÄnamespace¡£Í¬Ê±ÓÉÓÚÔÊÐíǶÌ×£¬Òò´Ë¿ÉÒԺܷ½±ãµÄʵÏÖ
Docker in Docker¡£
2) net namespace
ÓÐÁË pid namespace, ÿ¸önamespaceÖеÄpidÄܹ»Ï໥¸ôÀ룬µ«ÊÇÍøÂç¶Ë¿Ú»¹Êǹ²ÏíhostµÄ¶Ë¿Ú¡£ÍøÂç¸ôÀëÊÇͨ¹ýnet
namespaceʵÏֵģ¬ ÿ¸önet namespaceÓжÀÁ¢µÄ network devices, IP
addresses, IP routing tables, /proc/net Ŀ¼¡£ÕâÑùÿ¸öcontainerµÄÍøÂç¾ÍÄܸôÀ뿪À´¡£dockerĬÈϲÉÓÃvethµÄ·½Ê½½«containerÖеÄÐéÄâÍø¿¨Í¬hostÉϵÄÒ»¸ödocker
bridge: docker0Á¬½ÓÔÚÒ»Æð¡£
3) ipc namespace
containerÖнø³Ì½»»¥»¹ÊDzÉÓÃlinux³£¼ûµÄ½ø³Ì¼ä½»»¥·½·¨(interprocess communication
- IPC), °üÀ¨³£¼ûµÄÐźÅÁ¿¡¢ÏûÏ¢¶ÓÁк͹²ÏíÄڴ档Ȼ¶øÍ¬ VM ²»Í¬µÄÊÇ£¬container µÄ½ø³Ì¼ä½»»¥Êµ¼ÊÉÏ»¹ÊÇhostÉϾßÓÐÏàͬpid
namespaceÖеĽø³Ì¼ä½»»¥£¬Òò´ËÐèÒªÔÚIPC×ÊÔ´ÉêÇëʱ¼ÓÈënamespaceÐÅÏ¢ - ÿ¸öIPC×ÊÔ´ÓÐÒ»¸öΨһµÄ
32 λ ID¡£
4) mnt namespace
ÀàËÆchroot£¬½«Ò»¸ö½ø³Ì·Åµ½Ò»¸öÌØ¶¨µÄĿ¼ִÐС£mnt namespaceÔÊÐí²»Í¬namespaceµÄ½ø³Ì¿´µ½µÄÎļþ½á¹¹²»Í¬£¬ÕâÑùÿ¸ö
namespace ÖеĽø³ÌËù¿´µ½µÄÎļþĿ¼¾Í±»¸ôÀ뿪ÁË¡£Í¬chroot²»Í¬£¬Ã¿¸önamespaceÖеÄcontainerÔÚ/proc/mountsµÄÐÅÏ¢Ö»°üº¬ËùÔÚnamespaceµÄmount
point¡£
5) uts namespace
UTS("UNIX Time-sharing System") namespaceÔÊÐíÿ¸öcontainerÓµÓжÀÁ¢µÄhostnameºÍdomain
name, ʹÆäÔÚÍøÂçÉÏ¿ÉÒÔ±»ÊÓ×÷Ò»¸ö¶ÀÁ¢µÄ½Úµã¶ø·ÇHostÉϵÄÒ»¸ö½ø³Ì¡£
6) user namespace
ÿ¸öcontainer¿ÉÒÔÓв»Í¬µÄ user ºÍ group id, Ò²¾ÍÊÇ˵¿ÉÒÔÔÚcontainerÄÚ²¿ÓÃcontainerÄÚ²¿µÄÓû§Ö´ÐгÌÐò¶ø·ÇHostÉϵÄÓû§¡£
2.2 ¿ÉÅä¶î/¿É¶ÈÁ¿ - Control Groups (cgroups)
cgroups ʵÏÖÁ˶Ô×ÊÔ´µÄÅä¶îºÍ¶ÈÁ¿¡£ cgroups µÄʹÓ÷dz£¼òµ¥£¬ÌṩÀàËÆÎļþµÄ½Ó¿Ú£¬ÔÚ /cgroupĿ¼ÏÂн¨Ò»¸öÎļþ¼Ð¼´¿Éн¨Ò»¸ögroup£¬ÔÚ´ËÎļþ¼ÐÖÐн¨taskÎļþ£¬²¢½«pidдÈë¸ÃÎļþ£¬¼´¿ÉʵÏֶԸýø³ÌµÄ×ÊÔ´¿ØÖÆ¡£groups¿ÉÒÔÏÞÖÆblkio¡¢cpu¡¢cpuacct¡¢cpuset¡¢devices¡¢freezer¡¢memory¡¢net_cls¡¢ns¾Å´ó×ÓϵͳµÄ×ÊÔ´£¬ÒÔÏÂÊÇÿ¸ö×ÓϵͳµÄÏêϸ˵Ã÷£º
blkio Õâ¸ö×ÓϵͳÉèÖÃÏÞÖÆÃ¿¸ö¿éÉ豸µÄÊäÈëÊä³ö¿ØÖÆ¡£ÀýÈç:´ÅÅÌ£¬¹âÅÌÒÔ¼°usbµÈµÈ¡£
cpu Õâ¸ö×ÓϵͳʹÓõ÷¶È³ÌÐòΪcgroupÈÎÎñÌṩcpuµÄ·ÃÎÊ¡£
cpuacct ²úÉúcgroupÈÎÎñµÄcpu×ÊÔ´±¨¸æ¡£
cpuset Èç¹ûÊǶàºËÐĵÄcpu£¬Õâ¸ö×Óϵͳ»áΪcgroupÈÎÎñ·ÖÅäµ¥¶ÀµÄcpuºÍÄÚ´æ¡£
devices ÔÊÐí»ò¾Ü¾øcgroupÈÎÎñ¶ÔÉ豸µÄ·ÃÎÊ¡£
freezer ÔÝÍ£ºÍ»Ö¸´cgroupÈÎÎñ¡£
memory ÉèÖÃÿ¸öcgroupµÄÄÚ´æÏÞÖÆÒÔ¼°²úÉúÄÚ´æ×ÊÔ´±¨¸æ¡£
net_cls ±ê¼Çÿ¸öÍøÂç°üÒÔ¹©cgroup·½±ãʹÓá£
ns Ãû³Æ¿Õ¼ä×Óϵͳ¡£
ÒÔÉϾŸö×Óϵͳ֮¼äÒ²´æÔÚ×ÅÒ»¶¨µÄ¹ØÏµ.ÏêÇéÇë²ÎÔĹٷ½Îĵµ¡£
2.3 ±ãЯÐÔ: AUFS
AUFS (AnotherUnionFS) ÊÇÒ»ÖÖ Union FS, ¼òµ¥À´Ëµ¾ÍÊÇÖ§³Ö½«²»Í¬Ä¿Â¼¹ÒÔØµ½Í¬Ò»¸öÐéÄâÎļþϵͳÏÂ(unite
several directories into a single virtual filesystem)µÄÎļþϵͳ,
¸ü½øÒ»²½µÄÀí½â, AUFSÖ§³ÖΪÿһ¸ö³ÉԱĿ¼(ÀàËÆGit Branch)É趨readonly¡¢readwrite
ºÍ whiteout-able ȨÏÞ, ͬʱ AUFS ÀïÓÐÒ»¸öÀàËÆ·Ö²ãµÄ¸ÅÄî, ¶Ô readonly
ȨÏÞµÄ branch ¿ÉÒÔÂß¼ÉϽøÐÐÐÞ¸Ä(ÔöÁ¿µØ, ²»Ó°Ïì readonly ²¿·ÖµÄ)¡£Í¨³£ Union
FS ÓÐÁ½¸öÓÃ;, Ò»·½Ãæ¿ÉÒÔʵÏÖ²»½èÖú LVM¡¢RAID ½«¶à¸ödisk¹Òµ½Í¬Ò»¸öĿ¼ÏÂ, ÁíÒ»¸ö¸ü³£ÓõľÍÊǽ«Ò»¸ö
readonly µÄ branch ºÍÒ»¸ö writeable µÄ branch ÁªºÏÔÚÒ»Æð£¬Live
CDÕýÊÇ»ùÓÚ´Ë·½·¨¿ÉÒÔÔÊÐíÔÚ OS image ²»±äµÄ»ù´¡ÉÏÔÊÐíÓû§ÔÚÆäÉϽøÐÐһЩд²Ù×÷¡£Docker
ÔÚ AUFS ÉϹ¹½¨µÄ container image Ò²ÕýÊÇÈç´Ë£¬½ÓÏÂÀ´ÎÒÃÇ´ÓÆô¶¯ container
ÖÐµÄ linux ΪÀýÀ´½éÉÜ docker ¶ÔAUFSÌØÐÔµÄÔËÓá£
µäÐÍµÄÆô¶¯LinuxÔËÐÐÐèÒªÁ½¸öFS: bootfs + rootfs:

bootfs (boot file system) Ö÷Òª°üº¬ bootloader ºÍ kernel,
bootloaderÖ÷ÒªÊÇÒýµ¼¼ÓÔØkernel, µ±boot³É¹¦ºó kernel ±»¼ÓÔØµ½ÄÚ´æÖкó bootfs¾Í±»umountÁË.
rootfs (root file system) °üº¬µÄ¾ÍÊǵäÐÍ Linux ϵͳÖÐµÄ /dev, /proc,/bin,
/etc µÈ±ê׼Ŀ¼ºÍÎļþ¡£
¶ÔÓÚ²»Í¬µÄlinux·¢Ðаæ, bootfs»ù±¾ÊÇÒ»ÖµÄ, µ«rootfs»áÓвî±ð,
Òò´Ë²»Í¬µÄ·¢Ðаæ¿ÉÒÔ¹«ÓÃbootfs ÈçÏÂͼ:

µäÐ͵ÄLinuxÔÚÆô¶¯ºó£¬Ê×ÏȽ« rootfs ÉèÖÃΪ readonly,
½øÐÐһϵÁмì²é, È»ºó½«ÆäÇл»Îª "readwrite" ¹©Óû§Ê¹Óá£ÔÚDockerÖУ¬³õʼ»¯Ê±Ò²Êǽ«
rootfs ÒÔreadonly·½Ê½¼ÓÔØ²¢¼ì²é£¬È»¶ø½ÓÏÂÀ´ÀûÓà union mount µÄ·½Ê½½«Ò»¸ö readwrite
Îļþϵͳ¹ÒÔØÔÚ readonly µÄrootfsÖ®ÉÏ£¬²¢ÇÒÔÊÐíÔٴν«Ï²ãµÄ FS(file system)
É趨Ϊreadonly ²¢ÇÒÏòÉϵþ¼Ó, ÕâÑùÒ»×éreadonlyºÍÒ»¸öwriteableµÄ½á¹¹¹¹³ÉÒ»¸öcontainerµÄÔËÐÐʱ̬,
ÿһ¸öFS±»³Æ×÷Ò»¸öFS²ã¡£ÈçÏÂͼ:

µÃÒæÓÚAUFSµÄÌØÐÔ, ÿһ¸ö¶Ôreadonly²ãÎļþ/Ŀ¼µÄÐ޸ͼֻ»á´æÔÚÓÚÉϲãµÄwriteable²ãÖС£ÕâÑùÓÉÓÚ²»´æÔÚ¾ºÕù,
¶à¸öcontainer¿ÉÒÔ¹²ÏíreadonlyµÄFS²ã¡£ ËùÒÔDocker½«readonlyµÄFS²ã³Æ×÷
"image" - ¶ÔÓÚcontainer¶øÑÔÕû¸örootfs¶¼ÊÇread-writeµÄ£¬µ«ÊÂʵÉÏËùÓеÄÐ޸Ķ¼Ð´Èë×îÉϲãµÄwriteable²ãÖÐ,
image²»±£´æÓû§×´Ì¬£¬Ö»ÓÃÓÚÄ£°å¡¢Ð½¨ºÍ¸´ÖÆÊ¹Óá£

ÉϲãµÄimageÒÀÀµÏ²ãµÄimage£¬Òò´ËDockerÖаÑϲãµÄimage³Æ×÷¸¸image£¬Ã»Óи¸imageµÄimage³Æ×÷base
image¡£Òò´ËÏëÒª´ÓÒ»¸öimageÆô¶¯Ò»¸öcontainer£¬Docker»áÏȼÓÔØÕâ¸öimageºÍÒÀÀµµÄ¸¸imagesÒÔ¼°base
image£¬Óû§µÄ½ø³ÌÔËÐÐÔÚwriteableµÄlayerÖС£ËùÓÐparent imageÖеÄÊý¾ÝÐÅÏ¢ÒÔ¼°
ID¡¢ÍøÂçºÍlxc¹ÜÀíµÄ×ÊÔ´ÏÞÖÆµÈ¾ßÌåcontainerµÄÅäÖ㬹¹³ÉÒ»¸öDocker¸ÅÄîÉϵÄcontainer¡£ÈçÏÂͼ:

2.4 °²È«ÐÔ: AppArmor, SELinux, GRSEC
°²È«ÓÀÔ¶ÊÇÏà¶ÔµÄ£¬ÕâÀïÓÐÈý¸ö·½Ãæ¿ÉÒÔ¿¼ÂÇDockerµÄ°²È«ÌØÐÔ:
ÓÉkernel namespacesºÍcgroupsʵÏÖµÄLinuxϵͳ¹ÌÓеݲȫ±ê×¼;
Docker DeamonµÄ°²È«½Ó¿Ú;
Linux±¾ÉíµÄ°²È«¼Ó¹Ì½â¾ö·½°¸,ÀàÈçAppArmor, SELinux;
ÓÉÓÚ°²È«ÊôÓڷdz£¾ßÌåµÄ¼¼Êõ£¬ÕâÀï²»ÔÚ׸Êö£¬ÇëÖ±½Ó²ÎÔÄDocker¹Ù·½Îĵµ¡£
3. ×îÐÂ×ÓÏîÄ¿½éÉÜ

ÎÒÃÇÔÙÀ´¿´¿´DockerÉçÇø»¹ÓÐÄÄЩ×ÓÏîĿֵµÃÎÒÃÇÈ¥ºÃºÃÑо¿ºÍѧϰ¡£»ùÓÚÕâ¸öÄ¿µÄ£¬ÎÒ°ÑÓÐȤµÄºËÐÄÏîÄ¿¸ø´ó¼ÒÂÞÁгöÀ´£¬ÈÃÈÈÐĵĶÁÕßÄÜ¿ìËÙ¸ú½ø×Ô¼º¸ÐÐËȤµÄÏîÄ¿:
Libswarm£¬ÊÇSolomon Hykes (DockerµÄCTO)
ÔÚDockerCon 2014·å»áÉÏÏòÉçÇø½éÉܵÄС°Àָ߻ýľ¡±¹¤¾ß: ËüÊÇÓÃÀ´Í³Ò»·Ö²¼Ê½ÏµÍ³µÄÍøÂç½Ó¿ÚµÄAPI¡£LibswarmÒª½â¾öµÄÎÊÌâÊÇ£¬»ùÓÚDocker¹¹½¨µÄ·Ö²¼Ê½Ó¦ÓÃÒѾ´ßÉúÁ˶à¸ö»ùÓÚDockerµÄ·þÎñ·¢ÏÖ(Serivce
Discovery)ÏîÄ¿£¬ÀýÈçetcd, fleet, geard, mesos, shipyard,
serfµÈµÈ£¬Ã¿Ò»Ì×½â¾ö·½°¸¶¼ÓÐ×Ô¼ºµÄͨѶÐÒéºÍʹÓ÷½·¨£¬Ê¹ÓÃÆäÖеÄÈÎÒâÒ»¿î¶¼»á¾ÖÏÞÔÚijһ¸öÌØ¶¨µÄ¼¼Êõ·¶Î§ƒÈ¡£ËùÒÔDockerµÄCTO¾ÍÏëÓÃlibswarm±©Â¶³öͨÓõÄAPI½Ó¿Ú¸ø·Ö²¼Ê½ÏµÍ³Ê¹Ó㬴òÆÆ¼È¶¨µÄÐÒéÏÞÖÆ¡£Ä¿Ç°ÏîÄ¿»¹ÔÚÔçÆÚ·¢Õ¹½×¶Î£¬ÖµµÃ²ÎÓë¡£
Libchan£¬ÊÇÒ»¸öµ×²ãµÄÍøÂç¿â£¬ÎªÉϲã Libswarm Ìṩ֧³Ö¡£Ï൱ÓÚ¸øDocker¼ÓÉÏÁËZeroMQ»òRabbitMQ£¬ÕâÀï×Ô¼ºÊµÏÖÍøÂç¿âµÄºÃ´¦ÊǶÔDocker×öÁËÌØ±ðÓÅ»¯£¬¸ü¼ÓÇáÁ¿¼¶¡£Ò»°ã¿ª·¢Õß²»»áÖ±½ÓÓõ½Ëü£¬´ó¼Ò¸ü¶àµÄ»¹ÊÇʹÓÃLibswarmÀ´ºÍÈÝÆ÷½»»¥¡£Ï²»¶µ×²ãʵÏÖµÄÍøÂ繤³Ìʦ¿ÉÄܶԴ˸ÐÐËȤ£¬²»·ÁÒ»¿´¡£
Libcontainer£¬Docker¼¼ÊõµÄºËÐIJ¿·Ö£¬µ¥¶ÀÁгöÀ´Ò²ÊÇÒòΪÕâÒ»¿éµÄ¹¦ÄÜÏà¶Ô¶ÀÁ¢£¬¹¦ÄÜ´úÂëµÄµü´úÉý¼¶·Ç³£¿ì¡£ÏëÁ˽âDocker×îеÄÖ§³ÖÌØÐÔÓ¦¸Ã¶à¹Ø×¢Õâ¸öÄ£¿é¡£
4. ×ܽá
DockerÉçÇøÒ»Ö±ÔÚÃæ¶Ô¼¼ÊõÌôÕ½£¬´ÓÈݵظø³ö×Ô¼ºµÄ½â¾ö·½°¸¡£ÔƼÆËã·¢Õ¹ÖÁ½ñ£¬ÓкܶàÖØÒªµÄÎÊÌâûÓеõ½Í×ÉÆ½â¾ö£¬DockerÕýÔÚ³¢ÊÔÈÃÖ÷Á÷³§É̽ÓÊܲ¢Ó¦ÓÃËü¡£ÖÁ´Ë£¬ÒÔÉÏDocker¼¼ÊõµÄÔ¤ÀÀµ½´Ë¸æÒ»¶ÎÂ䣬±ÊÕßҲϣÍû¶ÁÕßÄܽáºÏ×Ô¼ºµÄʵ¼ÊÇé¿ö£¬³¢ÊÔʹÓÃDocker¼¼Êõ¡£ÒòΪֻÓÐÔÚÇ××ÔÌå»áµÄ»ù´¡Ö®ÉÏ£¬ÏñDockerÕâÑùµÄÔÆ¼¼Êõ²Å»á²úÉú¸ü´óµÄ¼ÛÖµ¡£
|