Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Dockerfiles×î¼Ñʵ¼ù¾­Ñé
 
×÷Õߣº zioer  À´Ô´;.infoq ·¢²¼ÓÚ 2016-7-26
  2569  次浏览      27
 

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 -e

if [ "$1" = 'postgres' ]; then

chown -R postgres "$PGDATA"

if [ -z "$(ls -A "$PGDATA")" ]; then

gosu postgres initdb

fi

exec gosu postgres "$@"

fi

exec "$@"

˵Ã÷: ½Å±¾Ê¹ÓÃÁËexecbashÃüÁÒò´ËÔËÐнű¾ºóµÄÓ¦Óýø³ÌÔÚÈÝÆ÷ÖеÄPIDΪ1,ÕâÑù¿ÉÒÔ±£Ö¤½ø³Ì½ÓÊÕµ½Èκη¢Ë͸øÈÝÆ÷µÄUNIXÐźš£

Õâ¸ö°ïÖú½Å±¾»á±»¿½±´µ½ÈÝÆ÷ÖУ¬È»ºóͨ¹ýENTRYPOINTÖ¸ÁîÔÚÈÝÆ÷ÖÐÖ´ÐС£

 COPY ./docker-entrypoint.sh /

ENTRYPOINT ["/docker-entrypoint.sh"]

½Å±¾ÔÊÐíÓû§Ê¹ÓöàÖÖ·½Ê½½øÐн»»¥¡£ÏÂÃæÊÇÒ»ÖÖ¼òµ¥µÄ·½Ê½:

 $ docker run postgres

Ò²¿ÉÒÔÔÚÔËÐÐʱͨ¹ý´«Èë²ÎÊý¸ø·þÎñ:

 $ 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×÷ÕßÀ´×ö¾ö¶¨¡£

 

 
 
 
 
 
 
 
   
2569 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