GNU/Linux >> Belajar Linux >  >> Ubuntu

Perintah Docker CMD vs. Entrypoint:Apa Perbedaannya?

Pendahuluan

Penampung dirancang untuk menjalankan tugas dan proses tertentu , bukan untuk sistem operasi hosting. Anda membuat wadah untuk melayani tugas unit tunggal. Setelah menyelesaikan tugas yang diberikan, ia berhenti . Oleh karena itu, daur hidup container bergantung pada proses yang sedang berlangsung di dalamnya. Setelah proses berhenti, container juga berhenti.

Dockerfile mendefinisikan proses ini. Ini adalah skrip yang terdiri dari instruksi tentang cara membangun image Docker. Dalam skrip ini, ada dua jenis instruksi yang dapat menentukan proses yang berjalan dalam wadah:

  • ENTRYPOINT
  • CMD

Dalam artikel ini, kami menjelaskan perbedaan antara Docker ENTRYPOINT dan CMD dan kapan harus menggunakan instruksi Docker yang mana.

Titik Masuk Docker vs CMD:Memecahkan Dilema

Singkatnya, CMD mendefinisikan perintah dan/atau parameter default untuk sebuah wadah. CMD adalah instruksi yang paling baik digunakan jika Anda memerlukan perintah default yang dapat dengan mudah ditimpa oleh pengguna. Jika Dockerfile memiliki beberapa CMD, itu hanya menerapkan instruksi dari yang terakhir.

Di sisi lain, ENTRYPOINT lebih disukai ketika Anda ingin mendefinisikan wadah dengan executable tertentu. Anda tidak dapat mengganti ENTRYPOINT saat memulai penampung kecuali jika Anda menambahkan --entrypoint bendera.

Gabungkan ENTRYPOINT dengan CMD jika Anda membutuhkan wadah dengan executable yang ditentukan dan parameter default yang dapat dimodifikasi dengan mudah. Misalnya, saat menyimpan aplikasi, gunakan ENTRYPOINT dan CMD untuk menyetel variabel khusus lingkungan.

Formulir Shell dan Exec

Sebelum kita mulai, penting untuk mendiskusikan bentuk-bentuk instruksi. Docker ENTRYPOINT dan CMD dapat memiliki dua bentuk:

  • Bentuk cangkang
  • Formulir eksekutif

Sintaks untuk setiap perintah dalam bentuk shell adalah:

<instruction> <command>

Sintaks untuk instruksi dalam bentuk exec adalah:

<instruction> ["executable", "parameter"]

Anda dapat menulis instruksi Docker CMD/ENTRYPOINT dalam kedua bentuk:

  • CMD echo "Hello World" (bentuk cangkang)
  • CMD ["echo", "Hello World"] (formulir eksekutif)
  • ENTRYPOINT echo "Hello World" (bentuk cangkang)
  • ENTRYPOINT ["echo", "Hello World"] (formulir eksekutif)

Namun, coba simpan semua instruksi Anda dalam formulir eksekutif untuk mencegah potensi masalah kinerja.

CMD Docker

CMD Docker mendefinisikan executable default dari image Docker. Anda dapat menjalankan gambar ini sebagai dasar wadah tanpa menambahkan argumen baris perintah. Dalam hal ini, container menjalankan proses yang ditentukan oleh perintah CMD.

Instruksi CMD hanya digunakan jika tidak ada argumen yang ditambahkan ke run perintah saat memulai sebuah wadah. Oleh karena itu, jika Anda menambahkan argumen ke perintah, Anda menimpa CMD.

Untuk menunjukkan cara kerja CMD, kami akan membuat wadah sampel dengan instruksi CMD.

Membuat Dockerfile dengan CMD dan Membangun Gambar

1. Mulailah dengan membuat MyDockerImage baru folder untuk menyimpan gambar Anda di:

sudo mkdir MyDockerImage

2. Pindah ke folder itu dan buat Dockerfile baru:

cd MyDockerImage
sudo touch Dockerfile

3. Buka Dockerfile dengan editor teks favorit Anda:

nano Dockerfile

4. Kemudian, tambahkan konten berikut ke file:

FROM ubuntu
MAINTAINER sofija
RUN apt-get update
CMD ["echo", "Hello World"]

Pada konten di atas, Anda dapat melihat bahwa kami menggunakan instruksi CMD untuk menggemakan pesan Hello World saat container dijalankan tanpa perintah tertentu.

5. Simpan dan keluar filenya.

6. Langkah selanjutnya adalah membangun image Docker dari Dockerfile yang baru dibuat. Karena kita masih dalam MyDockerImage direktori, Anda tidak perlu menentukan lokasi Dockerfile, cukup buat gambar dengan menjalankan:

sudo docker build .

7. Output akan memberi tahu Anda nama container. Anda dapat memeriksa untuk melihat apakah itu tersedia di antara gambar yang disimpan secara lokal dengan menjalankan:

sudo docker images

Menjalankan Kontainer Docker dengan CMD

Untuk melihat CMD beraksi, kami akan membuat wadah berdasarkan gambar yang dibuat pada langkah sebelumnya.
Jalankan container dengan perintah:

sudo docker run [image_name]

Karena tidak ada argumen baris perintah, wadah akan menjalankan instruksi CMD default dan menampilkan Hello World pesan. Namun, jika Anda menambahkan argumen saat memulai penampung, itu menimpa instruksi CMD.

Misalnya, tambahkan argumen hostname ke perintah docker run:

sudo docker run [image_name] hostname

