buruh pelabuhan menjalankan ubuntu / bin / bash vs buruh pelabuhan menjalankan ubuntu

15

Docker versi 17.06.0-ce

Saya mempelajari Docker dengan menonton kursus video.

Dosen menunjukkan:

sudo docker run -ti ubuntu /bin/bash

Jalankan buruh pelabuhan dengan gambar ubuntu. Dan yang mengganggu saya adalah /bin/bash\. man docker runmenunjukkan itu /bin/bashadalah perintah. Yaitu docker run IMAGE [COMMAND]. Baiklah, tidak apa-apa. Tapi apa bedanya

sudo docker run -ti ubuntu 

dan

sudo docker run -ti ubuntu /bin/bash

Bagi saya tidak ada. Dan dosen tidak memusatkan perhatian pada perintah. Dia mengatakan bahwa kita hanya menjalankan buruh pelabuhan. Itu adalah perintah pertamanya dalam kursus. Dan kemudian dia menunjukkan bahwa kita telah diisolasi dari mesin host, kita dapat dengan bebas merusak apa yang kita inginkan tanpa kerusakan (seperti rm -rf / bin).

Saya memeriksa:

$ sudo docker run -ti ubuntu
root@aaf7cd26fe18:/# echo $SHELL
/bin/bash


$ sudo docker run -ti ubuntu /bin/bash
root@6b2570958216:/# echo $SHELL
/bin/bash

Yah, untuk diriku sendiri aku memutuskan untuk membuang /bin/bashbagian ini sebagai sampah.

Tapi bagaimanapun saya memutuskan untuk bertanya kepada Anda: mungkin ada beberapa perbedaan antara dua cara menjalankan Docker? Jika ada, seperti apa itu?

Michael
sumber

Jawaban:

11

Docker gambar dapat dapat menentukan bahwa perintah tertentu untuk dijalankan secara default, menggunakan yang CMDdirektif di Dockerfile . Dan:

Jika pengguna menentukan argumen untuk docker runmaka mereka akan menimpa default yang ditentukan dalam CMD.

Seperti yang terjadi, perintah default yang ditentukan untuk Ubuntu Dockerfile sebenarnya adalah bash:

CMD ["/bin/bash"]

Jadi, untuk kasus khusus gambar Ubuntu, docker run ... ubuntu /bin/bashtidak ada bedanya docker run ... ubuntu.

Tentu saja, ini tidak selalu benar. Dockerfile untuk mesin basis data dapat menjalankan perintah basis data secara default. Dalam hal ini, jika Anda membutuhkan shell interaktif, Anda harus melakukannya docker run ... /bin/bash.

Secara umum, Anda tidak dapat berasumsi bahwa itu docker runakan memberi Anda shell interaktif. Lebih aman untuk menentukan /bin/bashapakah Anda membutuhkan shell.

muru
sumber
2

Ketika Anda tidak memberikan perintah, yang dalam kasus Anda /bin/bash, saat menggunakan -ti( iinteraktif, tterminal) Anda akan dilampirkan ke program default yang telah ditetapkan untuk dieksekusi ketika menggunakan runperintah di DockerFile.

Misalnya, jika gambar menjalankan server web di latar depan, apa yang akan Anda lihat setelah menggunakan runtanpa /bin/bashadalah log dari server web itu (program default yang telah dijalankan).

Saat menentukan perintah, Anda mengatakan bahwa saya tidak peduli apa yang sedang terjadi atau sedang berjalan pada gambar memberi saya terminal interaktif dengan menjalankan "perintah" ini.

Di Ubuntu, perintah defaultnya adalah bashdan jika Anda tidak menyediakan -ti, wadah akan dihentikan segera setelah dijalankan. karena menjalankan bash dalam mode non-interaktif, dan setelah selesai wadah tidak ada hubungannya lagi.

Ravexina
sumber