Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同

Dockerfile\u91cc\u6307\u5b9a\u6267\u884c\u547d\u4ee4\u7528ENTRYPOING\u548c\u7528CMD\u6709\u4f55\u4e0d\u540c

\u8fd0\u884c\u65f6\u673a\u4e0d\u592a\u4e00\u6837\u3002
RUN\u662f\u5728Build\u65f6\u8fd0\u884c\u7684\uff0c\u5148\u4e8eCMD\u548cENTRYPOINT\u3002Build\u5b8c\u6210\u4e86\uff0cRUN\u4e5f\u8fd0\u884c\u5b8c\u6210\u540e\uff0c\u518d\u8fd0\u884cCMD\u6216\u8005ENTRYPOINT\u3002
ENTRYPOINT\u548cCMD\u7684\u4e0d\u540c\u70b9\u5728\u4e8e\u6267\u884cdocker run\u65f6\u53c2\u6570\u4f20\u9012\u65b9\u5f0f\uff0cCMD\u6307\u5b9a\u7684\u547d\u4ee4\u53ef\u4ee5\u88abdocker run\u4f20\u9012\u7684\u547d\u4ee4\u8986\u76d6\uff0c\u4f8b\u5982\uff0c\u5982\u679c\u7528CMD\u6307\u5b9a\uff1a
...
CMD ["echo"]


\u7136\u540e\u8fd0\u884c
docker run CONTAINER_NAME echo foo


\u90a3\u4e48CMD\u91cc\u6307\u5b9a\u7684echo\u4f1a\u88ab\u65b0\u6307\u5b9a\u7684echo\u8986\u76d6\uff0c\u6240\u4ee5\u6700\u7ec8\u76f8\u5f53\u4e8e\u8fd0\u884cecho foo\uff0c\u6240\u4ee5\u6700\u7ec8\u6253\u5370\u51fa\u7684\u7ed3\u679c\u5c31\u662f\uff1a
foo


\u800cENTRYPOINT\u4f1a\u628a\u5bb9\u5668\u540d\u540e\u9762\u7684\u6240\u6709\u5185\u5bb9\u90fd\u5f53\u6210\u53c2\u6570\u4f20\u9012\u7ed9\u5176\u6307\u5b9a\u7684\u547d\u4ee4\uff08\u4e0d\u4f1a\u5bf9\u547d\u4ee4\u8986\u76d6\uff09\uff0c\u6bd4\u5982\uff1a
...
ENTRYPOINT ["echo"]


\u7136\u540e\u8fd0\u884c
docker run CONTAINER_NAME echo foo


\u5219CONTAINER_NAME\u540e\u9762\u7684echo foo\u90fd\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u7ed9ENTRYPOING\u91cc\u6307\u5b9a\u7684echo\u547d\u4ee4\u4e86\uff0c\u6240\u4ee5\u76f8\u5f53\u4e8e\u6267\u884c\u4e86
echo "echo foo"


\u6700\u7ec8\u6253\u5370\u51fa\u7684\u7ed3\u679c\u5c31\u662f\uff1a
echo foo


\u53e6\u5916\uff0c\u5728Dockerfile\u4e2d\uff0cENTRYPOINT\u6307\u5b9a\u7684\u53c2\u6570\u6bd4\u8fd0\u884cdocker run\u65f6\u6307\u5b9a\u7684\u53c2\u6570\u66f4\u9760\u524d\uff0c\u6bd4\u5982\uff1a
...
ENTRYPOINT ["echo", "foo"]


\u6267\u884c
docker run CONTAINER_NAME bar


\u76f8\u5f53\u4e8e\u6267\u884c\u4e86\uff1a
echo foo bar


\u6253\u5370\u51fa\u7684\u7ed3\u679c\u5c31\u662f\uff1a
foo bar


