Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同?
ringa_lee
ringa_lee 2017-04-21 10:55:46
0
2
802

如题,我一般是用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_lee
ringa_lee

ringa_lee

membalas semua(2)
左手右手慢动作

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

PHPzhong

Dalam fail Docker, jika ENTRYPOINT dan CMD wujud, maka CMD ialah parameter ENTRYPOINT Jika tiada ENTRYPOINT, maka CMD ialah arahan pelaksanaan lalai

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan