Ö®Ç°Ôø¾·Òë¹ýºÜ¶àDockerÈëÃŽéÉܵÄÎÄÕ£¬Ö®ËùÒÔÔÙ·ÒëÕâÆª£¬ÊÇÒòΪAndersµÄ½Ç¶ÈºÜ¶ÀÌØ£¬Ë¼Â·Ò²ºÜµ÷Àí¡£ÄãÒ²¿ÉÒÔ¿´ÏÂ×÷ÕßµÄÑݽ²¸å¡¶Docker£¬
DevOpsµÄδÀ´¡·¡£±¾ÎĽéÉÜÁËDockerµÄһЩ»ù±¾¸ÅÄî¡¢ÓÕÈ˵ÄÌØÐÔ¡¢DockerµÄ¹¤×÷ÔÀí¡¢ÈÕ³£¹ÜÀí»ù±¾²Ù×÷£¬ÒÔ¼°Ò»Ð©DockerµÄÎÊÌâµÄ½â¾ö·½°¸¡£

ʲôÊÇDocker£¬ÄãÓ¦¸ÃÖªµÀЩʲô£¿
Ïà±ÈºÜ¶àÈ˵ĽâÊÍ£¬ÎÒÏàÐÅ˵DockerÊÇÒ»¸öÇáÁ¿¼¶µÄÐéÄâ»ú¸üÈÝÒ×Àí½â¡£ÁíÍâÒ»ÖÖ½âÊÍÊÇ£ºDocker¾ÍÊDzÙ×÷ϵͳÖеÄchroot¡£Èç¹ûÄã²»ÖªµÀchrootÊÇʲôµÄ»°£¬ºóÒ»ÖÖ½âÊÍ¿ÉÄÜÎÞ·¨°ïÖúÄãÀí½âʲôÊÇDocker¡£
chrootÊÇÒ»ÖÖ²Ù×÷£¬Äܸı䵱ǰÔËÐеĽø³ÌºÍ×Ó½ø³ÌµÄ¸ùĿ¼¡£ ³ÌÐòÔËÐÐÔÚÕâÑùµÄÒ»¸ö±»Ð޸ĵĻ·¾³ÖУ¬Ëü²»ÄÜ·ÃÎÊÕâ¸ö»·¾³Ä¿Â¼Ê÷Ö®ÍâµÄÎļþºÍÃüÁÕâ¸ö±»Ð޸ĵĻ·¾³¾ÍÊÇ¡°chrootÀÎÁý¡±¡£
-- Arch Linux µÄ wiki ÖÐ¶Ô chroot µÄ½âÊÍ
ÐéÄâ»ú vs. Docker
ÏÂÃæÕâÕÅͼÃèÊöÁËÐéÄâ»úºÍDockerÖ®¼äµÄ²îÒì¡£ ÔÚVMÖУ¬ËÞÖ÷OSÉÏÊÇhypervisor£¨ÐéÄâ»ú¼àÊÓÆ÷£©,
×îÉϲãÊǿͻ§»ú²Ù×÷ϵͳ£¬¶øDockerÔòʹÓÃDockerÒýÇæºÍÈÝÆ÷¡£ ÕâÑù½âÊÍÄãÄÜÀí½âÂð? DockerÒýÇæºÍhypervisorÖ®¼äµÄÇø±ðÓÖÊÇÊ²Ã´ÄØ£¿Äã¿ÉÒÔÁгöÔËÐÐÔÚËÞÖ÷OSÉϵĽø³ÌÀ´Àí½âËüÃǵÄÇø±ð¡£

ÏÂÃæÕâ¸ö¼òµ¥µÄ½ø³ÌÊ÷¿ÉÒÔ¿´³öËüÃǵIJîÒì¡£ËäÈ»ÐéÄâ»úÖÐÔËÐÐÁËºÜ¶à½ø³Ì£¬µ«ÊÇÔËÐÐÐéÄâ»úµÄËÞÖ÷»úÉÏÈ´Ö»ÓÐÒ»¸ö½ø³Ì¡£
# Running processes on Host for a VM $ pstree VM
-+= /VirtualBox.app
|--= coreos-vagrant |
¶øÔËÐÐDockerÒýÇæµÄÖ÷»úÉÏÔò¿ÉÒÔ¿´µ½ËùÓеĽø³Ì¡£ ÈÝÆ÷½ø³ÌÊÇÔËÐÐÔÚËÞÖ÷OSÉϵģ¡£¬ËûÃÇ¿ÉÒÔͨ¹ýÆÕͨµÄps£¬killµÈÃüÁî½øÐмì²éºÍά»¤¡£
# DockerÔÚÖ÷»úÖеĽø³Ì $ pstree docker
-+= /docker
|--= /bin/sh
|--= node server.js
|--= go run app
|--= ruby server.rb
...
|--= /bin/bash |
ËùÓеĶ«Î÷¶¼ÊÇ͸Ã÷µÄ£¬ Òâζ×ÅÊ²Ã´ÄØ£¿Òâζ×ÅDockerÈÝÆ÷±ÈÐéÄâ»ú¸üС£¬¸ü¿ì£¬¸üÈÝÒ×ÓëÆäËü¶«Î÷¼¯³É¡£ÈçÏÂͼËùʾ¡£

°²×°CoreOSµÄСÐÍÐéÄâ»ú¾ÓÈ»ÓÐ1.2GB£¬ ¶ø×°ÉÏbusyboxµÄСÐÍÈÝÆ÷Ö»ÓÐ2.5MB¡£×î¿ìµÄÐéÄâ»úÆô¶¯Ê±¼äÒ²ÊÇ·ÖÖÓ¼¶µÄ£¬¶øÈÝÆ÷µÄÆô¶¯Ê±¼äͨ³£²»µ½Ò»Ãë¡£ÔÚͬһËÞÖ÷»úÉϰ²×°ÐéÄâ»úÐèÒªÕýÈ·µÄÉèÖÃÍøÂ磬
¶ø°²×°Docker·Ç³£¼òµ¥¡£
ÕâôÀ´¿´£¬ÈÝÆ÷ÊÇÇáÁ¿¡¢¿ìËÙ²¢ÇÒÒ×¼¯³É£¬µ«Õâ²¢²»ÊÇËüµÄÈ«²¿£¡
Docker ÊÇÒ»·ÝºÏÔ¼
Docker»¹ÊÇ¿ª·¢ÕߺÍÔËά֮¼äµÄ¡°ºÏÔ¼¡±¡£ ¿ª·¢ºÍÔËάÔÚÑ¡Ôñ¹¤¾ßºÍ»·¾³Ê±µÄ×Ë̬ͨ³£²î±ðºÜ´ó¡£¿ª·¢ÕßÏëҪʹÓÃһЩÉÁÁÁµÄж«Î÷£¬±ÈÈçNode.js¡¢Rust¡¢Go¡¢Î¢·þÎñ¡¢Cassandra¡¢Hadoop¡¢blablabla.........¶øÔËάÔòÇãÏòÓÚʹÓÃÒÔÍùÓùýµÄ¹¤¾ß£¬ÒòΪÊÂʵ֤Ã÷ÄÇЩ¾ÉµÄ¹¤¾ßºÜÓÐЧ¡£
µ«ÕâǡǡÊÇDockerµÄÁÁµã£¬ ÔËάϲ»¶Ëü£¬ÒòΪDockerÈÃËûÃÇÖ»Òª¹ØÐÄÒ»¼þÊÂ:
²¿ÊðÈÝÆ÷£¬ ¶ø¿ª·¢ÕßÒ²Ò»ÑùºÜ¿ªÐÄ£¬Ö»ÒªÐ´ºÃ´úÂ룬ȻºóÍùÈÝÆ÷ÀïÒ»ÈÓ£¬Ê£ÏµĽ»¸øÔËά¾ÍÍêÊÂÁË¡£

²»¹ý±ð¼±£¬Õ⻹ûÍê¡£ÔËά»¹ÄܰïÖú¿ª·¢Õß¹¹½¨ÓÅ»¯ºÃµÄÈÝÆ÷ÒÔ±ãÓÃÓÚ±¾µØ¿ª·¢¡£
¸üºÃµÄ×ÊÔ´ÀûÓÃ
ºÜ¶àÄêǰ£¬ÄÇʱºò»¹Ã»ÓÐÐéÄ⻯£¬µ±ÎÒÃÇÐèÒª´´½¨Ò»¸öзþÎñʱ£¬ÎÒÃDZØÐëÉêÇëʵ¼ÊµÄÎïÀí»úÓ²¼þ¡£ Õâ¿ÉÄÜÒª»¨ÉÏÊýÔ£¬ÒÀÀµÓÚ¹«Ë¾µÄÁ÷³Ì¡£Ò»µ©·þÎñÆ÷µ½Î»£¬ÎÒÃÇ´´½¨ºÃ·þÎñ£¬ºÜ¶àʱºòËü²¢Ã»ÓÐÏñÎÒÃÇÏ£ÍûµÄÄÇÑù³É¹¦£¬ÒòΪ·þÎñÆ÷µÄCPUʹÓÃÂÊÖ»ÓÐ5%¡£
Ì«ÉݳÞÁË¡£
½Ó×Å£¬ÐéÄ⻯À´ÁË¡£Ëü¿ÉÒÔÔÚ¼¸·ÖÖÓÖ®ÄÚ°Ñһ̨»úÆ÷ÔËתÆðÀ´£¬»¹¿ÉÒÔÔÚͬһӲ¼þÉÏÔËÐжà¸öÐéÄâ»ú£¬×ÊԴʹÓÃÂʾͲ»Ö»5%ÁË¡£µ«ÊÇ£¬ÎÒÃÇ»¹ÐèÒª¸øÃ¿¸ö·þÎñ·ÖÅäÒ»¸öÐéÄâ»ú£¬Òò´ËÎÒÃÇ»¹ÊDz»ÄÜÈçÔ¸µÄʹÓÃÕą̂»úÆ÷¡£
ÈÝÆ÷»¯ÊÇÑÝ»¯½ø³ÌµÄÏÂÒ»²½¡£ÈÝÆ÷¿ÉÒÔÔÚ¼¸ÃëÖ®ÄÚ´´½¨ÆðÀ´£¬¶øÇÒ»¹ÄÜÒÔ±ÈÐéÄâ»ú¸üСµÄÁ£¶È½øÐв¿Êð¡£
ÒÀÀµ

DockerÆô¶¯ËÙ¶ÈÕæµÄºÜ¿á¡£ µ«ÊÇ£¬ÎÒÃÇΪʲô²»°ÑËùÓеͼ·þÎñ²¿Êðµ½Í¬Ò»Ì¨»úÆ÷ÉÏÄØ£¿ ÔÒòºÜ¼òµ¥£ºÒÀÀµµÄÎÊÌâ¡£ÔÚͬһ̨»úÆ÷Éϰ²×°¶à¸ö¶ÀÁ¢µÄ·þÎñ£¬²»¹ÜÊÇÕæÊÇ»úÆ÷»¹ÊÇÐéÄâ»ú¶¼ÊÇÒ»³¡ÔÖÄÑ¡£ÓÃDocker¹«Ë¾µÄ˵·¨ÊÇ£ºµØÓüÒ»ÑùµÄ¾ØÕóÒÀÀµ¡£
¶øDockerͨ¹ýÔÚÈÝÆ÷Öб£ÁôÒÀÀµ¹ØÏµ½â¾öÁ˾ØÕóÒÀÀµµÄÎÊÌâ¡£
ËÙ¶È

¿ìµ±È»²»´í£¬µ«ÊÇÄÜ¿ì100±¶¾ÍÌ«²»¿É˼ÒéÁË¡£ËÙ¶ÈÈúܶàÊÂÇé³ÉΪ¿ÉÄÜ£¬Ôö¼ÓÁ˸ü¶àеĿÉÄÜÐÔ¡£±ÈÈ磬ÏÖÔÚ¿ÉÒÔ¿ìËÙ´´½¨ÐµĻ·¾³£¬Èç¹ûÐèÒª´ÓClojure¿ª·¢»·¾³ÍêÕûµÄÇл»µ½GoÓïÑÔÂð£¿Æô¶¯Ò»¸öÈÝÆ÷°É¡£ÐèҪΪ¼¯³ÉºÍÐÔÄܲâÊÔÌṩÉú²ú»·¾³DB
£¿Æô¶¯Ò»¸öÈÝÆ÷°É£¡ ÐèÒª´ÓApacheÇл»Õû¸öÉú²ú»·¾³µ½Nginx£¿Æô¶¯ÈÝÆ÷°É£¡
DockerÊÇÔõô¹¤×÷µÄ£¿
DockerÊÇÒ»¸öClient-Server½á¹¹µÄϵͳ£¬DockerÊØ»¤½ø³ÌÔËÐÐÔÚÖ÷»úÉÏ£¬ È»ºóͨ¹ýSocketÁ¬½Ó´Ó¿Í»§¶Ë·ÃÎÊ£¬
¿Í»§¶ËºÍÊØ»¤½ø³ÌÒ²¿ÉÒÔÔËÐÐÔÙͬһÖ÷»úÉÏ£¬µ«Õâ²»ÊDZØÐëµÄ¡£DockerÃüÁîÐпͻ§¶ËÒ²ÊÇÀàËÆµÄ¹¤×÷·½Ê½£¬µ«Ëüͨ³£Í¨¹ýUnixÓòÌ×½Ó×Ö¶ø²»ÊÇTCPÌ×½Ó×ÖÁ¬½Ó¡£
ÊØ»¤½ø³Ì´Ó¿Í»§¶Ë½ÓÊÜÃüÁî²¢¹ÜÀíÔËÐÐÔÚÖ÷»úÉϵÄÈÝÆ÷¡£

Docker ¸ÅÄî¼°Ï໥×÷ÓÃ
Ö÷»ú£¬ ÔËÐÐÈÝÆ÷µÄ»úÆ÷¡£
¾µÏñ£¬ÎļþµÄ²ã´Î½á¹¹£¬ÒÔ¼°°üº¬ÈçºÎÔËÐÐÈÝÆ÷µÄÔªÊý¾Ý
ÈÝÆ÷£¬Ò»¸ö´Ó¾µÏñÖÐÆô¶¯£¬°üº¬ÕýÔÚÔËÐеijÌÐòµÄ½ø³Ì
Registry£¬ ¾µÏñ²Ö¿â
¾í£¬ÈÝÆ÷ÍâµÄ´æ´¢
Dockerfile£¬ ÓÃÓÚ´´½¨¾µÏñµÄ½Å±¾

ÎÒÃÇ¿ÉÒÔͨ¹ýDockerfileÀ´¹¹½¨¾µÏñ£¬ »¹¿ÉÒÔͨ¹ýcommitÒ»¸öÔËÐеÄÈÝÆ÷À´´´½¨Ò»¸ö¾µÏñ£¬Õâ¸ö¾µÏñ¿ÉÒԻᱻ±ê¼Ç£¬¿ÉÒÔÍÆµ½Registry»òÕß´ÓRegistryÉÏÀÏÂÀ´£¬¿ÉÒÔͨ¹ý´´½¨»òÕßÔËÐоµÏñµÄ·½Ê½À´Æô¶¯ÈÝÆ÷£¬¿ÉÒÔ±»stop£¬Ò²¿ÉÒÔͨ¹ýrmÀ´ÒƳýËü¡£
¾µÏñ
¾µÏñÊÇÒ»ÖÖÎļþ½á¹¹£¬°üº¬ÈçºÎÔËÐÐÈÝÆ÷µÄÔªÊý¾Ý¡£DockerfileÖеÄÿÌõÃüÁî¶¼»áÔÚÎļþϵͳÖд´½¨Ò»¸öеIJã´Î½á¹¹£¬ÎļþϵͳÔÚÕâЩ²ã´ÎÉϹ¹½¨ÆðÀ´£¬¾µÏñ¾Í¹¹½¨ÓÚÕâЩÁªºÏµÄÎļþϵͳ֮ÉÏ¡£

