ÊÇʲô
¼òµ¥µÄ˵DockerÊÇÒ»¸ö¹¹½¨ÔÚLXCÖ®ÉϵÄ,»ùÓÚ½ø³ÌÈÝÆ÷(Processcontainer)µÄÇáÁ¿¼¶VM½â¾ö·½°¸
ÄÃÏÖʵÊÀ½çÖлõÎïµÄÔËÊä×÷Àà±È,ΪÁ˽â¾ö¸÷ÖÖÐͺŹæ¸ñ³ß´çµÄ»õÎïÔÚ¸÷ÖÖÔËÊ乤¾ßÉϽøÐÐÔËÊäµÄÎÊÌâ,ÎÒÃÇ·¢Ã÷Á˼¯×°Ïä
DockerµÄ³õÖÔÒ²¾ÍÊǽ«¸÷ÖÖÓ¦ÓóÌÐòºÍËûÃÇËùÒÀÀµµÄÔËÐл·¾³´ò°ü³É±ê×¼µÄcontainer/image,½ø¶ø·¢²¼µ½²»Í¬µÄƽ̨ÉÏÔËÐÐ
´ÓÀíÂÛÉÏ˵ÕâÒ»¸ÅÄî²¢²»ÐÂÏÊ,¸÷ÖÖÐéÄâ»úImageÒ²Æð×ÅÀàËÆµÄ×÷ÓÃ
Docker containerºÍÆÕͨµÄÐéÄâ»úImageÏà±È,×î´óµÄÇø±ðÊÇËü²¢²»°üº¬²Ù×÷ϵͳÄÚºË.