Dockerfile\u4e2d\u53ea\u80fd\u6307\u5b9a\u4e00\u4e2aENTRYPOINT\uff0c\u5982\u679c\u6307\u5b9a\u4e86\u5f88\u591a\uff0c\u53ea\u6709\u6700\u540e\u4e00\u4e2a\u6709\u6548\u3002
\u6267\u884cdocker run\u547d\u4ee4\u65f6\uff0c\u4e5f\u53ef\u4ee5\u6dfb\u52a0-entrypoint\u53c2\u6570\uff0c\u4f1a\u628a\u6307\u5b9a\u7684\u53c2\u6570\u7ee7\u7eed\u4f20\u9012\u7ed9ENTRYPOINT\uff0c\u4f8b\u5982\uff1a
...
ENTRYPOINT ["echo","foo"]


\u7136\u540e\u6267\u884c\uff1a
docker run CONTAINER_NAME bar #\u6ce8\u610f\u6ca1\u6709echo


\u90a3\u4e48\uff0c\u5c31\u76f8\u5f53\u4e8e\u6267\u884c\u4e86echo foo bar\uff0c\u6700\u7ec8\u7ed3\u679c\u5c31\u662f
foo bar

\u5982\u4f55\u4f7f\u7528
Dockerfile\u7528\u6765\u521b\u5efa\u4e00\u4e2a\u81ea\u5b9a\u4e49\u7684image,\u5305\u542b\u4e86\u7528\u6237\u6307\u5b9a\u7684\u8f6f\u4ef6\u4f9d\u8d56\u7b49\u3002\u5f53\u524d\u76ee\u5f55\u4e0b\u5305\u542bDockerfile,\u4f7f\u7528\u547d\u4ee4build\u6765\u521b\u5efa\u65b0\u7684image,\u5e76\u547d\u540d\u4e3aedwardsbean/centos6-jdk1.7:
docker build -t edwardsbean/centos6-jdk1.7 .


Dockerfile\u5173\u952e\u5b57
\u5982\u4f55\u7f16\u5199\u4e00\u4e2aDockerfile,\u683c\u5f0f\u5982\u4e0b\uff1a
# CommentINSTRUCTION arguments


FROM
\u57fa\u4e8e\u54ea\u4e2a\u955c\u50cf
RUN
\u5b89\u88c5\u8f6f\u4ef6\u7528
MAINTAINER
\u955c\u50cf\u521b\u5efa\u8005
CMD
container\u542f\u52a8\u65f6\u6267\u884c\u7684\u547d\u4ee4\uff0c\u4f46\u662f\u4e00\u4e2aDockerfile\u4e2d\u53ea\u80fd\u6709\u4e00\u6761CMD\u547d\u4ee4\uff0c\u591a\u6761\u5219\u53ea\u6267\u884c\u6700\u540e\u4e00\u6761CMD.
CMD\u4e3b\u8981\u7528\u4e8econtainer\u65f6\u542f\u52a8\u6307\u5b9a\u7684\u670d\u52a1\uff0c\u5f53docker run command\u7684\u547d\u4ee4\u5339\u914d\u5230CMD command\u65f6\uff0c\u4f1a\u66ff\u6362CMD\u6267\u884c\u7684\u547d\u4ee4\u3002\u5982:
Dockerfile:
CMD echo hello world


\u8fd0\u884c\u4e00\u4e0b\u8bd5\u8bd5:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd
hello world


\u4e00\u65e6\u547d\u4ee4\u5339\u914d\uff1a
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello edwardsbean
hello edwardsbean


ENTRYPOINT
container\u542f\u52a8\u65f6\u6267\u884c\u7684\u547d\u4ee4\uff0c\u4f46\u662f\u4e00\u4e2aDockerfile\u4e2d\u53ea\u80fd\u6709\u4e00\u6761ENTRYPOINT\u547d\u4ee4\uff0c\u5982\u679c\u591a\u6761\uff0c\u5219\u53ea\u6267\u884c\u6700\u540e\u4e00\u6761
ENTRYPOINT\u6ca1\u6709CMD\u7684\u53ef\u66ff\u6362\u7279\u6027
USER
\u4f7f\u7528\u54ea\u4e2a\u7528\u6237\u8dd1container
\u5982\uff1a
ENTRYPOINT ["memcached"]
USER daemon


