GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Menggunakan Dockerfile ENTRYPOINT dan Instruksi CMD

Jika Anda pernah perlu menjalankan satu atau dua perintah di wadah Docker Anda saat startup, tutorial ini cocok untuk Anda. Menggunakan ENTRYPOINT Dockerfile dan CMD petunjuk, Anda dapat menjalankan perintah startup sebanyak yang Anda mau.

Dalam tutorial ini, Anda akan mempelajari cara menggunakan ENTRYPOINT dan CMD instruksi untuk menjalankan perintah startup di Dockerfile dan memahami perbedaannya.

Prasyarat

Karena tutorial ini akan menjadi demonstrasi langsung, pastikan Anda memiliki yang berikut ini:

  • PC Windows 10 – Windows 10 v10.0.19042 digunakan dalam tutorial ini.
  • Desktop Docker – Tutorial ini menggunakan Docker Desktop v3.3.1.

Membuat Dockerfile

Sebelum Anda dapat menjalankan perintah startup container Docker, Anda harus membuat Dockerfile terlebih dahulu. Dockerfile adalah dokumen teks yang berisi daftar perintah untuk membuat container, image Docker, dan menentukan bagaimana image Docker dibuat.

1. Pertama, buka PowerShell sebagai administrator.

2. Buat folder baru untuk menyimpan Dockerfile dan semua file terkait tutorial ini akan digunakan dan diubah ke direktori itu. Tutorial ini menggunakan ~/docker .

mkdir ~/docker
cd docker

3. Sekarang, buat file teks kosong bernama Dockerfile dengan perintah berikut.

cd > Dockerfile

Atau, Anda dapat membuat Dockerfile dengan perintah berikut jika Anda menggunakan Linux atau Mac OS.

touch Dockerfile

4. Terakhir, tambahkan konten berikut ke dalam Dockerfile

FROM ubuntu:20.04

Anda sekarang telah membuat Dockerfile yang akan segera hadir!

Membangun Gambar Docker

Sekarang setelah Anda membuat Dockerfile, Anda harus membuat image Docker untuk menjalankan perintah yang tertulis dalam instruksi ENTRYPOINT dan CMD Dockerfile Anda. Salah satu cara untuk membuat gambar adalah dengan menggunakan build perintah.

Saat berada di ~/docker direktori, jalankan perintah berikut. Perintah di bawah ini membuat gambar Docker bernama demo (-t demo ) dari Dockerfile di ~/docker dengan menentukan direktori kerja saat ini (. ).

docker build -t demo .

Menjalankan Kontainer Docker

Setelah membuat image Docker, Anda memerlukan wadah untuk menjalankan image Docker yang akan menjalankan perintah dari instruksi Dockerfile ENTRYPOINT dan CMD.

Untuk menjalankan wadah Docker, aktifkan run perintah untuk membuat lapisan wadah yang dapat ditulisi di atas gambar Docker (demo ). Contoh di bawah ini menggunakan -it parameter untuk terhubung secara interaktif ke penampung sehingga Anda dapat melihat output sampel.

docker run -it demo

Exec vs. Formulir Shell

Saat Anda mulai bekerja dengan Dockerfile dan mencari tahu cara menjalankan perintah startup, Anda mungkin menemukan dua metode berbeda untuk mendefinisikan perintah ini. Setiap metode akan memanggil perintah tetapi melakukannya dengan cara yang sedikit berbeda.

Ketika Docker mengeksekusi perintah, ia dapat melakukannya secara langsung yang disebut exec atau buka cangkang wadah (/bin/sh -c di Linux atau cmd /S /C di Windows) disebut shell .

Anda akan melihat perintah dijalankan melalui exec memiliki instruksi yang diikuti oleh executable untuk dipanggil diikuti oleh satu atau lebih argumen baris perintah, seperti yang ditunjukkan di bawah ini.

ENTRYPOINT ["executables", "parameter1", "parameter2", ...]
CMD ["executables", "parameter1", "parameter2:, ...]

Menulis perintah di shell form, di sisi lain, tidak memerlukan perintah membungkus dalam tanda kurung siku, seperti yang ditunjukkan di bawah ini.

ENTRYPOINT <command> "parameter1"
CMD <command> "parameter1"

Jika Anda tidak menentukan argumen ke CMD , Docker akan selalu menjalankan perintah dalam bentuk exec mis. CMD <command> .

Jika Anda baru memulai, membedakan antara dua pemanggilan perintah ini tidak akan terlalu menjadi masalah, tetapi saat Anda semakin mahir, Anda akan segera melihat manfaat dan kekurangannya masing-masing.

Menjalankan Perintah Memulai

Sekarang mari kita masuk ke inti tutorial ini dan membuat tangan Anda kotor dengan berjalan melalui beberapa contoh menjalankan perintah startup dalam ENTRYPOINT Dockerfile dan instruksi CMD.

1. Buka Dockerfile yang Anda buat sebelumnya di editor teks pilihan Anda.

2. Salin dan tempel contoh konten Dockerfile ke dalam Dockerfile Anda, seperti yang ditunjukkan di bawah ini, dan simpan.

Dockerfile ini membuat lapisan menggunakan ubuntu:20.04 sebagai gambar dasar. Kemudian memberitahu Docker untuk memanggil echo perintah yang meneruskan Hello world argumen untuk keduanya Dockerfile CMD dan ENTRYPOINT instruksi menggunakan exec dan shell membentuk.

FROM ubuntu:20.04
# CMD Instruction
CMD ["echo", "Hello world"] # Exec Form
CMD echo "Hello world"      # Shell Form
# ENTRYPOINT Instruction
ENTRYPOINT ["echo", "Hello world"] # Exec Form
ENTRYPOINT echo "Hello world"      # Shell Form

3. Saat berada di ~/docker direktori, buat gambar baru dengan menjalankan docker build dan beri nama demo . Perintah di bawah tag gambar sebagai demo dan mencari Dockerfile di direktori kerja saat ini (. ).

docker build -t demo .

4. Sekarang, jalankan container menggunakan image kemudian jalankan container Docker berdasarkan image Docker yang dibuat sebelumnya. Sekarang Anda akan melihat bahwa wadah mengembalikan Hello world yang berasal dari CMD instruksi yang disediakan di Dockerfile.

docker run -it demo

Menggunakan Variabel dalam Dockerfile

Terkadang Anda mungkin tidak mengetahui argumen baris perintah yang tepat untuk diteruskan ke perintah sebelumnya. Argumen yang perlu Anda teruskan ke perintah hanya diekspos saat runtime. Daripada menetapkan argumen perintah secara statis, Anda dapat menangkap dan meneruskan argumen tersebut ke perintah dengan variabel.

Anda hanya dapat menggunakan variabel Dockerfile di shell membentuk. Docker tidak mendukung variabel dalam perintah yang dipanggil melalui exec formulir.

Buka lagi Dockerfile di editor teks pilihan Anda, ganti semua yang ada di dalamnya dengan rangkaian perintah berikut dan simpan.

Anda akan melihat kali ini, Dockerfile menggunakan variabel lingkungan dan ditampilkan menggunakan ENV . Pada contoh di bawah, Dockerfile mendefinisikan variabel lingkungan yang disebut name dengan nilai friend . Setelah dibuat, variabel lingkungan ini kemudian dirujuk melalui $name .

Ketika Docker menjalankan sebuah wadah berdasarkan Dockerfile ini, ia akan memanggil echo perintah dan berikan argumen Welcome, friend .

FROM ubuntu:20.04
ENV name friend

CMD echo "Welcome, $name"
# or
## ENTRYPOINT echo "Welcome, $name"

Sekarang, buat image Docker dan jalankan container lagi secara opsional dengan memberikan nama tag shellform . Anda akan melihat bahwa Docker memanggil echo perintah dan mengembalikan output yang diharapkan.

Menggabungkan Dockerfile ENTRYPOINT dan Instruksi CMD

Sebagian besar waktu, Anda akan menjalankan perintah startup baik dalam instruksi CMD atau ENTRYPOINT. Lagi pula, Anda dapat menjalankan perintah sebanyak yang Anda inginkan menggunakan setiap metode. Namun, Anda juga dapat menjalankan satu perintah dan “membangunnya” menggunakan kedua instruksi tersebut.

Berdasarkan contoh sebelumnya, mungkin Anda memiliki Dockerfile yang terlihat seperti contoh di bawah ini. Apa adanya, jika Anda membuat gambar dan menjalankan wadah dari gambar itu, Docker akan memanggil echo perintah dan kembalikan Hello .

FROM ubuntu:20.04
ENTRYPOINT ["echo", "Hello"]

Mungkin Anda memiliki argumen lain yang ingin Anda sampaikan ke echo perintah tetapi tidak segera. Mungkin Anda ingin melakukannya lebih jauh di Dockerfile. Dengan memanggil CMD instruksi tanpa perintah, Anda dapat melakukannya.

Bila Anda menentukan perintah untuk dijalankan melalui ENTRYPOINT instruksi diikuti oleh CMD instruksi, Docker secara otomatis mengasumsikan nilai yang diteruskan ke CMD adalah argumen; bukan perintah.

Sekarang, tambahkan CMD referensi instruksi tanpa perintah, hanya argumen yang disebut world , seperti yang ditunjukkan di bawah ini.

FROM ubuntu:20.04
ENTRYPOINT ["echo", "Hello"]
CMD ["world"]

CInstruksi penggabungan harus selalu ditulis dalam bentuk exec karena perilaku "seperti array" dalam menentukan nilai yang dipisahkan oleh koma vs semua dalam satu string.

Setelah membuat image dan menjalankan container dari image, Anda dapat melihat bahwa alih-alih dua baris output (Hello dan world ), Docker hanya mengembalikan satu arti hanya satu echo pemanggilan perintah.

Kesimpulan

Anda sekarang harus memiliki pemahaman yang baik tentang menjalankan perintah startup kontainer Docker melalui CMD dan ENTRYPOINT instruksi Dockerfile. Setiap instruksi sedikit berbeda tetapi menyelesaikan tugas yang sama dan bahkan dapat digunakan bersama.

Dapatkah Anda memikirkan skenario di mana Anda lebih suka menggunakan CMD lebih dari ENTRYPOINT untuk menjalankan perintah startup?


Docker
  1. Pantau server linux menggunakan Prometheus dan Grafana

  2. Perbedaan Antara CMD dan ENTRYPOINT di Gambar Docker

  3. Cara membuat Gambar Docker dari Wadah dan File Docker

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

  2. Menginstal dan Menggunakan Docker di CentOS dan Fedora

  3. Menginstal dan Menggunakan Docker di Ubuntu dan Debian

  1. Perintah Docker CMD vs. Entrypoint:Apa Perbedaannya?

  2. Cara Menggunakan Gambar Docker, Wadah, dan File Docker Secara Mendalam

  3. Menggunakan skrip Apache2Buddy untuk kinerja dan stabilitas