Rumah > Soal Jawab > teks badan
如题,我一般是用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"]
ringa_lee2017-04-21 10:57:46
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:
...
CMD ["echo"]
Kemudian lari
docker run CONTAINER_NAME echo foo
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:
foo
Dan ENTRYPOINT akan menghantar segala-galanya selepas nama bekas sebagai parameter kepada arahan yang ditentukan (arahan tidak akan ditimpa), seperti:
...
ENTRYPOINT ["echo"]
Kemudian lari
docker run CONTAINER_NAME echo foo
Kemudian echo foo
selepas CONTAINER_NAME dihantar sebagai parameter kepada arahan gema yang dinyatakan dalam ENTRYPOING, jadi ia bersamaan dengan melaksanakan
echo "echo foo"
Hasil cetakan akhir ialah:
echo foo
Selain itu, dalam Dockerfile, parameter yang ditentukan oleh ENTRYPOINT lebih awal daripada parameter yang ditentukan semasa menjalankan docker run, seperti:
...
ENTRYPOINT ["echo", "foo"]
Laksanakan
docker run CONTAINER_NAME bar
Setara dengan melaksanakan:
echo foo bar
Hasil cetakan ialah:
foo bar
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:
...
ENTRYPOINT ["echo","foo"]
Kemudian laksanakan:
docker run CONTAINER_NAME bar #注意没有echo
Kemudian, ia bersamaan dengan melaksanakan echo foo bar
, dan keputusan akhir ialah
foo bar
Saya 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
PHPz2017-04-21 10:57:46
Dalam fail Docker, jika ENTRYPOINT dan CMD wujud, maka CMD ialah parameter ENTRYPOINT Jika tiada ENTRYPOINT, maka CMD ialah arahan pelaksanaan lalai