EXPOSE
container\u5185\u90e8\u670d\u52a1\u5f00\u542f\u7684\u7aef\u53e3\u3002\u4e3b\u673a\u4e0a\u8981\u7528\u8fd8\u5f97\u5728\u542f\u52a8container\u65f6\uff0c\u505ahost-container\u7684\u7aef\u53e3\u6620\u5c04\uff1a
docker run -d -p 127.0.0.1:33301:22 centos6-ssh


container ssh\u670d\u52a1\u768422\u7aef\u53e3\u88ab\u6620\u5c04\u5230\u4e3b\u673a\u768433301\u7aef\u53e3
ENV
\u7528\u6765\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u6bd4\u5982\uff1a
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

ADD
\u5c06\u6587\u4ef6\u62f7\u8d1d\u5230container\u7684\u6587\u4ef6\u7cfb\u7edf\u5bf9\u5e94\u7684\u8def\u5f84
\u6240\u6709\u62f7\u8d1d\u5230container\u4e2d\u7684\u6587\u4ef6\u548c\u6587\u4ef6\u5939\u6743\u9650\u4e3a0755,uid\u548cgid\u4e3a0
\u5982\u679c\u6587\u4ef6\u662f\u53ef\u8bc6\u522b\u7684\u538b\u7f29\u683c\u5f0f\uff0c\u5219docker\u4f1a\u5e2e\u5fd9\u89e3\u538b\u7f29
\u5982\u679c\u8981ADD\u672c\u5730\u6587\u4ef6\uff0c\u5219\u672c\u5730\u6587\u4ef6\u5fc5\u987b\u5728 docker build \uff0c\u6307\u5b9a\u7684\u76ee\u5f55\u4e0b
\u5982\u679c\u8981ADD\u8fdc\u7a0b\u6587\u4ef6\uff0c\u5219\u8fdc\u7a0b\u6587\u4ef6\u5fc5\u987b\u5728 docker build \uff0c\u6307\u5b9a\u7684\u76ee\u5f55\u4e0b\u3002\u6bd4\u5982:
docker build github.com/creack/docker-firefox


docker-firefox\u76ee\u5f55\u4e0b\u5fc5\u987b\u6709Dockerfile\u548c\u8981ADD\u7684\u6587\u4ef6
\u6ce8\u610f:\u4f7f\u7528docker build - < somefile\u65b9\u5f0f\u8fdb\u884cbuild\uff0c\u662f\u4e0d\u80fd\u76f4\u63a5\u5c06\u672c\u5730\u6587\u4ef6ADD\u5230container\u4e2d\u3002\u53ea\u80fdADD
url file.
ADD\u53ea\u6709\u5728build\u955c\u50cf\u7684\u65f6\u5019\u8fd0\u884c\u4e00\u6b21\uff0c\u540e\u9762\u8fd0\u884ccontainer\u7684\u65f6\u5019\u4e0d\u4f1a\u518d\u91cd\u65b0\u52a0\u8f7d\u4e86\u3002
VOLUME
\u53ef\u4ee5\u5c06\u672c\u5730\u6587\u4ef6\u5939\u6216\u8005\u5176\u4ed6container\u7684\u6587\u4ef6\u5939\u6302\u8f7d\u5230container\u4e2d\u3002
WORKDIR
\u5207\u6362\u76ee\u5f55\u7528\uff0c\u53ef\u4ee5\u591a\u6b21\u5207\u6362(\u76f8\u5f53\u4e8ecd\u547d\u4ee4)\uff0c\u5bf9RUN,CMD,ENTRYPOINT\u751f\u6548
ONBUILD
ONBUILD \u6307\u5b9a\u7684\u547d\u4ee4\u5728\u6784\u5efa\u955c\u50cf\u65f6\u5e76\u4e0d\u6267\u884c\uff0c\u800c\u662f\u5728\u5b83\u7684\u5b50\u955c\u50cf\u4e2d\u6267\u884c