Docker akan menjalankan container dan hostname perintah alih-alih perintah gema CMD. Anda dapat melihat ini di output.

Titik Masuk Docker

ENTRYPOINT adalah instruksi lain yang digunakan untuk mengonfigurasi bagaimana container akan berjalan. Sama seperti CMD, Anda perlu menentukan perintah dan parameter.

Apa perbedaan antara CMD dan ENTRYPOINT? Anda tidak dapat mengganti instruksi ENTRYPOINT dengan menambahkan parameter baris perintah ke docker run memerintah. Dengan memilih instruksi ini, Anda menyiratkan bahwa container dibuat khusus untuk penggunaan tersebut.

Baca terus untuk melihat bagaimana kami menerapkan ENTRYPOINT dalam pembuatan container.

Membuat Dockerfile dengan ENTRYPOINT dan Membangun Gambar

1. Gunakan Dockerfile yang dibuat di bagian CMD dan edit file untuk mengubah instruksi. Buka file yang ada dengan editor teks:

sudo nano Dockerfile

2. Edit konten dengan mengganti perintah CMD dengan ENTRYPOINT:

FROM ubuntu
MAINTAINER sofija
RUN apt-get update
ENTRYPOINT ["echo", "Hello World"]

3. Simpan dan tutup filenya.

Menjalankan Kontainer Docker dengan ENTRYPOINT

1. Buat gambar baru menggunakan perintah berikut:

sudo docker build .

2. Outputnya akan menunjukkan bahwa Anda telah berhasil membuat gambar baru dengan nama yang diberikan. Sekarang mari kita jalankan sebagai wadah tanpa menambahkan parameter baris perintah apa pun:

sudo docker run [container_name]

Outputnya akan sama dengan CMD. Ini karena kami belum menambahkan argumen apa pun ke perintah run.

3. Untuk melihat cara kerja ENTRYPOINT, Anda perlu menambahkan parameter saat memulai penampung. Gunakan perintah yang sama seperti pada langkah sebelumnya dan tambahkan sesuatu setelah nama wadah:

sudo docker run [container_name] KnowledgeBase

Seperti yang Anda lihat, Docker tidak mengesampingkan instruksi awal untuk menggemakan Hello World. Itu hanya menambahkan parameter baru ke perintah yang ada.

Meskipun Anda dapat menggunakan ENTRYPOINT dan CMD dalam kedua bentuk, umumnya disarankan untuk tetap menggunakan formulir exec . Ini adalah solusi yang lebih andal karena bentuk shell terkadang dapat menimbulkan masalah halus dalam prosesnya.

Titik Masuk Docker dengan CMD

Seperti yang Anda lihat sejauh ini, ENTRYPOINT dan CMD serupa, tetapi tidak sama. Terlebih lagi, kedua instruksi ini tidak saling eksklusif. Itu benar, mungkin saja keduanya ada di Dockerfile Anda.

Ada banyak situasi di mana menggabungkan CMD dan ENTRYPOINT akan menjadi solusi terbaik untuk wadah Docker Anda. Dalam kasus seperti itu, yang dapat dieksekusi didefinisikan dengan ENTRYPOINT , sementara CMD menentukan parameter default .

Jika Anda menggunakan kedua instruksi, pastikan untuk menyimpannya dalam bentuk exec .

Baca terus untuk melihat bagaimana ENTRYPOINT dan CMD berkolaborasi dalam contoh kami.

Jalankan Container dengan Entrypoint dan CMD

1. Pertama, kita akan memodifikasi Dockerfile yang ada sehingga menyertakan kedua instruksi. Buka file dengan:

sudo nano Dockerfile

2. File harus menyertakan instruksi ENTRYPOINT yang menentukan executable, serta instruksi CMD yang mendefinisikan parameter default yang akan muncul jika tidak ada tambahan yang ditambahkan ke perintah run:

FROM ubuntu
MAINTAINER sofija
RUN apt-get update
ENTRYPOINT ["echo", "Hello"]
CMD ["World"]

3. Sekarang, buat gambar baru dari Dockerfile yang dimodifikasi:

sudo docker build . 

4. Mari kita uji container dengan menjalankannya tanpa parameter apa pun. Masukkan perintah:

sudo docker run [container_name]

Ini akan mengembalikan pesan Hello World . Namun, apa yang terjadi ketika kita menambahkan parameter ke perintah docker run?

5. Gunakan perintah yang sama lagi, tetapi kali ini tambahkan nama Anda ke perintah run:

sudo docker run [container_name] [your_name]

Outputnya sekarang telah berubah menjadi Hello [your_name] (dalam kasus saya, ini Hello Sofija ). Ini karena Anda tidak dapat mengganti instruksi ENTRYPOINT, sedangkan dengan CMD Anda dapat melakukannya dengan mudah.


Ubuntu
  1. Apa Perbedaan Antara Kontainer LXC, LXD, dan Docker?

  2. perbedaan antara podman dan buruh pelabuhan.

  3. Beberapa Perintah DOCKER

  1. Apakah Perbedaan Antara Sudo Dan Gksu Sama Dengan Perbedaan Antara Sudo -i Dan Sudo -s?

  2. Perbedaan Antara CMD dan ENTRYPOINT di Gambar Docker

  3. Memulai sebuah shell di wadah Docker Alpine

  1. Kontainer vs Mesin Virtual (VM):Apa Bedanya?

  2. Cara SSH ke dalam Running Docker Container dan Jalankan Perintah

  3. APT vs APT-GET:Apa Bedanya?