Docker ¿ÉÒÔͨ¹ý´ÓDockerfile¶ÁȡָÁî×Ô¶¯¹¹½¨¾µÏñ£¬DockerfileÀàËÆÓÚMakefile£¬¶¼ÊÇÒ»ÖÖÎı¾Îļþ£¬°´ÕÕ¹¹½¨¾µÏñ˳Ðò×éÖ¯°üº¬ËùÓеÄÃüÁî¡£Dockerfile²ÉÓÃÌØ¶¨¸ñʽºÍÌØ¶¨µÄÖ¸ÁºÏ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýÔĶÁ Dockerfile²Î¿¼Ò³ÃæÀ´Á˽â»ù´¡ÃüÁîµÄʹÓá£Èç¹ûÄúÊDZàдDockerfileµÄÐÂÊÖ£¬½¨ÒéÄú´ÓÕâÀ↑ʼ¡£ ±¾Îĵµ¸²¸Ç×î¼ÑµÄʵÀýºÍDocker,IncºÍÖÂÁ¦ÓÚ´´½¨Ò×ÓøßЧDockerfileµÄDockerÉçÇøÍÆ¼öµÄ·½·¨£¬Ç¿ÁÒÍÆ¼ö´ó¼Ò׼ѰÕâЩ½¨Òé(ÊÂʵÉÏ£¬Èç¹ûÎÒÃÇÏëÒª´´½¨Ò»¸ö¹Ù·½¾µÏñ£¬ÎÒÃDZØÐë²ÉÓÃÕâЩʵ¼ù¾Ñé)¡£
ÎÒÃÇ¿ÉÒÔ¿´µ½ÕâЩ¾ÑéºÍ½¨ÒéÔÚbuildpack-depsÏÂDockerfileµÄ×÷Óá£
Ò»°ã×¼ÔòºÍ½¨Òé
ÈÝÆ÷Ó¦¸ÃÊǶÌÔÝµÄ ÓÉDockerfile¶¨ÒåµÄ¾µÏñ²úÉúµÄÈÝÆ÷Ó¦¸Ã¾¡¿ÉÄܵĶÌÔݵġ£´Ë´¦¶ÌÔݵÄÒâ˼ÊÇÈÝÆ÷¿ÉÒÔ±»Í£Ö¹¡¢Ïú»Ù²¢ÇÒ¿ÉÒÔ¾¹ý×îСµÄ°²×°ºÍÅäÖþͿÉÒÔÖØÐ´´½¨ºÍ²¿Êð¡£
ʹÓÃ.dockerignoreÎļþ Õâ¸öÎļþµÄ×÷ÓðïÖúÎÒÃÇÔÚ¹ýÂËһЩÎļþÀ´Ìá¸ßÎÒÃÇ´´½¨¾µÏñµÄЧÂÊ£¬Ö§³ÖģʽƥÅ乿ÔòÀàËÆÓë.gitignoreÎļþ¡£Í¨¹ýÔĶÁ .dockerignore fileÀ´Á˽âÈçºÎʹÓá£
±ÜÃâ°²×°²»±ØÒªµÄ°ü ΪÁ˼õС¸´ÔÓ¶È¡¢ÒÀÀµ¡¢Îļþ´óСºÍ´´½¨µÄʱ¼ä£¬ÎÒÃÇÓ¦¸Ã±ÜÃâ°²×°¶îÍâ»òÕß²»±ØÒªµÄ°ü¡£ÀýÈ磬ÎÒÃDz»±ØÔÚÒ»¸öÊý¾Ý¿â¾µÏñÖаüº¬Ò»¸öÎı¾±à¼Æ÷¡£
Ò»¸öÈÝÆ÷½öÔËÐÐÒ»¸ö½ø³Ì ÔÚ¼¸ºõËùÓеÄÇé¿öÏ£¬ÎÒÃÇÓ¦¸ÃÒ»¸öÈÝÆ÷ÔËÐÐÒ»¸ö½ø³Ì¡£
¶à¸öÈÝÆ÷ÖеĽâñîÓ¦Óøü¼ÓÈÝÒ׺áÏòÀ©Õ¹ºÍ¸´ÓÃÈÝÆ÷¡£Èç¹ûÒ»¸ö·þÎñÒÀÀµÁíÒ»¸öÈÝÆ÷£¬Ê¹Óà ÈÝÆ÷Á¬½Ó[1]¡£
±£Ö¤¾µÏñµÄ²ãÊýµÄ×îС»¯ ÎÒÃÇÐèÒªÁ˽â¿É¶ÁÐÔºÍ×îС»¯²ãÊýµÄƽºâ¹ØÏµ¡£¶ÔÓÚ²ãÊýµÄ¿ØÖÆÒªÓвßÂÔ²¢ÇÒ½÷É÷¡£
¶ÔÓÚ¶àÐвÎÊýÒª×ö×ÖµäÐòÅÅÐò Ö»ÒªÓпÉÄÜ£¬Í¨¹ý¶Ô¶àÐвÎÊý½øÐÐ×ÖĸÊý×ÖÅÅÐòÀ´»º½âºóÐø±ä¸ü¡£Õ⽫°ïÖúÄã±ÜÃâÖØ¸´µÄ°ü²¢ÇÒ¸üÈÝÒ׸üС£Õ⽫¶ÔPRsÀ´Ëµ¸üÈÝÒ×ÔĶÁºÍ¸´Éó¡£ÔÚ·´Ð±Ïß( \ )ǰÌí¼ÓÒ»¸ö¿Õ¸ñÊǸçºÃϰ¹ß¡£
RUN apt-get update && apt-get install -y \
bzr \
cvs \
git \
mercurial \
subversion |
buildµÄ»º´æ ÎÒÃÇÔÚ´´½¨¾µÏñ¹ý³ÌÖУ¬Docker½«°´ÕÕDockerfileÖ¸¶¨²½ÖèÖ´ÐÐÿ¸öÖ¸Áî¡£ÒòΪÿ¸öÖ¸Áî¶¼»á±»¼ì²é£¬Docker½«»á²éÕÒÒѾ´æÔڵľµÏñµÄ»º´æ¿´ÊÇ·ñ¿ÉÒÔ¸´Ó㬶ø²»ÊÇÖØ¸´´´½¨Ò»¸öеľµÏñ¡£ÎÒÃÇ¿ÉÒÔÔÚdocker buildÃüÁîÖÐʹÓÃ--no-cache=trueÑ¡Ïî¡£ È»¶ø£¬Èç¹ûÎÒÃÇÔÊÐíDockerʹÓÃËüµÄ»º´æ,Õâ¶ÔÓÚÎÒÃÇÀí½âËüºÎʱ²éÕÒÒ»¸öÆ¥Åä¾µÏñ·Ç³£ÓаïÖú¡£Æ¥ÅäµÄ»ù´¡¹æÔòÈçÏ£º ¿ªÊ¼ÓÚÒ»¸öÒѾ´æÔÚÓÚ»º´æÖеĻù´¡¾µÏñ£¬ÏÂÒ»¸öÖ¸Á»á±È½ÏËùÓм¯³É´Ë¾µÏñµÄ×Ó¾µÏñÀ´²é¿´ÊÇ·ñÓÐÏàͬµÄÖ¸Áî¡£Èç¹ûûÓУ¬Õâ¸ö»º´æÊÇÎÞЧµÄ¡£
ÔÚ´ó¶àÊýÇé¿öÏ£¬¼òµ¥µÄ½«DockerfileµÄÖ¸ÁîÓëÈÎÒ»Ò»¸ö×Ó¾µÏñ±È½ÏÊÇ×ã¹»µÄ¡£È»¶øÒ»Ð©Ö¸ÁîÐèÒª¸ü¶àһЩµÄ¼ì²éºÍ˵Ã÷¡£
¶ÔÓÚADDºÍCOPYÖ¸Á¾µÏñÖеÄÎļþÄÚÈݱ»¼ì²é²¢ÇÒΪÿ¸öÎļþ¼ÆËãÉú³ÉÒ»¸öУÑéºÍ¡£ÎļþµÄ×îºóÐÞ¸Äʱ¼äºÍ×îºó·ÃÎÊʱ¼ä²»±»Ìí¼Óµ½Ð£ÑéºÍÖС£ÔÚ²éÕÒ»º´æÊ±£¬½«»áʹÓôËУÑéºÍ½øÐбȽϡ£Èç¹ûÎļþ±»Ð޸Ļº´æ¾Í»áʧЧ(ÀýÈçÄÚÈÝ»òÕßÔªÊý¾Ý)¡£
³ýÁËADDºÍCOPYÖ¸Á»º´æ¼ì²é²»»á²é¿´ÈÝÆ÷ÖеÄÎļþÀ´¾ö¶¨»º´æµÄÆ¥Åä¡£ÀýÈ磬RUN apt-get -y updateÃüÁî¸üÐÂÈÝÆ÷ÖеÄÎļþ£¬²¢²»»áÓ°Ïìµ½ËüµÄ»º´æÄÚÈÝ¡£ÕâÖÖÇé¿öϽöʹÓÃÃüÁî×Ö·û´®½øÐÐÆ¥Åä¡£Ò»µ©»º´æÎÞЧÁË£¬ËùÓÐËæºóµÄDockerfileÃüÁ»áÉú³ÉеľµÏñ¶øÇÒ²»»áʹÓõ½»º´æÄÚÈÝ¡£
Dockerfile Ö¸Áî½éÉÜ ÒÔÏÂÌṩÁËһЩ½¨Ò飬Ëü»á°ïÖúÎÒÃDZàд¸üºÃµÄDockerfile¡£
FROM ¾¡¿ÉÄÜʹÓùٷ½²Ö¿â×÷Ϊ»ù´¡¾µÏñ¡£ÍƼöʹÓÃDebian imageÒòΪËüÊÇÑϸñ¿ØÖƵIJ¢ÇÒÕ¼Óô洢±È½ÏС(150MB×óÓÒ)£¬Ä¿Ç°ÈÔÔÚÈ«Á¿·Ö·¢¡£
RUN ΪÁËʹµÃDockerfile¸ü¿É¶Á¡¢¸üÈÝÒ×Àí½âºÍά»¤£¬¾¡Á¿½«µ¥Ðг¤µÄ¸´ÔÓµÄRUNÓï¾ä²ð·ÖΪÓ÷´Ð±Ïß( \ )·Ö¸ôµÄ¶àÐС£
apt-get RUN apt-get¾³£ÓÃÀ´°²×°°ü£¬µ«ËûÓÐһЩÏÝÚåÐèҪСÐÄ¡£
ÎÒÃÇÒª±ÜÃâÔËÐÐRUN apt-get upgrade»òÕßdist-upgradeÃüÁÒòΪºÜ¶à»ù´¡¾µÏñ¡°±ØÒª¡±µÄ°ü²»Ó¦¸ÃÔÚÈÝÆ÷ÖиüС£Èç¹ûÒ»¸ö°ü¹ýÆÚÁË£¬ÎÒÃÇÐèÒªÁªÏµËüµÄά»¤Õß¡£Èç¹ûÎÒÃÇÖªµÀÓÐÒ»¸öÌØÊâ°üfooÐèÒª¸üУ¬Ê¹ÓÃapt-get install -y fooÀ´×Ô¶¯¸üм´¿É¡£
ÎÒÃǾ³£½áºÏupdateºÍinstall ÔÚͬһ¸öRUNÓï¾äÖУ¬ÈçÏÂ:
RUN apt-get update && apt-get install -y \
package-bar \
package-baz \
package-foo |
µ¥¶ÀʹÓÃapt-get update»áÒýÆð»º´æÎÊÌ⣬²¢ÇÒËæºóµÄapt-get installÖ¸Áî»áʧ°Ü¡£ÀýÈçÈçϵÄDockerfileÄÚÈÝ:
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y curl |
´´½¨¾µÏñºó£¬ËùÓв㶼ÔÚDockerµÄ»º´æÖС£¼ÙÈçÄãºóÀ´ÐÞ¸ÄÁËapt-get installͨ¹ýÌí¼Ó¶îÍâ°ü :
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y curl nginx |
½á¹ûRUN apt-get update²»»á±»Ö´ÐУ¬ÎÒÃǵĴ´½¨½á¹û¿ÉÄÜ»á»ñµÃÒ»¸ö¹ýÆÚ°æ±¾µÄcurlºÍnginx°ü¡£ ʹÓÃÈçÏÂÃüÁî¾Í¿ÉÒÔÈ·±£Ã¿´Î°²×°µÄ¶¼ÊÇ×îа汾µÄ°ü¡£Õâ¸ö¼¼ÊõÒÔcache busting(»º´æÊ§Ð§)Öø³Æ¡£ÎÒÃÇÒ²¿ÉÒÔͨ¹ýÖ¸¶¨°ü°æ±¾À´´ïµ½Í¬ÑùµÄЧ¹û¡£ÕâÖÖ·½·¨ÃüÃûΪ´©¶¤°æ±¾¡£ÈçÏÂʾÀý:
RUN apt-get update && apt-get install -y \
package-bar \
package-baz \
package-foo=1.3.* |
´©¶¤°æ±¾¼¼ÊõÇ¿ÆÈ´´½¨¾µÏñ»ñȡָ¶¨°æ±¾£¬Õâ¶î¼¼Êõ¿ÉÒÔ¼õÉÙÒòÒÀÀµ°üµÄÒâÍâ±ä¸üµ¼ÖµÄʧ°ÜÂÊ¡£ ÒÔÏÂÊÇÒ»¸ö½¨ÒéʹÓõÄRUNÃüÁîʾÀý:
RUN apt-get update && apt-get install -y \
aufs-tools \
automake \
build-essential \
curl \
dpkg-sig \
libcap-dev \
libsqlite3-dev \
mercurial \
reprepro \
ruby1.9.1 \
ruby1.9.1-dev \
s3cmd=1.1.* \
&& rm -rf /var/lib/apt/lists/* |
s3cmdÃüÁîÖ¸¶¨Îª1.1.* °æ±¾¡£Èç¹ûÒÔǰ¾µÏñʹÓõÄÊÇÒ»¸öÀϰ汾£¬Õâ¾Í»áµ¼ÖÂÒ»¸ö»º´æÎÞЧ£¬Ö´ÐÐapt-get updateÃüÁîÈ»ºó°²×°Õâ¸öа汾¡£
ÁíÍ⣬ÇåÀíapt»º´æ²¢ÇÒɾ³ý/var/lib/apt/lists¿ÉÒÔ¼õС¾µÏñµÄ´óС¡£ÓÉÓÚRUNÓï¾ä¿ªÊ¼ÓÚapt-get update£¬°ü»º´æ½«×ÜÊÇ֮ǰµÄapt-get install±»Ë¢Ð¡£ ˵Ã÷: ¹Ù·½µÄDebianºÍUbuntu¾µÏñ×Ô¶¯ÔËÐÐapt-get clean,ËùÒÔûÓбØÒªÃ÷È·µ÷Óá£
CMD CMDÖ¸ÁîÓ¦¸ÃÓÃÓÚÔËÐоµÏñÖаüº¬µÄÈí¼þ£¬Í¬Ê±¿ÉÒÔЯ´øÈÎÒâµÄ²ÎÊý¡£CMDÓ¦¸Ã×ÜÊÇʹÓÃexec¸ñʽ(CMD["executable", "param1", "param2"...]).Òò´ËÈç¹û¾µÏñÊÇÓÃÀ´Ìṩһ¸ö·þÎñ(Apache,Rails,etc)£¬ÎÒÃÇÓ¦¸ÃÏñÕâÑùÖ´ÐÐCMD["apache2", "-DFOREGROUND"]¡£Êµ¼ÊÉÏ£¬ÍƼöÈκÎÌṩ·þÎñµÄ»ù´¡¾µÏñ¶¼Ê¹ÓÃÕâÖÖÖ¸ÁîµÄ¸ñʽ¡£ ÔÚ´ó¶àÊýÇé¿öÏ£¬CMDÓ¦¸ÃÌṩһ¸ö½»»¥µÄshell(bash,python,perl,etc)£¬ÀýÈç,CMD["perl","-de0"]£¬CMD["python"],»òÕßCMD["php", "-a"].CMDÓ¦¸ÃÉÙÓÃÓÚCMD["param","param"]µÄ·½Ê½ÓëENTRYPOINTÁªºÏʹÓÃ,³ý·ÇÎÒÃǶÔENTRYPOINTµÄ¹¤×÷ÔÀí·Ç³£Á˽âÁË¡£
EXPOSE EXPOSEÖ¸ÁîָʾÈÝÆ÷½«Òª¼àÌýÁ¬½ÓµÄ¶Ë¿Ú¡£ËùÒÔÎÒÃÇÓ¦¸ÃʹÓÃͨÓõġ¢´«Í³µÄ¶Ë¿Ú¸øÎÒÃǵÄÓ¦Óá£ÀýÈç°üº¬ApacheµÄweb·þÎñµÄ¾µÏñ½«Ê¹ÓÃEXPOSE 80£¬Ò»¸ö°üº¬MongoDB·þÎñµÄ¾µÏñʹÓÃEXPOSE 27017µÈµÈ¡£
ENV ΪÁËʹµÃÐÂÈí¼þ¸üÈÝÒ×ÔËÐУ¬ÎÒÃdz£Ê¹ÓÃENV¸üÐÂPATH»·¾³±äÁ¿£¬ÀýÈçENV PATH /usr/local/nginx/bin:$PATH½«ÒªÈ·±£CMD["nginx"]¿ÉÒÔ¹¤×÷¡£
ADD or COPY ADDºÍCOPY¹¦ÄÜÏàËÆ£¬COPYÊÇÊ×Ñ¡¡£ÒòΪËü±ÈADD¸ü¼Ó͸Ã÷.COPY½öÖ§³Ö»ù´¡µÄ±¾µØÎļþ¿½±´µ½ÈÝÆ÷ÖУ¬ADDÓÐÐ©ÌØÐÔ(±¾µØtar°ü½âѹºÍÔ¶³ÌURLÖ§³Ö) ²»»áÁ¢¼´ÏÔʾ¡£ADD×îºÃµÄÓ¦ÓÃÊDZ¾µØtar°ü×Ô¶¯½âѹµ½¾µÏñÖУ¬ÈçADD rootfs.tar.xz /¡£ Èç¹ûÎÒÃÇÔÚDockerfileÖÐÓжà¸ö²½ÖèʹÓò»Í¬Îļþ£¬Öð¸öCOPYÕâЩÎļþ£¬¶ø²»ÊÇ¿½±´ËùÓÐÎļþ¡£ÕâÑùÈ·±£Ã¿²½ÖèµÄ»º´æ»á»¹ÖØÐ¸üС£
COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/ |
³öÓÚ¾µÏñ´óС¿¼ÂÇ£¬Ç¿ÁÒ²»½¨ÒéʹÓÃADD»ñȡԶ³ÌURLµØÖ·µÄ°ü£¬ÎÒÃÇÓ¦¸ÃʹÓÃcurl»òÕßwgetÌæ´ú¡£ÕâÑùÎÒÃÇ¿ÉÒÔÔÚ½âѹºóɾ³ý²»ÓõÄÎļþ£¬¶ø²»±ØÌí¼Óµ½¾µÏñµÄÁíÒ»²ã¡£ÎÒÃDZÜÃâʹÓÃÈçÏÂÐÎʽ:
ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all |
Ó¦¸ÃÌæ»»³ÉÈçÏÂÐÎʽ:
RUN mkdir -p /usr/src/things \
curl -SL http://example.com/big.tar.xz \
| tar -xJC /usr/src/things \
make -C /usr/src/things all |
ENTRYPOINT ENTRYPOINT×îºÃÓÃÓÚÉèÖþµÏñµÄÖ÷ÒªÃüÁÔÊÐí¾µÏñ±»ÔËÐÐÈçͬËüÊÇÒ»¸öÃüÁîÒ»Ñù¡£ ÎÒÃÇÀ´¿´ÏÂÕâ¸öÀý×Ó:
ENTRYPOINT ["s3cmd"]
CMD ["--help"] |
ʹÓÃÕâ¸ö¾µÏñÔËÐÐÏÂÃæµÄÃüÁî:
$ docker run s3cmd --help |
»òÕßʹÓÃÓÒÃæµÄ²ÎÊýÀ´Ö´ÐÐÒ»¸öÃüÁî:
$ docker run s3cmd ls s3://mybucket |
×¢Òâµ½¾µÏñµÄÃû×ÖÓÖ¿ÉÒÔ×÷Ϊһ¸öËü°üº¬µÄ¿ÉÖ´ÐгÌÐòµÄ²Î¿¼£¬Õâ¶ÔÓÚÎÒÃÇÀí½â¾µÏñ×÷ÓÃÊÇÓаïÖúµÄ¡£ ENTRYPOINTÖ¸Áî¿ÉÒÔÓÃÀ´Óë°ïÖú½Å±¾½áºÏʹÓá£ÈçÏÂʾÀý:
#!/bin/bash
set -eif [ "$1" = 'postgres' ]; then
chown -R postgres "$PGDATA" if [ -z "$(ls -A "$PGDATA")" ]; then
gosu postgres initdb
fi exec gosu postgres "$@"
fiexec "$@" |
˵Ã÷: ½Å±¾Ê¹ÓÃÁËexecbashÃüÁÒò´ËÔËÐнű¾ºóµÄÓ¦Óýø³ÌÔÚÈÝÆ÷ÖеÄPIDΪ1,ÕâÑù¿ÉÒÔ±£Ö¤½ø³Ì½ÓÊÕµ½Èκη¢Ë͸øÈÝÆ÷µÄUNIXÐźš£ Õâ¸ö°ïÖú½Å±¾»á±»¿½±´µ½ÈÝÆ÷ÖУ¬È»ºóͨ¹ýENTRYPOINTÖ¸ÁîÔÚÈÝÆ÷ÖÐÖ´ÐС£
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"] |
½Å±¾ÔÊÐíÓû§Ê¹ÓöàÖÖ·½Ê½½øÐн»»¥¡£ÏÂÃæÊÇÒ»ÖÖ¼òµ¥µÄ·½Ê½:
Ò²¿ÉÒÔÔÚÔËÐÐʱͨ¹ý´«Èë²ÎÊý¸ø·þÎñ:
$ docker run postgres postgres --help |
×îºóÒ²¿ÉÒÔͨ¹ý½»»¥µÄBash¡¢Perl¡¢pythonµÈ¹¤¾ßÀ´Ö´ÐÐ:
$ docker run --rm -it postgres bash |
VOLUME VOLUMEÖ¸ÁîÓ¦¸ÃÓÃÓÚÈçÏÂÄÚÈÝ:ÈκÎÀàÐ͵ÄÊý¾Ý¿â´æ´¢ÇøÓò¡¢ÅäÖô洢¡¢ÈÝÆ÷´´½¨µÄÎļþ»òĿ¼¡£
ÍÆ¼öVOLUMEÓÃÓÚ¹ÒÔØ¾µÏñÖÐÄÇЩ¾³£±ä»¯(Òױ仯µÄ)»òÕßÓû§¿Éά»¤µÄ²¿·Ö¡£
USER Ò»¸ö·þÎñÈç¹û²»ÐèÒª³¬¼¶È¨ÏÞ£¬½¨ÒéʹÓÃUSERÇл»³É·ÇrootÓû§Ö´ÐС£ÔÚDockerfileÖд´½¨Óû§ºÍ×éµÄ·½Ê½ÈçÏÂ:
RUN groupadd -r postgres && useradd -r -g postgres postgres |
˵Ã÷: ÖØ½¨¾µÏñʱÈç¹û²»Ã÷È·Ö¸¶¨UID/GID£¬ÎÒÃÇÿ´Î¿ÉÄܵõ½µÄUID/GID¶¼²»»áÒ»Ñù£¬Òò´ËÎÒÃÇÓ¦¸ÃÃ÷È·µÄÖ¸¶¨UID/GID¡£ ÎÒÃǾ¡Á¿±ÜÃâ°²×°ºÍʹÓÃsudo£¬ÒòΪËüÓв»¿ÉÔ¤ÖªµÄTTYºÍÐźÅת·¢ÐÐΪ£¬Õâ»á¸øÎÒÃÇ´øÀ´¸ü¶àÎÊÌâÐèÒª½â¾ö¡£ÎÒÃÇ¿ÉÒÔʹÓÃgosuÌæ´úËü¡£ ×îºó£¬ÎªÁ˼õÉÙ²ãÊýºÍ¸´ÔÓ¶È£¬±ÜÃâÆµ·±Ê¹ÓÃUSER½øÐÐÓû§Çл»¡£
WORKDIR ΪÁËÇåÎú¶ÈºÍ¿É¿¿ÐÔ£¬ÎÒÃÇÓ¦¸ÃÈ·±£WORKDIRÔÚ¾µÏñÖÐʹÓþø¶Ô·¾¶¡£ÎÒÃÇÓ¦¸ÃʹÓÃWORKDIR¶ø²»ÊÇʹÓÃÀàËÆÕâЩָÁîRUN cd ... && do-something £¬Õâ»áÓ°ÏìÆä¿É¶ÁÐÔ¡¢ÎÊÌⶨλºÍ¿Éά»¤ÐÔ¡£
ONBUILD ONBUILDÖ¸ÁîÔÚÖ´ÐÐDockerfile´´½¨Ð¾µÏñºó»á´æ´¢µ½¾µÏñµÄmanifestÇåµ¥ÖУ¬ÎÒÃÇ¿ÉÒÔͨ¹ýdocker inspect²é¿´OnBuildµÄÐÅÏ¢¡£ µ±ÎÒÃÇʹÓôøÓÐONBUILD´¥·¢Æ÷µÄ¾µÏñ×÷Ϊ»ù´¡¾µÏñÀ´´´½¨Ð¾µÏñʱ£¬µ±DockerfileÖ´Ðе½FROMʱ»á×Ô¶¯²éÕÒOnBuildÐÅÏ¢²¢Ö´ÐÐÕâ¸ö´¥·¢Æ÷ÃüÁî¡£³É¹¦ºó¼ÌÐøÏòÏÂÖ´ÐÐÏÂÒ»ÌõÖ¸Áʧ°ÜµÄ»°¾ÍÍ£Ö¹ÏòÏÂÖ´Ðв¢ÖÐÖ¹´´½¨¹ý³Ì¡£Èç¹û³É¹¦´´½¨ÁËеľµÏñºó£¬Õâ¸öоµÏñÖв»»á¼Ì³Ð»ù´¡¾µÏñÖеÄOOnBuild´¥·¢Æ÷ÄÚÈÝ¡£²Î¿¼ Ruby¡¯s ONBUILD variants ´ÓONBUILD´´½¨µÄ¾µÏñÓ¦¸Ãµ¥¶À×öÒ»¸ö±ê¼Ç£¬Èçruby:1.9-onbuild »òÕßruby:2.0-onbuild¡£ µ±°ÑADD»òÕßCOPY¼ÓÈëONBUILDÖÐʱҪСÐÄ£¬Èç¹ûд´½¨¾µÏñµÄÉÏÏÂÎÄȱÉÙÕâЩҪÌí¼ÓµÄ×ÊÔ´Çé¿ö»áµ¼Ö´´½¨µÄʧ°Ü¡£Òò¶øÌí¼Óµ¥¶ÀµÄ±êÇ©¿ÉÒÔ°ïÖúÎÒÃǼõСÕâÖÖÇé¿ö·¢ÉúµÄ¿ÉÄÜ£¬ÈÃDockerfile×÷ÕßÀ´×ö¾ö¶¨¡£
|