运行机太
RUNBuild运行先于CMDENTRYPOINTBuild完RUN运行完再运行CMD或者ENTRYPOINT
ENTRYPOINTCMD同点于执行docker run参数传递式CMD指定命令docker run传递命令覆盖例用CMD指定:
...
CMD ["echo"]

运行
docker run CONTAINER_NAME echo foo

CMD指定echo新指定echo覆盖所终相于运行echo foo所终打印结:
foo

ENTRYPOINT容器名面所内容都参数传递给其指定命令(命令覆盖)比:
...
ENTRYPOINT ["echo"]

运行
docker run CONTAINER_NAME echo foo

则CONTAINER_NAME面echo foo都作参数传递给ENTRYPOING指定echo命令所相于执行
echo "echo foo"

终打印结:
echo foo

另外DockerfileENTRYPOINT指定参数比运行docker run指定参数更靠前比:
...
ENTRYPOINT ["echo", "foo"]

执行
docker run CONTAINER_NAME bar

相于执行:
echo foo bar

打印结:
foo bar

Dockerfile能指定ENTRYPOINT指定效
执行docker run命令添加-entrypoint参数指定参数继续传递给ENTRYPOINT例:
...
ENTRYPOINT ["echo","foo"]

执行:
docker run CONTAINER_NAME bar #注意没echo