µ±ÈÝÆ÷Æô¶¯ºó£¬ËùÓоµÏñ¶¼»áͳһºÏ²¢µ½Ò»¸ö½ø³ÌÖС£ ÁªºÏÎļþϵͳÖеÄÎļþ±»É¾³ýʱ£¬ ËüÃÇÖ»ÊDZ»±ê¼ÇΪÒÑɾ³ý£¬µ«Êµ¼ÊÉÏÈÔÈ»´æÔÚ¡£
# Commands for interacting with images $ docker images # ²é¿´ËùÓоµÏñ. $ docker import # ´Ótarball´´½¨¾µÏñ $ docker build # ͨ¹ýDockerfile´´½¨¾µÏñ $ docker commit # ´ÓÈÝÆ÷Öд´½¨¾µÏñ $ docker rmi # ɾ³ý¾µÏñ $ docker history # Áгö¾µÏñµÄ±ä¸üÀúÊ· |
¾µÏñ´óС
ÕâÊÇһЩ¾³£Ê¹ÓõľµÏñÏà¹ØµÄÊý¾Ý£º
scratch - »ù´¡¾µÏñ£¬ 0¸öÎļþ£¬´óСΪ0
busybox - ×îСUnixϵͳ£¬2.5MB£¬10000¸öÎļþ
debian:jessie - Debian×îа棬 122MB£¬ 18000
¸öÎļþ
ubuntu:14.04 - 188MB£¬23000 ¸öÎļþ
´´½¨¾µÏñ
¿ÉÒÔͨ¹ýdocker commit container-id¡¢docker import url-to-tar»òÕßdocker
build -f Dockerfile .À´´´½¨¾µÏñ¡£
ÏÈ¿´commitµÄ·½Ê½£º
# ͨ¹ýcommitµÄ·½Ê½À´´´½¨¾µÏñ $ docker run -i -t debian:jessie bash root@e6c7d21960:/# apt-get update root@e6c7d21960:/# apt-get install postgresql root@e6c7d21960:/# apt-get install node root@e6c7d21960:/# node --version root@e6c7d21960:/# curl https://iojs.org/dist/v1.2.0/iojs-v1.2.0- linux-x64.tar.gz -o iojs.tgz root@e6c7d21960:/# tar xzf iojs.tgz root@e6c7d21960:/# ls root@e6c7d21960:/# cd iojs-v1.2.0-linux-x64/ root@e6c7d21960:/# ls root@e6c7d21960:/# cp -r * /usr/local/ root@e6c7d21960:/# iojs --version 1.2.0 root@e6c7d21960:/# exit $ docker ps -l -q e6c7d21960 $ docker commit e6c7d21960 postgres-iojs daeb0b76283eac2e0c7f7504bdde2d49c721a1b03a50f750ea9982464cfccb1e |
´ÓÉÏÃæ¿ÉÒÔ¿´³ö£¬ÎÒÃÇ¿ÉÒÔͨ¹ýdocker commitÀ´´´½¨¾µÏñ£¬µ«ÊÇÕâÖÖ·½Ê½ÓеãÁèÂÒ¶øÇÒºÜÄѸ´ÖÆ£¬
¸üºÃµÄ·½Ê½ÊÇͨ¹ýDockerfileÀ´¹¹½¨¾µÏñ£¬ÒòΪËü²½ÖèÇåÎú²¢ÇÒÈÝÒ׸´ÖÆ£º
FROM debian:jessie # Dockerfile for postgres-iojs
RUN apt-get update
RUN apt-get install postgresql
RUN curl https://iojs.org/dist/iojs-v1.2.0.tgz
-o iojs.tgz
RUN tar xzf iojs.tgz
RUN cp -r iojs-v1.2.0-linux-x64/* /usr/local |
È»ºóÓÃÏÂÃæµÄÃüÁîÀ´¹¹½¨£º
$ docker build -tag postgres-iojs . |
DockerfileÖеÄÿһ¸öÃüÁî¶¼´´½¨ÁËаæµÄlayer£¬Í¨³£°ÑÀàËÆµÄÃüÁî·ÅÔÚÒ»Æð£¬Í¨¹ý&&ºÍÐøÐзûºÅ°ÑÃüÁî×éºÏÆðÀ´£º
FROM debian:jessie # Dockerfile for postgres-iojs
RUN apt-get update && \
apt-get install postgresql && \
curl https://iojs.org/dist/iojs-v1.2.0.tgz -o
iojs.tgz && \
tar xzf iojs.tgz && \
cp -r iojs-v1.2.0-linux-x64/* /usr/local |
ÕâЩÐÐÖÐÃüÁîµÄ˳ÐòºÜÖØÒª£¬ÒòΪDockerΪÁ˼ÓËÙ¾µÏñµÄ¹¹½¨£¬»á»º´æÖмäµÄ¾µÏñ¡£
×éÖ¯DockerfileµÄ˳Ðòʱ£¬×¢Òâ°Ñ¾³£±ä»¯µÄÐзÅÔÚÎļþµÄµ×²¿£¬µ±»º´æÖÐÏà¹ØµÄÎļþ¸Ä±äʱ£¬¾µÏñ»áÖØÐÂÔËÐУ¬¼´Ê¹DockerfileÖеÄÐÐûÓз¢Éú±ä»¯Ò²ÊÇÈç´Ë¡£
Dockerfile ÖеÄÃüÁî
Dockerfile Ö§³Ö13¸öÃüÁ ÆäÖÐһЩÃüÁîÓÃÓÚ¹¹½¨¾µÏñ£¬ÁíÍâһЩÓÃÓÚ´Ó¾µÏñÖÐÔËÐÐÈÝÆ÷£¬ÕâÊÇÒ»¸ö¹ØÓÚÃüÁîʲôʱºò±»Óõ½µÄ±í¸ñ:

BUILD ÃüÁ
FROM - оµÏñÊÇ»ùÓÚÄĸö¾µÏñµÄ
MAINTAINER - ¾µÏñά»¤ÕßµÄÐÕÃûºÍÓÊÏ䵨ַ
COPY - ¿½±´ÎļþºÍĿ¼µ½¾µÏñÖÐ
ADD - ͬCOPYÒ»Ñù£¬µ«»á×Ô¶¯´¦ÀíURLºÍ½âѹtarballѹËõ°ü
RUN - ÔÚÈÝÆ÷ÖÐÔËÐÐÒ»¸öÃüÁ ±ÈÈ磺apt-get install
ONBUILD - µ±¹¹½¨Ò»¸ö±»¼Ì³ÐµÄDockerfileʱÔËÐÐÃüÁî
.dockerignore - ²»ÊÇÒ»¸öÃüÁ µ«ËüÄÜ¿ØÖÆÊ²Ã´Îļþ±»¼ÓÈëµ½¹¹½¨µÄÉÏÏÂÎÄÖУ¬¹¹½¨¾µÏñʱӦ¸Ã°üº¬.gitÒÔ¼°ÆäËüµÄ²»ÐèÒªµÄÎļþ¡£
RUN ÃüÁ
CMD - ÔËÐÐÈÝÆ÷ʱµÄĬÈÏÃüÁ¿ÉÒÔ±»ÃüÁîÐвÎÊý¸²¸Ç
ENV - ÉèÖÃÈÝÆ÷ÄڵĻ·¾³±äÁ¿
EXPOSE - ´ÓÈÝÆ÷Öб©Â¶³ö¶Ë¿Ú£¬ ±ØÐëÏÔʽµÄͨ¹ýÔÚÖ÷»úÉϵÄRUNÃüÁî´øÉÏ-p»òÕß-PÀ´±©Â¶¶Ë¿Ú
VOLUME - Ö¸¶¨Ò»¸öÔÚÎļþϵͳ֮ºóµÄ´æ´¢Ä¿Â¼¡£Èç¹û²»ÊÇͨ¹ýdocker
run -vÉèÖõģ¬ ÄÇô½«±»´´½¨Îª/var/lib/docker/volumes
ENTRYPOINT - Ö¸¶¨Ò»¸öÃüÁî²»»á±»docker run image
cmdÃüÁ¸Ç¡£³£ÓÃÓÚÌṩһ¸öĬÈϵĿÉÖ´ÐгÌÐò²¢Ê¹ÓÃÃüÁî×÷Ϊ²ÎÊý¡£
BUILD, RUNÃüÁî¶¼ÓеÄÃüÁî:
USER - ΪRUN¡¢CMD¡¢ENTRYPOINTÃüÁîÉèÖÃÓû§
WORKDIR - ΪRUN¡¢CMD¡¢ENTRYPOINT¡¢ADD¡¢COPYÃüÁîÉèÖù¤×÷Ŀ¼

ÔËÐеÄÈÝÆ÷
ÈÝÆ÷Æô¶¯ºó£¬½ø³ÌÔÚËü¿ÉÒÔÔËÐеÄÁªºÏÎļþϵͳÖлñµÃÁËеĿÉд²ã¡£
´Ó1.5°æ±¾Æð£¬Ëü»¹¿ÉÒÔÈÃ×î¶¥²ãµÄlayerÉèÖÃΪֻ¶Á£¬Ç¿ÖÆÎÒÃÇΪËùÓÐÎļþÊä³ö£¨ÈçÈÕÖ¾¡¢ÁÙʱÎļþ£©Ê¹ÓÃ¾í¡£
# ÓÃÓÚÓëÈÝÆ÷½»»¥µÄÃüÁî $ docker create # ´´½¨Ò»¸öÈÝÆ÷£¬µ«²»Æô¶¯Ëü $ docker run # ´´½¨²¢Æô¶¯Ò»¸öÈÝÆ÷ $ docker stop # Í£Ö¹ÈÝÆ÷ $ docker start # Æô¶¯ÈÝÆ÷ $ docker restart # ÖØÆôÈÝÆ÷ $ docker rm # ɾ³ýÈÝÆ÷ $ docker kill # ¸øÈÝÆ÷·¢ËÍkillÐźŠ$ docker attach # Á¬½Óµ½ÕýÔÚÔËÐеÄÈÝÆ÷ÖÐ $ docker wait # ×èÈûÖ±µ½ÈÝÆ÷ֹͣΪֹ $ docker exec # ÔÚÔËÐеÄÈÝÆ÷ÖÐÖ´ÐÐÒ»ÌõÃüÁî |
docker run
ÈçÉÏËùÊö£¬ docker runÊÇÓû§Æô¶¯ÐÂÈÝÆ÷µÄÃüÁ ÕâÀïÊÇһЩͨÓõÄÔËÐÐÈÝÆ÷µÄ·½·¨£º

# ½»»¥Ê½ÔËÐÐÈÝÆ÷ $ docker run -it --rm ubuntu |
ÕâÊÇÒ»¸ö¿ÉÒÔÈÃÄãÏñÆÕͨµÄÖն˳ÌÐòÒ»Ñù½»»¥Ê½µÄÔËÐÐÈÝÆ÷µÄ·½·¨£¬ Èç¹ûÄãÏë°Ñ¹ÜµÀÊä³öµ½ÈÝÆ÷ÖУ¬¿ÉÒÔʹÓÃ-tÑ¡Ïî¡£
--interactive (-i) - ½«±ê×¼ÊäÈë·¢Ë͸ø½ø³Ì
-tty (-t) - ¸æËß½ø³ÌÓÐÖÕ¶ËÁ¬½Ó¡£ Õâ¸ö¹¦ÄÜ»áÓ°Ïì³ÌÐòµÄÊä³öºÍËüÈçºÎ´¦ÀíCtrx-CµÈÐźš£
--rm - Í˳öʱɾ³ý¾µÏñ¡£
# ºǫ́ÔËÐÐÈÝÆ÷ $ docker run -d hadoop |
docker run -env
# ÔËÐÐÒ»¸öÃüÃûÈÝÆ÷²¢¸øËü´«Ò»Ð©»·¾³±äÁ¿ $ docker run \ --name mydb \ --env MYSQL_USER=db-user \ -e MYSQL_PASSWORD=secret \ --env-file ./mysql.env \ mysql |
--name - ¸øÈÝÆ÷ÃüÃû£¬ ·ñÔòËüÊÇÒ»¸öËæ»úÈÝÆ÷
--env £¨-e£©- ÉèÖÃÈÝÆ÷ÖеĻ·¾³±äÁ¿
--env-file - ´Óenv-fileÖÐÒýÈëËùÓл·¾³±äÁ¿£¨Í¬LinuxϵÄsource
env-file ¹¦ÄÜ£©
mysql - Ö¸¶¨¾µÏñÃûΪ mysql:lastest
docker run -publish
# ·¢²¼ÈÝÆ÷µÄ80¶Ë¿Úµ½Ö÷»úÉϵÄËæ»ú¶Ë¿Ú $ docker run -p 80 nginx
# ·¢²¼ÈÝÆ÷¶Ë¿Ú80ºÍÖ÷»úÉϵÄ8080¶Ë¿Ú
$ docker run -p 8080:80 nginx
# ·¢²¼ÈÝÆ÷80¶Ë¿Úµ½Ö÷»ú127.0.0.0.1µÄ8080¶Ë¿Ú
$ docker run -p 127.0.0.1:8080:80 nginx
# ·¢²¼ËùÓÐÈÝÆ÷Öб©Â¶µÄ¶Ë¿Úµ½Ö÷»úµÄËæ»ú¶Ë¿ÚÉÏ
$ docker run -P nginx |
nginx ¾µÏñ£¬±ÈÈ籩¶³ö80ºÍ443¶Ë¿Ú¡£
FROM debian:wheezy MAINTAINER NGINX "docker-maint@nginx.com"
EXPOSE 80 443 |
docker run --link
# Æô¶¯postgresÈÝÆ÷£¬¸øËüÆðÃûΪmydb $ docker run --name mydb postgres
# °Ñmydb Á´½Óµ½ myqpp µÄdb
$ docker run --link mydb:db myapp |
Á¬½ÓÈÝÆ÷ÐèÒªÉèÖÃÈÝÆ÷µ½±»Á¬½ÓµÄÈÝÆ÷Ö®¼äµÄÍøÂ磬ÓÐÁ½¼þÊÂÒª×ö£º
ͨ¹ýÈÝÆ÷µÄÁ¬½ÓÃû£¬¸üР/etc/hosts ¡£ ÔÚÉÏÃæµÄÀý×ÓÖУ¬Á¬½ÓÃûÊÇdb£¬
¿ÉÒÔ·½±ãµÄͨ¹ýÃû×ÖdbÀ´·ÃÎÊÈÝÆ÷¡£
Ϊ±©Â¶µÄ¶Ë¿ÚÉèÖû·¾³±äÁ¿¡£Õâ¸öºÃÏñûɶʵ¼ÊÓô¦£¬ÄãÒ²¿ÉÒÔͨ¹ý Ö÷»úÃû:¶Ë¿ÚµÄÐÎʽ·ÃÎʶÔÓ¦µÄ¶Ë¿Ú¡£
docker run limits
»¹¿ÉÒÔͨ¹ýrun limitsÀ´ÏÞÖÆÈÝÆ÷¿ÉÒÔʹÓõÄÖ÷»ú×ÊÔ´
# ÏÞÖÆÄÚ´æ´óС $ docker run -m 256m yourapp
# ÏÞÖÆ½ø³Ì¿ÉÒÔʹÓõÄcpu·ÝÊý(cpu shares)(×ÜCPU·ÝÊýΪ1024)
$ docker run --cpu-shares 512 mypp
# ¸Ä±äÔËÐнø³ÌµÄÓû§Îªwww£¬¶ø²»ÊÇroot£¨³öÓÚ°²È«¿¼ÂÇ£©
$ docker run -u=www nginx |
ÉèÖÃCPU·ÝÊýΪ1024ÖеÄ512·Ý²¢²»Òâζ×Å¿ÉÒÔʹÓÃÒ»°ëµÄCPU×ÊÔ´£¬ÕâÒâζ×ÅÔÚÒ»¸öÎÞÈκÎÏÞÖÆµÄÈÝÆ÷ÖУ¬Ëü×î¶à¿ÉÒÔʹÓÃÒ»°ëµÄ·ÝÊý¡£±ÈÈçÎÒÃÇÓÐÁ½¸öÓÐ1024·ÝµÄÈÝÆ÷£¬ºÍÒ»¸ö512·ÝµÄÈÝÆ÷(1024:1024:512)
£¬ÄÇô512·ÝµÄÄǸöÈÝÆ÷£¬¾ÍÖ»Äܵõ½1/5µÄ×ÜCPU·ÝÊý
docker exec container
docker exec ÔÊÐíÎÒÃÇÔÚÒѾÔËÐеÄÈÝÆ÷ÄÚ²¿Ö´ÐÐÃüÁÕâµãÔÚdebugµÄʱºòºÜÓÐÓá£
# ʹÓÃid 6f2c42c0ÔÚÈÝÆ÷ÄÚ²¿ÔËÐÐshell $ docker exec -it 6f2c42c0 sh |
¾í

¾íÌṩÈÝÆ÷ÍâµÄ³Ö¾Ã´æ´¢¡£ ÕâÒâζ×ÅÈç¹ûÄãÌá½»ÁËеľµÏñ£¬Êý¾Ý½«²»»á±»±£´æ¡£
# Start a new nginx container with /var/log as a volume $ docker run -v /var/log nginx |
Èç¹ûĿ¼²»´æÔÚ£¬Ôò»á±»×Ô¶¯´´½¨Îª£º/var/lib/docker/valumes/ec3c543bc..535
ʵ¼ÊµÄĿ¼Ãû¿ÉÒÔͨ¹ýÃüÁdocker inspect container-id
ÕÒµ½¡£
# Æô¶¯ÐµÄnginxÈÝÆ÷£¬ÉèÖÃ/var/logΪ¾í£¬²¢Ó³Éäµ½Ö÷»úµÄ/tmpĿ¼Ï $ docker run -v /tmp:/var/log nginx |
»¹¿ÉÒÔʹÓÃ--valumes-fromÑ¡Ïî´Ó±ðµÄÈÝÆ÷ÖйÒÔØ¾í¡£
# Æô¶¯ÈÝÆ÷db $ docker run -v /var/lib/postgresql/data --name mydb postgres
# Æô¶¯backupÈÝÆ÷£¬´ÓmydbÈÝÆ÷ÖйÒÔØ¾í
$ docker run --volumes-from mydb backup |
Docker Registry
Docker HubÊÇDockerµÄ¹Ù·½¾µÏñ²Ö¿â£¬Ö§³Ö˽ÓпâºÍ¹²Óп⣬²Ö¿â¿ÉÒÔ±»±ê¼ÇΪ¹Ù·½²Ö¿â£¬Òâζ×ÅËüÓɸÃÏîÄ¿µÄά»¤Õߣ¨»ò¸úËüÓйصÄÈË£©²ß»®¡£
Docker Hub »¹Ö§³Ö×Ô¶¯»¯¹¹½¨À´×ÔGithubºÍBitbucketµÄÏîÄ¿£¬Èç¹ûÆôÓÃ×Ô¶¯¹¹½¨¹¦ÄÜ£¬ÄÇôÿ´ÎÄãÌá½»´úÂëµ½´úÂë¿â¶¼»á×Ô¶¯¹¹½¨¾µÏñ¡£
¼´Ê¹Äã²»ÏëÓÃ×Ô¶¯¹¹½¨£¬Ä㻹ÊÇ¿ÉÒÔÖ±½Ódocker pushµ½Docker Hub£¬Docker pullÔò»áÀÈ¡¾µÏñÏÂÀ´¡£docker
run Ò»¸ö±¾µØ²»´æÔڵľµÏñ£¬Ôò»á×Ô¶¯¿ªÊ¼docker pull²Ù×÷¡£
ÄãÒ²¿ÉÒÔÔÚÈÎÒâµØ·½ÍйܾµÏñ£¬¹Ù·½ÓÐRegistryµÄ¿ªÔ´ÏîÄ¿£¬µ«ÊÇ£¬»¹ÓкܶàBug¡£
´ËÍ⣬Quay¡¢TutumºÍGoogle »¹Ìṩ˽ÓоµÏñÍйܷþÎñ¡£
¼ì²éÈÝÆ÷
¼ì²éÈÝÆ÷µÄÃüÁîÓÐÒ»´ó°Ñ:
$ docker ps # ÏÔʾÔËÐеÄÈÝÆ÷ $ docker inspect # ÏÔʾÈÝÆ÷ÐÅÏ¢£¨°üÀ¨ipµØÖ·£© $ docker logs # »ñÈ¡ÈÝÆ÷ÖеÄÈÕÖ¾ $ docker events # »ñÈ¡ÈÝÆ÷ʼþ $ docker port # ÏÔʾÈÝÆ÷µÄ¹«¿ª¶Ë¿Ú $ docker top # ÏÔʾÈÝÆ÷ÖÐÔËÐеĽø³Ì $ docker diff # ²é¿´ÈÝÆ÷ÎļþϵͳÖиıäµÄÎļþ $ docker stats # ²é¿´¸÷ÖÖγ¶ÈÊý¾Ý¡¢ÄÚ´æ¡¢CPU¡¢ÎļþϵͳµÈ |
ÏÂÃæÏêϸ½²Ò»ÏÂdocker ps ºÍdocker inspect£¬ÕâÁ½¸öÃüÁî×î³£ÓÃÁË¡£
# ÁгöËùÓÐÈÝÆ÷£¬°üÀ¨ÒÑÍ£Ö¹µÄ¡£ $ docker ps --all CONTAINER ID IMAGE COMMAND NAMES 9923ad197b65 busybox:latest "sh" romantic_fermat fe7f682cf546 debian:jessie "bash" silly_bartik 09c707e2ec07 scratch:latest "ls" suspicious_perlman b15c5c553202 mongo:2.6.7 "/entrypo some-mongo fbe1f24d7df8 busybox:latest "true" db_data
# Inspect the container named silly_bartik
# Output is shortened for brevity.
$ docker inspect silly_bartik
1 [{
2 "Args": [
3 "-c",
4 "/usr/local/bin/confd-watch.sh"
5 ],
6 "Config": {
10 "Hostname": "3c012df7bab9",
11 "Image": "andersjanmyr/nginx-confd:development",
12 },
13 "Id": "3c012df7bab977a194199f1",
14 "Image": "d3bd1f07cae1bd624e2e",
15 "NetworkSettings": {
16 "IPAddress": "",
18 "Ports": null
19 },
20 "Volumes": {},
22 }]
|
¼¼ÇÉ»¨ÕÐ
»ñÈ¡ÈÝÆ÷id¡£Ð´½Å±¾Ê±ºÜÓÐÓá£
# Get the id (-q) of the last (-l) run container # »ñÈ¡×îºó(-l)Ò»¸öÆô¶¯µÄÈÝÆ÷id(-q) $ docker ps -l -q c8044ab1a3d0 |
docker inspect¿ÉÒÔ´ø¸ñʽ»¯µÄ×Ö·û´®----GoÓïÑÔÄ£°å×÷Ϊ²ÎÊý£¬ÏêϸÃèÊöËùÐèµÄÊý¾Ý¡£Ð´½Å±¾Ê±Í¬Ê±ÓÐÓá£
$ docker inspect -f '{{ .NetworkSettings.IPAddress }}' 6f2c42c05500 172.17.0.11 |
ʹÓÃdocker execÀ´¸úÔËÐÐÖеÄÈÝÆ÷½øÐн»»¥¡£
# »ñÈ¡ÈÝÆ÷»·¾³±äÁ¿ $ docker exec -it 6f2c42c05500 env
PATH=/usr/local/sbin:/usr...
HOSTNAME=6f2c42c05500
REDIS_1_PORT=tcp://172.17.0.9:6379
REDIS_1_PORT_6379_TCP=tcp://172.17.0.9:6379
... |
ͨ¹ý¾íÀ´±ÜÃâÿ´ÎÔËÐÐʱ¶¼Öؽ¨¾µÏñ£¬ ÏÂÃæÊÇÒ»¸öDockerfile£¬Ã¿´Î¹¹½¨Ê±£¬»á¿½±´µ±Ç°Ä¿Â¼µ½ÈÝÆ÷ÖС£
1 FROM dockerfile/nodejs:latest 2 3 MAINTAINER Anders Janmyr "anders@janmyr.com" 4 RUN apt-get update && \ 5 apt-get install zlib1g-dev && \ 6 npm install -g pm2 && \ 7 mkdir -p /srv/app 8 9 WORKDIR /srv/app 10 COPY . /srv/app 11 12 CMD pm2 start app.js -x -i 1 && pm2 logs 13 |
¹¹½¨²¢ÔËÐоµÏñ:
$ docker build -t myapp . $ docker run -it --rm myapp |
Ϊ±ÜÃâÖØ½¨£¬´´½¨Ò»´ÎÐÔ¾µÏñ²¢ÔÚÔËÐÐʱ¹ÒÔØ±¾µØÄ¿Â¼¡£
°²È«

´ó¼Ò¿ÉÄÜÌý˵¹ýʹÓÃDocker²»ÄÇô°²È«¡£Õâ²»ÊǼٻ°£¬µ«Õâ²»³ÉÎÊÌâ¡£
ĿǰDocker´æÔÚÒÔϰ²È«ÎÊÌ⣺
¾µÏñÇ©Ãûδ±»ÕýÈ·µÄºË×¼¡£
Èç¹ûÄãÔÚÈÝÆ÷ÖÐÓµÓÐrootȨÏÞ£¬ÄÇÄãDZÔÚµÄÓµÓжÔÕæ¸öÖ÷»úµÄrootȨÏÞ¡£
°²È«½â¾ö°ì·¨:
´ÓÄãµÄ˽ÓвֿâÖÐʹÓÃÊÜÐÅÈεľµÏñ
¾¡Á¿²»ÒªÒÔrootÔËÐÐÈÝÆ÷
°ÑÈÝÆ÷ÖеÄrootµ±×÷ÊÇÖ÷»úÉϵÄroot£¿ »¹ÊǰÑÈÝÆ÷µÄ¸ùĿ¼ÉèÖÃΪÈÝÆ÷ÄڵĸùĿ¼
£¿
Èç¹û·þÎñÆ÷ÉÏËùÓеÄÈÝÆ÷¶¼ÊÇÄãµÄ£¬ÄÇÄã²»ÐèÒªµ£ÐÄËûÃÇÖ®¼ä»áÓÐΣÏյĽ»»¥¡£
¡°Ñ¡Ôñ¡±ÈÝÆ÷
ÎÒ¸øÑ¡ÔñÁ½×Ö¼ÓÁËÒýºÅ£¬ ÒòΪĿǰ¸ù±¾Ã»ÓÐÈκαðµÄÑ¡Ôñ£¬ µ«ÊǺܶàÈÝÆ÷°®ºÃÕßÏëÍæÍæ£¬±ÈÈçUbuntuµÄLXD¡¢Î¢ÈíµÄDrawbridge£¬»¹ÓÐRocket¡£
RocketÓÉCoreOS¿ª·¢£¬CoreOSÊÇÒ»¸öºÜ´óµÄÈÝÆ÷ƽ̨¡£ ËûÃÇ¿ª·¢RocketµÄÀíÓÉÊǾõµÃDocker¹«Ë¾ÈÃDocker±äµÃÓ·Ö×£¬²¢ÇÒ»¹ºÍCoreOSÓÐÒµÎñ³åÍ»¡£
ËûÃÇÔÚÕâ¸öеÄÈÝÆ÷ÖУ¬³¢ÊÔÒÆ³ýÄÇЩÒòΪÀúÊ·ÔÒò¶øÁôÏÂÀ´µÄDocker覴ᣲ¢Í¨¹ýsocket
activationÌṩ¼òµ¥µÄÈÝÆ÷ºÍ³¹µ×µÄ°²È«¹¹½¨¡£

񅏏
µ±ÎÒÃǰÑÓ¦ÓóÌÐò²ð¿ªµ½¶à¸ö²»Í¬µÄÈÝÆ÷ÖÐʱ£¬»á²úÉúһЩеÄÎÊÌâ¡£ÔõôÈò»Í¬µÄ²¿·Ö½øÐÐͨÐÅÄØ£¿ ÕâЩÈÝÆ÷ÔÚµ¥¸öÖ÷»úÉÏÔõô°ì£¿
¶à¸öÖ÷»úÉÏÓÖÊÇÔõô´¦Àí£¿
µ¥¸öÖ÷»úÉÏ£¬Dockerͨ¹ýÁ¬½ÓÀ´½â¾ö±àÅŵÄÎÊÌâ¡£
Ϊ¼ò»¯ÈÝÆ÷µÄÁ´½Ó²Ù×÷£¬DockerÌṩÁËÒ»¸ö½Ðdocker-composeµÄ¹¤¾ß¡££¨ÒÔǰËü½Ðfig,
ÓÉÁíÒ»¼Ò¹«Ë¾¿ª·¢£¬È»ºó×î½üDockerÊÕ¹ºÁËËûÃÇ£©

docker-composeÔÚµ¥¸ödocker-compose.ymlÎļþÖÐÉùÃ÷¶à¸öÈÝÆ÷µÄÐÅÏ¢¡£À´¿´Ò»¸öÀý×Ó£¬¹ÜÀíwebºÍredisÁ½¸öÈÝÆ÷µÄÅäÖÃÎļþ£º
1 web: 2 build: . 3 command: python app.py 4 ports: 5 - "5000:5000" 6 volumes: 7 - .:/code 8 links: 9 - redis 10 redis: 11 image: redis |
Æô¶¯ÉÏÊöÈÝÆ÷£¬¿ÉÒÔʹÓÃdocker-compose upÃüÁî
$ docker-compose up Pulling image orchardup/redis... Building web... Starting figtest_redis_1... Starting figtest_web_1... redis_1 | [8] 02 Jan 18:43:35.576 # Server started, Redis version 2.8.3 web_1 | * Running on http://0.0.0.0:5000/ |
Ò²¿ÉÒÔͨ¹ýdetachedģʽ£¨detached mode£©Æô¶¯£º docker-compose up
-d£¬È»ºó¿ÉÒÔͨ¹ýdocker-compose ps²é¿´ÈÝÆ÷ÖÐÅÜÁËɶ¶«Î÷:
$ docker-compose up -d Starting figtest_redis_1... Starting figtest_web_1... $ docker-compose ps Name Command State Ports ------------------------------------------------------------ figtest_redis_1 /usr/local/bin/run Up figtest_web_1 /bin/sh -c python app.py Up 5000->5000 |
»¹¿ÉÒÔͬʱÈÃÃüÁîÔÚÒ»¸öÈÝÆ÷»òÕß¶à¸öÈÝÆ÷ÖÐͬʱ¹¤×÷¡£
# ´ÓwebÈÝÆ÷ÖлñÈ¡»·¾³±äÁ¿ $ docker-compose run web env
# À©Õ¹µ½¶à¸öÈÝÆ÷ÖÐ(Scale to multiple containers)
$ docker-compose scale web=3 redis=2
# ´ÓËùÓÐÈÝÆ÷Öзµ»ØÈÕÖ¾ÐÅÏ¢
$ docker-compose logs |
´ÓÒÔÉÏÃüÁî¿ÉÒÔ¿´³ö£¬À©Õ¹ºÜÈÝÒ×£¬²»¹ýÓ¦ÓóÌÐò±ØÐëд³ÉÖ§³Ö´¦Àí¶à¸öÈÝÆ÷µÄ·½Ê½¡£ÔÚÈÝÆ÷Í⣬²»Ö§³Ö¸ºÔؾùºâ¡£
DockerÍйÜ
ºÜ¶à¹«Ë¾Ïë×öÔÚÔÆÖÐÍйÜDockerµÄÉúÒ⣬ÈçÏÂͼ¡£

ÕâЩÌṩÉ̳¢ÊÔ½â¾ö²»Í¬µÄÎÊÌ⣬ ´Ó¼òµ¥µÄÍйܵ½×ö"ÔÆ²Ù×÷ϵͳ"¡£ÆäÖÐÓÐÁ½¼Ò±È½ÏÓÐǰ¾°£º
CoreOS
ÈçÉÏͼËùʾ£¬CoreOSÊÇ¿ÉÒÔÔÚCoreOS¼¯ÈºÖÐÍйܶà¸öÈÝÆ÷µÄһϵÁзþÎñµÄ¼¯ºÏ£º

CoreOS Linux·¢ÐаæÊDzüôµÄLinux£¬ÔÚ³õ´ÎÆô¶¯Ê±Ê¹ÓÃ114MBµÄRAM£¬Ã»Óаü¹ÜÀíÆ÷£¬
ʹÓÃDocker»òÕßËü×Ô¼ºµÄRocketÔËÐÐÒ»ÇгÌÐò¡£
CoreOS ʹÓÃDocker£¨»òRocket£©ÔÚÖ÷»úÉϰ²×°Ó¦Óá£
ʹÓÃsystemd×÷Ϊinit·þÎñ£¬ËüµÄÐÔÄܳ¬¼¶ºÃ£¬»¹ÄܺܺõĴ¦ÀíÆô¶¯ÒÀÀµ¹ØÏµ£¬
Ç¿´óµÄÈÕ־ϵͳ£¬»¹Ö§³Ösocket-activation¡£
etcd ÊÇ·Ö²¼Ê½µÄ£¬Ò»ÖÂÐÔ K-V ´æ´¢ÓÃÓÚÅäÖù²ÏíºÍ·þÎñ·¢ÏÖ¡£
fleet£¬¼¯Èº¹ÜÀíÆ÷£¬ÊÇsystemdµÄÀ©Õ¹£¬ÄÜÓë¶ą̀»úÆ÷¹¤×÷£¬²ÉÓÃetcdÀ´¹ÜÀíÅäÖò¢ÔËÐÐÔÚÿһ¸ǫ̈CoreOS·þÎñÆ÷ÉÏ¡£
AWS
DockerÈÝÆ÷ÍйÜÔÚAmazonÓÐÁ½ÖÖ;¾¶£º
Elastic Beanstalk²¿ÊðDockerÈÝÆ÷£¬Ëü¹¤×÷µÄºÜºÃ£¬µ«¾ÍÊÇÌ«ÂýÁË£¬ Ò»´ÎȫеIJ¿ÊðÐèÒªºÃ¼¸·ÖÖÓ£¬¸Ð¾õ¸úÒ»°ãµÄÈÝÆ÷Ãë¼¶Æô¶¯²»´ó¶Ô¾¢¡£
ECS¡¢Elastic Container ServerÊÇAmazonÉÏÓÎÈÝÆ÷¼¯Èº½â¾ö·½°¸£¬ Ŀǰ»¹ÔÚÔ¤ÀÀ°æ3£¬¿´ÆðÀ´ºÜÓÐǰ;£¬¸úAmazonÆäËü·þÎñÒ»Ñù£¬Í¨¹ý¼òµ¥µÄweb
serviceµ÷ÓÃÓëËü½»»¥¡£
×ܽá
Docker is here to stay
½â¾öÁËÒÀÀµÎÊÌâ
ÈÝÆ÷¸÷·½Ãæ¶¼ºÜ¿ì
Óм¯Èº½â¾ö·½°¸£¬µ«²»ÄÜÎÞ·ì¶Ô½Ó
|