如题,我一般是用CMD来指定的,比如:
FROM thelanddownunder
MAINTAINER ProgrammingLife
CMD ["apt-get install htop"]
但是看一些Dockerfile里也有用ENTRYPOINT来指定的,就是把上面的CMD换成ENTRYPOINT,后面好像也是指定一些命令的:
FROM thelanddownunder
MAINTAINER ProgrammingLife
ENTRYPOINT ["apt-get install htop"]
请问这两种方法有什么不一样的吗?另外,还有用RUN来指定命令的,语法和上面两种又不太一样,比如这样:
FROM thelanddownunder
MAINTAINER ProgrammingLife
RUN apt-get install htop
ENTRYPOINT ["apt-get install vim"]
Masa larian adalah berbeza.
RUN dijalankan semasa Build, sebelum CMD dan ENTRYPOINT. Selepas Build selesai dan RUN selesai, jalankan CMD atau ENTRYPOINT sekali lagi.
Perbezaan antara ENTRYPOINT dan CMD ialah cara parameter dihantar semasa menjalankan docker run Perintah yang ditentukan oleh CMD boleh ditindih oleh arahan yang diluluskan oleh docker run Contohnya, jika dinyatakan dengan CMD:
Kemudian lari
Kemudian gema yang dinyatakan dalam CMD akan ditimpa oleh gema yang baru ditentukan, jadi ia akhirnya bersamaan dengan berjalan
echo foo
, jadi hasil cetakan akhir ialah:Dan ENTRYPOINT akan menghantar segala-galanya selepas nama bekas sebagai parameter kepada arahan yang ditentukan (arahan tidak akan ditimpa), seperti:
Kemudian lari
Kemudian
echo foo
selepas CONTAINER_NAME dihantar sebagai parameter kepada arahan gema yang dinyatakan dalam ENTRYPOING, jadi ia bersamaan dengan melaksanakanHasil cetakan akhir ialah:
Selain itu, dalam Dockerfile, parameter yang ditentukan oleh ENTRYPOINT lebih awal daripada parameter yang ditentukan semasa menjalankan docker run, seperti:
Laksanakan
Setara dengan melaksanakan:
Hasil cetakan ialah:
Hanya satu ENTRYPOINT boleh ditentukan dalam Dockerfile Jika banyak dinyatakan, hanya yang terakhir akan sah.
Apabila melaksanakan arahan docker run, anda juga boleh menambah parameter -entrypoint, yang akan terus menghantar parameter yang ditentukan kepada ENTRYPOINT, contohnya:
Kemudian laksanakan:
Kemudian, ia bersamaan dengan melaksanakan
echo foo bar
, dan keputusan akhir ialahSaya menterjemah artikel "15 Petua Docker dalam 15 Minit" di dockboard.org, yang bercakap tentang perbezaan antara RUN, CMD dan ENTRYPOINT Anda boleh merujuknya.
Terdapat juga siri Docker Quicktips, dan terdapat artikel di dalamnya yang juga bercakap tentang ENTRYPIONT Anda boleh lihat, pautannya di sini:
http://www.tech-d.net/. 2014/01/27/docker- quicktip-1-entrypoint/
Kami akan menambah terjemahan siri artikel ini ke dockboard.org tidak lama lagi, jadi nantikan.
Selain itu, berikut ialah perihalan titik masuk dalam dokumentasi rasmi: http://docs.docker.io/en/latest/reference/builder/#entrypoint
Dalam fail Docker, jika ENTRYPOINT dan CMD wujud, maka CMD ialah parameter ENTRYPOINT Jika tiada ENTRYPOINT, maka CMD ialah arahan pelaksanaan lalai