相于执行echo foo bar终结
foo bar

  • Dockerfile閲屾寚瀹氭墽琛鍛戒护鐢‥NTRYPOING鍜岀敤CMD鏈変綍涓嶅悓
    绛旓細Dockerfile涓鍙兘鎸囧畾涓涓狤NTRYPOINT锛屽鏋滄寚瀹氫簡寰堝锛屽彧鏈夋渶鍚庝竴涓湁鏁堛鎵цdocker run鍛戒护鏃讹紝涔熷彲浠ユ坊鍔-entrypoint鍙傛暟锛屼細鎶婃寚瀹氱殑鍙傛暟缁х画浼犻掔粰ENTRYPOINT锛屼緥濡傦細...ENTRYPOINT ["echo","foo"]鐒跺悗鎵ц锛歞ocker run CONTAINER_NAME bar #娉ㄦ剰娌℃湁echo 閭d箞锛屽氨鐩稿綋浜庢墽琛屼簡echo foo bar锛屾渶缁堢粨鏋...
  • Dockerfile閲屾寚瀹氭墽琛鍛戒护鐢‥NTRYPOING鍜岀敤CMD鏈変綍涓嶅悓
    绛旓細杩愯鏃舵満涓嶅お涓鏍枫俁UN鏄湪Build鏃惰繍琛岀殑锛屽厛浜嶤MD鍜孍NTRYPOINT銆侭uild瀹屾垚浜嗭紝RUN涔熻繍琛屽畬鎴愬悗锛屽啀杩愯CMD鎴栬匛NTRYPOINT銆侲NTRYPOINT鍜孋MD鐨勪笉鍚岀偣鍦ㄤ簬鎵цdockerrun鏃跺弬鏁颁紶閫掓柟寮忥紝CMD鎸囧畾鐨鍛戒护鍙互琚玠ockerrun浼犻掔殑鍛戒护瑕嗙洊
  • Dockerfile閲屾寚瀹氭墽琛鍛戒护鐢‥NTRYPOING鍜岀敤CMD鏈変綍涓嶅悓
    绛旓細ENTRYPOINTCMD鍚岀偣浜鎵цdocker run鍙傛暟浼犻掑紡CMD鎸囧畾鍛戒护docker run浼犻掑懡浠よ鐩栦緥鐢–MD鎸囧畾锛...CMD ["echo"]杩愯 docker run CONTAINER_NAME echo foo CMD鎸囧畾echo鏂版寚瀹歟cho瑕嗙洊鎵缁堢浉浜庤繍琛宔cho foo鎵缁堟墦鍗扮粨锛歠oo ENTRYPOINT瀹瑰櫒鍚嶉潰鎵鍐呭閮藉弬鏁颁紶閫掔粰鍏舵寚瀹氬懡浠わ紙鍛戒护瑕嗙洊锛夋瘮锛...ENTRYPOINT ["...
  • DockeFIile鐭ヨ瘑鐐规荤粨鍜屽彂甯冭嚜宸辩殑闀滃儚
    绛旓細1. dockerfile 鐨鍩烘湰瀹氫箟 2. dockerfile 鐨勫熀鏈粨鏋 3. dockerfile 鐨勫父鐢ㄦ寚浠 FROM :鎸囧畾鍩虹闀滃儚,蹇呴』鏄涓涓懡浠 MAINTAINER :缁存姢鑰呬俊鎭 RUN :鏋勫缓闀滃儚鏃鎵ц鐨勫懡浠 ADD :灏嗘湰鍦版枃浠舵坊鍔犲埌瀹瑰櫒涓 COPY 鍔熻兘鍜 ADD 绫讳技,鍖哄埆濡備笅 CMD :鏋勫缓瀹瑰櫒杩...
  • dockerfile鏄粈涔
    绛旓細Dockerfile鏄竴涓寘鍚竴绯诲垪鍛戒护鐨勬枃鏈枃浠讹紝杩欎簺鍛戒护鐢ㄤ簬鎻忚堪濡備綍鏋勫缓涓涓狣ocker闀滃儚銆傞氳繃Dockerfile锛屽紑鍙戣呭彲浠ュ皢搴旂敤绋嬪簭鍙婂叾鎵鏈変緷璧栭」灏佽鍦ㄤ竴涓暅鍍忎腑锛屼粠鑰岀‘淇濆湪浠绘剰鐜涓嬮兘鑳藉涓鑷村湴杩愯銆Dockerfile涓殑鍛戒护閮芥槸鍩轰簬Dockerfile鎵鍦ㄧ殑涓婁笅鏂囩幆澧鎵ц鐨勶紝骞朵笖浼氭寜鐓ф枃浠朵腑瀹氫箟鐨勯『搴忎緷娆℃墽琛屻傛瘡涓懡浠...
  • Docker(2)鈥斺旀瀯寤洪暅鍍忓懡浠よВ鏋
    绛旓細3銆丏ockerfile鏄竴涓枃鏈枃浠讹紝鍏朵腑鍖呭惈浜嗘瀯寤篋ocker闀滃儚闇瑕鎵ц鐨勫懡浠ゅ簭鍒椼備娇鐢╠ockerbuild鍛戒护浠Dockerfile涓璇诲彇鎸囦护鏉ユ瀯寤洪暅鍍忋4銆佹瀯寤烘寚浠ょ敤浜庢瀯寤篿mage锛屽叾鎸囧畾鐨勬搷浣滀笉浼氬湪杩愯image鐨勫鍣ㄤ笂鎵ц锛涜缃寚浠ょ敤浜庤缃甶mage鐨勫睘鎬э紝鍏舵寚瀹氱殑鎿嶄綔灏嗗湪杩愯image鐨勫鍣ㄤ腑鎵ц銆(1)FROM(鎸囧畾鍩虹image)鏋勫缓鎸囦护...
  • Docker甯哥敤鍛戒护澶у叏
    绛旓細娉ㄦ剰rm涓哄垹闄ゅ鍣紝鑰宺mi涓哄垹闄ら暅鍍忥紝鍏朵腑i浠h〃image锛夊懡浠わ紝瀹冪殑鍏蜂綋璇硶濡備笅锛歞ockerrmi[OPTIONS]IMAGE[IMAGE]銆5銆丷UN鎸囦护鐢ㄤ簬鎵ц鍛戒护锛岃鎸囦护鏈変袱绉嶅舰寮忥細渚嬪鎴戜滑鎵ц鏇存柊鍛戒护锛欳MD鐨勪娇鐢ㄦ柟寮忚窡RUN绫讳技锛屼笉杩囧湪涓涓Dockerfile鏂囦欢涓彧鑳芥湁涓涓狢MD鎸囦护锛屽鏋滄湁澶氫釜锛屽垯鍙湁鏈鍚庝竴涓細鐢熸晥銆
  • docker浣跨敤鏁欑▼
    绛旓細鍐呭鍒嗗埆濡備笅锛歛pp.pyDockerfiledocker-compose.yml杩愯杩囩▼鐪嬩竴涓嬪垰鍒氬惎鍔ㄧ殑瀹瑰櫒锛氫笂杩板懡浠や細鑷姩甯綘鏋勫缓闀滃儚锛屽苟鎸夌収閰嶇疆鍚姩瀹瑰櫒缁勩傛寜鐓ц彍楦熺殑姝ラ锛屼娇鐢▂um瀹夎鍗冲彲銆傚父鐢ㄦ寚浠ゅ涓嬪浘锛岀洿鐧界敤娉曠偣鎴戯紝瀹樻柟浠嬬粛鐐瑰嚮鎴戝娉細RUN鍛戒护鍦╥mage鏂囦欢鐨勬瀯寤洪樁娈鎵ц锛屾墽琛岀粨鏋滈兘浼氭墦鍖呰繘鍏mage鏂囦欢锛汣MD鍛戒护鍒欐槸鍦...
  • 濡備綍鐢Dockerfile鍒涘缓闀滃儚
    绛旓細1.docker澶т綋涓婃寜鐓у涓嬫祦绋鎵цdockerfile涓殑鎸囦护锛歞ocker浠庡熀纭闀滃儚杩愯涓涓鍣 鎵ц涓鏉℃寚浠わ紝瀵瑰鍣ㄥ仛鍑轰慨鏀 鎵ц绫讳技docker commit鐨勬搷浣滐紝鎻愪氦涓涓柊鐨勯暅鍍忓眰 docker鍐嶅熀浜庡垰鎻愪氦鐨勯暅鍍忚繍琛屼竴涓柊鐨勫鍣 鎵цdockerfile涓殑涓嬩竴鏉鎸囧畾锛岀洿鍒版墍鏈夋寚浠ら兘鎵ц瀹屾瘯銆備緥瀛愶細mkdir static_web vim Docker...
  • dockerrun鍛戒护璇﹁В
    绛旓細dockerrun鍛戒护璇﹁В dockerrun鏄疍ocker瀹瑰櫒杩愯鍛戒护锛岀敤浜庡惎鍔ㄥ拰绠$悊Docker瀹瑰櫒銆傚畠閫氬父涓Dockerfile鍜孌ocker Compose涓璧蜂娇鐢紝鐢ㄤ簬鏋勫缓鍜岀鐞嗗簲鐢ㄧ▼搴忕殑瀹瑰櫒鍖栫幆澧冦俤ockerrun鍛戒护鎺ュ彈涓绯诲垪閫夐」鍜屽弬鏁帮紝鐢ㄤ簬鎸囧畾瑕佽繍琛岀殑瀹瑰櫒鍙婂叾鐩稿叧閰嶇疆銆傚父鐢ㄧ殑閫夐」鍖呮嫭-d锛堝悗鍙拌繍琛屽鍣級銆-p锛堝皢瀹瑰櫒绔彛鏄犲皠鍒颁富鏈猴級銆-v锛...
  • 扩展阅读:文言文翻译器转换 ... dockerfile编写 copy ... 中英转换器 ... dockerfile cmd ... opebstack 创建镜像 ... dockerfile nginx ... dockerfilerun命令详解 ... dockerfile最佳实践 ... docker build dockerfile ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网