ÆÕͨÐéÄâ»ú½«Õû¸ö²Ù×÷ϵͳÔËÐÐÔÚÐéÄâµÄÓ²¼þƽ̨ÉÏ,½ø¶øÌṩÍêÕûµÄÔËÐл·¾³¹©Ó¦ÓóÌÐòÔËÐÐ,¶øDockerÔòÖ±½ÓÔÚËÞÖ÷ƽ̨ÉϼÓÔØÔËÐÐÓ¦ÓóÌÐò.±¾ÖÊÉÏËûÔڵײãʹÓÃLXCÆô¶¯Ò»¸öLinux
Container,ͨ¹ýcgroupµÈ»úÖÆ¶Ô²»Í¬µÄcontainerÄÚÔËÐеÄÓ¦ÓóÌÐò½øÐиôÀë,ȨÏÞ¹ÜÀíºÍquota·ÖÅäµÈ
ÿ¸öcontainerÓµÓÐ×Ô¼º¶ÀÁ¢µÄ¸÷ÖÖÃüÃû¿Õ¼ä(Ò༴×ÊÔ´)°üÀ¨:
PID ½ø³Ì, MNT Îļþϵͳ, NET ÍøÂç, IPC , UTS Ö÷»úÃû µÈ
ÓëLXCÓÐʲô²»Í¬
»ù±¾ÉÏÄã¿ÉÒÔÈÏΪĿǰµÄDockerÊÇLXCµÄÒ»¸ö¸ß¼¶·â×°,ÌṩÁ˸÷ÖÖ¸¨Öú¹¤¾ßºÍ±ê×¼½Ó¿Ú·½±ãÄãʹÓÃLXC,Äã¿ÉÒÔÒÀ¿¿LXCºÍ¸÷Öֽű¾ÊµÏÖÓëdockerÀàËÆµÄ¹¦ÄÜ£¬¾ÍÏñÄ㲻ʹÓÃAPT/yumµÈ¹¤¾ßÒ²¿ÉÒÔ×Ô¼º¸ã¶¨Èí¼þ°ü°²×°Ò»Ñù£¬ÄãʹÓÃËûÃǵĹؼüÔÒòÊÇ·½±ãÒ×Óã¡
ʵ¼ÊʹÓÃÖУ¬ÄãÒ»°ã²»ÓùØÐĵײãLXCµÄϸ½Ú,ͬʱҲ²»ÅŽ«À´dockerʵÏÖ»ùÓÚ·ÇLXC·½°¸µÄ¿ÉÄÜÐÔ
ÔÚLXCµÄ»ù´¡ÉÏ, Docker¶îÍâÌṩµÄFeature°üÀ¨£º±ê׼ͳһµÄ´ò°ü²¿ÊðÔËÐз½°¸£¬
ÀúÊ·°æ±¾¿ØÖÆ£¬ ImageµÄÖØÓã¬Image¹²Ïí·¢²¼µÈµÈ
Container¹¹½¨·½°¸
³ýÁËLXC£¬DockerµÄºËÐÄ˼Ïë¾ÍÌåÏÖÔÚËüµÄÔËÐÐÈÝÆ÷¹¹½¨·½°¸ÉÏ
ΪÁË×î´ó»¯ÖØÓÃImage£¬¼Ó¿ìÔËÐÐËÙ¶È£¬¼õÉÙÄÚ´æºÍ´ÅÅÌfootprint, Docker containerÔËÐÐʱËù¹¹ÔìµÄÔËÐл·¾³£¬Êµ¼ÊÉÏÊÇÓɾßÓÐÒÀÀµ¹ØÏµµÄ¶à¸öLayer×é³ÉµÄ¡£ÀýÈçÒ»¸öapacheµÄÔËÐл·¾³¿ÉÄÜÊÇÔÚ»ù´¡µÄrootfs
imageµÄ»ù´¡ÉÏ£¬µþ¼ÓÁ˰üº¬ÀýÈçEmacsµÈ¸÷ÖÖ¹¤¾ßµÄimage£¬ÔÙµþ¼Ó°üº¬apache¼°ÆäÏà¹ØÒÀÀµlibraryµÄimage£¬ÕâЩimageÓÉAUFSÎļþϵͳ¼ÓÔØºÏ²¢µ½Í³Ò»Â·¾¶ÖУ¬ÒÔÖ»¶ÁµÄ·½Ê½´æÔÚ£¬×îºóÔÙµþ¼Ó¼ÓÔØÒ»²ã¿ÉдµÄ¿Õ°×µÄLayerÓÃ×÷¼Ç¼¶Ôµ±Ç°ÔËÐл·¾³Ëù×÷µÄÐ޸ġ£
ÓÐÁ˲㼶»¯µÄImage×ö»ù´¡£¬ÀíÏëÖУ¬²»Í¬µÄAPP¾Í¿ÉÒԼȿÉÄܵĹ²ÓõײãÎļþϵͳ£¬Ïà¹ØÒÀÀµ¹¤¾ßµÈ£¬Í¬Ò»¸öAPPµÄ²»Í¬ÊµÀýÒ²¿ÉÒÔʵÏÖ¹²Óþø´ó¶àÊýÊý¾Ý£¬½ø¶øÒÔcopy
on writeµÄÐÎʽά»¤×Ô¼ºµÄÄÇÒ»·ÝÐ޸ĹýµÄÊý¾ÝµÈ
ÀúÊ·ºÍÉú̬»·¾³
DockerÏîÄ¿´ÓÆô¶¯µ½ÏÖÔÚ²»¹ýÒ»Äê¶àʱ¼ä£¬·¢Õ¹ÊÆÍ·»¹ÊǺÜѸÃ͵Ä
2013.01×öΪdotcloudÄÚ²¿ÏîÄ¿¿ªÊ¼Æô¶¯
2013.03.27Õýʽ×÷ΪpublicÏîÄ¿·¢²¼
2014.1 ±»BLACK DUCKÆÀѡΪ2013Äê10´ó¿ªÔ´ÐÂÏîÄ¿¡°TOP 10 OPEN SOURCE
ROOKIE OF THE YEAR¡±
ĿǰµÄ״̬ ( 2014.3 )
Docker 0.8.1
10000+ github stars(top 50)
350+ contributors
1500+ fork
¾ßÌåÓ¦Ó÷½Ã棬¿ÉÒÔ¿´µ½°Ù¶ÈÖÁÉÙÔÚ2013Äê10Ô·ݾÍÒѾ³É¹¦Ê¹ÓÃDockerÖ§³ÖÆäBAEƽ̨µÄPaas·þÎñ
°²×°ÔËÐкÍʹÓÃ
DockerËäÈ»ÊǺųÆbuild once£¬ runeverywhere¡£µ«ÊÇʵ¼ÊÉÏ»¹ÊÇÊÜÆäÒýÇæÒÀÀµ¹ØÏµµÄÏÞÖÆµÄ£¬Ä¿Ç°µÄ°æ±¾¾ßÌåÀ´Ëµ¶ÔϵͳҪÇó£º
1.Linux Kernel 3.8+
2.LXCsupport
3.64bitOS
4.AUFS
ÒÔÉÏÒªÇó£¬ÒÔubuntuΪÀý£¬ÐèÒª12.04ÅäºÏ 3.8kernelÉý¼¶£¬ »òÕß ubuntu 13.04+
ÔÚubuntu12.04ÉÏ£¬»ù±¾°²×°²½ÖèÈçÏÂ:
sudoapt-get update sudo apt-get install linux-image-generic-lts-raringlinux-headers-generic-lts-raring
sudoapt-key adv --keyserver keyserver.ubuntu.com --recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9
sudosh -c "echo deb http://get.docker.io/ubuntudocker
main\ > /etc/apt/sources.list.d/docker.list"
sudoapt-get update
sudoapt-get install lxc-docker
Èç¹ûÄãÔÚ°²×°Ö®Ç°ÏëÒªÏÈÌåÑéÒ»ÏÂdockerµÄ»ù±¾²Ù×÷ÃüÁîµÈµÄ»°£¬ ¿ÉÒÔ³¢ÊÔÒ»ÏÂÕâ¸öÔÚÏßµÄlive½Ì³Ì https://www.docker.io/gettingstarted/#h_tutorial
³£ÓÃÃüÁî
·ÖÀàÁÐһϳ£ÓõÄCLIÃüÁî
1¡¢²Ö¿âÏà¹Ø
search/ pull / push / login etc.
Àý£ºdocker pull ubuntu ´Ó²Ö¿âÏÂÔØubuntuimage
2¡¢Images ²Ù×÷Ïà¹Ø
images/ rmi / build / export / import / save /load etc.
Àý£ºdocker images -t ÒÔÊ÷ÐνṹÁгöµ±Ç°±¾µØImage
3¡¢ÔËÐÐÏà¹Ø
run / start / stop / restart / attach /kill etc.
docker run -i -t ubuntu /bin/bash Æô¶¯ubuntu image£¬²¢½»»¥Ê½µÄÔËÐÐshell
4¡¢ÔÓÏî
Docker diff / commit
Dockerinfo / ps / inspect / port /
logs / top / history etc.
¾ßÌådockerÃüÁîµÄʹÓòμû http://docs.docker.io/en/latest/reference/commandline/
³£¼ûÎÊÌâ
1¡¢Ê¹ÓÃNon rootÓû§
Ŀǰ°æ±¾µÄdockerÓÉÓÚʹÓÃSocket½øÐÐͨѶ£¬Òò´ËÐèÒªrootÓû§È¨ÏÞ sudo xxx£¬»òÕß½«ÐèҪʹÓÃDockerclientµÄÓû§¼ÓÈëdockerÓû§×é
sudogpasswd -a ${USER} docker
2¡¢ÍøÂçÏà¹ØÎÊÌâ
µ±ÄãÔÚÍø¹Ø±³ºóÐèҪͨ¹ý´úÀíÁ¬½ÓdockerµÄindexÊý¾Ý¿âʱ£¬¿ÉÒÔÊÖ¶¯¼ÓÉÏhttp_proxy»·¾³±äÁ¿À´Æô¶¯dockerdaemon
HTTP_PROXY=http://proxy_server:port docker -d &
¸üºÃµÄ×ö·¨ÊÇÐÞ¸Ä/etc/default/docker ( on ubuntu ),Ìí¼Ó exporthttp_proxy=proxy_server:port
ͬÑù£¬docker containerÈç¹ûÎÞ·¨×Ô¶¯ÕýÈ·µÄ´Óhost»·¾³ÖлñµÃDNSµÄÅäÖã¬ÔòÐèÒªÊÖ¶¯Ö¸¶¨DNS·þÎñÆ÷µØÖ·£¬Õâ¿ÉÒÔͨ¹ý
docker -run --dns=xxx À´ÊµÏÖ£¬Ò²¿ÉÒÔÐÞ¸Ä/etc/default/dockerÌí¼ÓÀýÈç
DOCKER_OPTS="-dns 8.8.8.8"
3¡¢ÌØÈ¨Ä£Ê½
ÔÚÕý³£Çé¿öÏ ÔÚcontainerÄÚ²¿ÄãûÓÐȨÏÞ²Ù×÷deviceÉ豸£¬¶øµ±Ç°°æ±¾ÖУ¬containerÄÚ²¿²¿·ÖÎļþÀýÈç/etc/hosts;/etc/hostname;
/etc/resolve.confµÈÎļþÊǶ¯Ì¬Í¨¹ýmount¶¯Ì¬ÒÔÖ»¶ÁµÄÐÎʽ¼ÓÔØÉÏÀ´µÄ£¬ÀíÂÛÉÏ˵ÄãÓ¦¸ÃÕÒµ½ºÏÊʵķ½·¨È¥±£Ö¤ÕâЩ×Ô¶¯Éú³É²¢¼ÓÔØµÄÎļþµÄÕýÈ·ÐÔ
(ÀýÈç ͨ¹ý--dnsÉèÖà resolve.conf )£¬µ«ÊÇÈç¹ûÓÉÓÚÌØÊâÔÒòÄãÐèÒªÊÖ¶¯Ð޸ģ¬ÄÇôÄã¿ÉÒÔͨ¹ýÌØÈ¨Ä£Ê½Æô¶¯
docker client £º docker run --privileged£¬È»ºóÄã¿ÉÒÔÐ¶ÔØÕâЩÎļþ£¬×Ô¼ºÔÙ´´½¨Ðµİ汾
4¡¢¹ý¶àµÄ²ã¼¶ÒÀÀµ¹ØÏµ
ÒÔLayerµÄ·½Ê½ÊµÏÖAPPºÍÏà¹ØlibraryµÄcheap reuseºÍfast updateÊÇDockerµÄ¹Ø¼üËùÔÚ£¬²»¹ýÊÜĿǰAUFSÎļþϵͳµÄÏÞÖÆ£¬Ä¬ÈÏLayerµÄ²ã¼¶×î¶àÖ»ÄÜ´ïµ½127£¨Ôø¾Ö»ÓÐ42£©£¬ÔÚʵ¼ÊʹÓÃÖÐÓжàÖÖÇé¿ö¿ÉÄܵ¼ÖÂÄãµÄcontainerµÄ²ã¼¶¹ØÏµ¿ìËÙÔö³¤µ½Õâ¸ö¼«ÏÞÖµ£¬Æ²¿ªÕâô¶àlayerµþ¼ÓÒÔºóAUFSµÄЧÂʲ»Ì¸£¬¸ü¶àÇé¿öÏÂÊÇÄãÎÞ·¨ÔÙ¸üй¹½¨ÄãµÄimageÁË
1.ʹÓÃDockerfile¹¹½¨Imageʱ£¬Ã¿ÌõÖ¸Áî¶¼»á¸ø×îÖÕµÄImageÔö¼ÓÒ»²ãlayerÒÀÀµ¹ØÏµ.
2.ÒÔÐ޸ģ¬Ìá½»£¬ÔÙÐÞ¸ÄÔÙÌá½»µÄ·½Ê½²»Í£µÄµ÷Õû£¬¸üÐÂÄãµÄImage
3.´Ó²Ö¿âÖÐÏÂÔØµÄ±ðÈ˵ÄImageÒѾ°üº¬ÖÚ¶àµÄ²ã¼¶ÒÀÀµ¹ØÏµ£¬¶øÄãÐèÒª½øÒ»²½¸üÐÂÒÔ´´½¨Äã×Ô¼ºµÄ°æ±¾
ǰÁ½ÕßÔÚÒ»¶¨³Ì¶ÈÉÏ»¹ÊÇÄã×Ô¼º¿ÉÄܰѿصģ¬×îºóÒ»ÖÖÇé¿ö¾Íû°ì·¨ÁË¡£Õâ¸öÎÊÌâ×îÖձؽ«Ó°ÏìDockerµÄʵ¼Ê¿ÉÓÃÐÔ£¬Ä¿Ç°µÄ½â¾ö·½°¸°üÀ¨£º
1.ʹÓÃDockerfileʱ,¾¡¿ÉÄܺϲ¢¶à¸ö²Ù×÷£ºÀýÈçʹÓà "&&"
»ò ";"ºÏ²¢ÔËÐжà¸öshellÃüÁ½«¶à¸öshellÃüÁîд³É½Å±¾£¬ÔÚdockerfileÖÐÌí¼Ó²¢ÔËÐÐÕâ¸ö½Å±¾
2.ͨ¹ýExportÔÙImport Image£¬¶ªÆúËùÓÐÀúÊ·ÐÅÏ¢ºÍÒÀÀµ¹ØÏµ£¬´´½¨Ò»¸öȫеÄimage
½«À´¿ÉÄܵĽâ¾ö·½°¸°üÀ¨£º
1.ÔÚDockerfileÖÐÌí¼Ó¶Ô¶à²½²Ù×÷µÄºÏ²¢Ìá½»µÄÖ§³Ö
2.ÍⲿµÄimage Flat¹¤¾ßµÄÖ§³Ö£¬Ä¿±êÊÇÄܹ»±£ÁôÀúÊ·ÐÅÏ¢µÈ
3.·ÇAUFSµÄÆäËüStorage½â¾ö·½°¸
Future development
ËäÈ»DockerĿǰĬÈÏʹÓÃLXCºÍAUFS£¬µ«ÊÇDockerµÄºËÐÄ˼Ïë±¾Éí£¬²¢²»Ç¿Öưó¶¨ÕâÁ½Õߣ¬0.8°æ±¾ÒѾ¿ÉÒÔʹÓÃBTRFS£¬¶øÕû¸öDocker¿ò¼ÜÒ²¸Ä³ÉÁ˲å¼þʽµÄ¼Ü¹¹£¬±ãÓÚÌí¼ÓÌæ»»¸÷¸ö¹¦ÄÜÄ£¿é.
ÀýÈç¸ü¶àµÄStorage·½°¸µÄÖ§³Ö£¬¹æ±ÜAUFSµ±Ç°µÄÎÊÌ⣬³ýÁËLXCÒÔÍâ¸ü¶àµÄÐéÄ⻯·½°¸µÈ
|