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

Docker Exec:Perintah Goto Anda untuk Menjalankan Perintah di Docker

Pernahkah Anda perlu melihat apa yang terjadi di dalam wadah Docker? Wadah dimaksudkan untuk menjadi idempoten:Jika ada masalah, pindahkan wadah baru. Seringkali hidup tidak sesederhana itu. Anda perlu menjalankan perintah dalam wadah untuk mengidentifikasi masalah. Di sinilah docker exec perintah dapat membantu.

Artikel ini akan mengajari Anda cara menjalankan perintah pada container Docker yang sedang berjalan menggunakan docker exec perintah.

Prasyarat

Untuk mengikuti contoh dalam artikel ini, Anda harus mematuhi yang berikut.

  • Semua versi terbaru dari Desktop Docker akan berfungsi di Windows, Linux, atau macOS. Tutorial ini menggunakan v3.1.0 yang berjalan di Windows 10.

Memulai Kontainer NGINX

Docker exec menjalankan perintah dalam wadah. Namun, untuk melakukannya, Anda harus terlebih dahulu memiliki wadah untuk menjalankan perintah tersebut. Mari kita mulai dengan mengunduh gambar Docker dan membuat wadah demo.

  1. Buat direktori baru, tutorial ini menggunakan C:\gitrepos\test , untuk menampung file yang digunakan untuk penampung.

2. Buat file, bernama dockerfile (tanpa ekstensi), yang berisi kode berikut. Dockerfile mendefinisikan langkah-langkah yang diperlukan untuk membuat container.

FROM nginx:alpine
 COPY index.html /usr/share/nginx/html/index.html

3. Selanjutnya, buat file, di direktori yang sama, beri nama index.html yang berisi kode berikut. Ini adalah file HTML yang, ketika wadah dimulai, akan menampilkan pesan Hello World.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Hello World - Nginx Docker</title> 
    <style> 
       h1{ font-weight:lighter; font-family: Arial, Helvetica, sans-serif; 
       } 
    </style> 
    </head> 
    <body> 
       <h1> 
          Hello World 
       </h1> 

    </body> 
    </html>

4. Sekarang buat wadah Nginx Docker. Karena Dockerfile berada di direktori kerja saat ini, tentukan . untuk membiarkan mesin Docker tahu untuk melihat ke sana. Juga, pastikan untuk menandai wadah dengan my-ngnix menggunakan t parameter untuk memastikan referensi yang lebih mudah di masa mendatang.

docker build -t my-nginx .

5. Sekarang container sudah dibuat, jalankan container dengan perintah Docker run.

# rm - Informs Docker to delete the container after it has stopped 
# d - Return control of the command-line after the command has been executed 
# p - Map the internal container port 80 to an external port 80 docker run --rm -d -p 80:80 my-nginx

6. Terakhir, buka browser web Anda dan navigasikan ke http://localhost/ untuk melihat berikut ini.

Menjalankan Perintah dengan Docker Exec

Saat menjalankan perintah dalam wadah Docker, Anda mungkin perlu menjalankan perintah secara interaktif. Menjalankan perintah secara interaktif berarti mengetikkan sebuah perintah, mendapatkan umpan balik, mengetikkan perintah lain, dll. Perintah interaktif mengambil alih sesi Anda dan mencegah Anda melakukan hal lain.

Tetapi bagaimana jika Anda sudah mengetahui perintah untuk dikirim ke wadah sebelumnya dan ingin menjalankan perintah di latar belakang? Dalam hal ini, Anda dapat menjalankan perintah non-interaktif. Perintah non-interaktif memungkinkan Anda mengirim perintah ke Docker dan langsung mengembalikan kendali konsol.

Menemukan Nama dan ID Penampung

Sekarang setelah Anda membangun wadah, Anda dapat menjalankan perintah di dalam wadah. Sebelum menjalankan perintah, temukan nama atau ID wadah NGINX. Nama atau ID akan berfungsi dalam perintah Docker. Dengan mengingat hal itu, mengingat ID mungkin lebih menantang daripada namanya!

Untuk menampilkan informasi container yang sedang berjalan, jalankan ps Docker perintah untuk menampilkan informasi berikut.

docker ps

Salin salah satu ID unik, e17e4b6be01a , atau nama yang dibuat secara acak mystifying_chandrasekhar ke clipboard Anda untuk digunakan nanti.

Menjalankan Perintah Non-Interaktif dengan Docker Exec

Sebagai contoh menjalankan perintah non-interaktif, salin dan jalankan perintah di bawah ini untuk mengembalikan daftar file di /var/log direktori dengan ls -l memerintah. Lewati semuanya setelah nama wadah, mystifying_chandrasekhar , ke exec Docker perintah.

docker exec mystifying_chandrasekhar ls -l /var/log

Menghindari Keluaran Konsol dengan Perintah Docker

Dengan segera mengembalikan kontrol shell ke pengguna, operasi besar menghindari pengikatan konsol. Lupakan keluaran konsol dengan d . yang terpisah pilihan. Perintah di bawah ini membuat file /tmp/execWorks melalui touch perintah di dalam wadah dan tidak menampilkan output apa pun di konsol.

docker exec -d mystifying_chandrasekhar touch /tmp/execWorks

Melaksanakan Perintah Interaktif dengan Docker Exec

Hingga saat ini, Anda telah mempelajari cara menjalankan perintah non-interaktif dalam wadah Docker dengan docker exec . Namun, Anda mungkin menghadapi saat ketika Anda harus memecahkan masalah wadah, misalnya, saat Anda perlu mengeluarkan perintah ke wadah secara interaktif. Dalam hal ini, Anda perlu menjalankan perintah secara interaktif.

Menjalankan perintah secara interaktif dengan docker exec membutuhkan dua opsi, i dan t . i opsi membuat STDIN tetap terbuka, memungkinkan perintah dikirim ke wadah, dan t option mengalokasikan pseudo-TTY (PTY), saluran komunikasi, untuk mengetikkan perintah.

Salin dan tempel perintah berikut untuk membuka prompt perintah interaktif ke wadah Docker yang sedang berjalan dengan shell Bourne (sh), seperti yang ditunjukkan oleh perubahan prompt ke / # .

docker exec -it mystifying_chandrasekhar sh

Setelah di shell, sekarang jalankan perintah di bawah ini untuk mendemonstrasikan daftar file dari dalam wadah. Terakhir, jalankan exit perintah untuk keluar dari shell interaktif.

ls -l /var/log
exit

Untuk membuka prompt interaktif di direktori tertentu, teruskan path ke w opsi memberitahu Docker untuk memulai shell di direktori tertentu.

Meneruskan Variabel Lingkungan ke Running Container

Banyak program menggunakan variabel lingkungan untuk mengatur konfigurasi saat startup. Misalnya, sebagian besar aplikasi Java memerlukan JAVA_HOME variabel lingkungan untuk disetel ke jalur Java.

Anda dapat meneruskan variabel lingkungan ke sesi menggunakan e pilihan. Misalnya, mungkin Anda perlu mengisi variabel lingkungan yang disebut MYVAR ke dalam wadah yang sedang berjalan. Untuk melakukannya, gunakan e opsi dan berikan pasangan kunci/nilai MYVAR="<some value>" seperti yang ditunjukkan di bawah ini.

docker exec -it -e MYVAR="hello" mystifying_chandrasekhar sh
echo $MYVAR

Meneruskan Variabel Lingkungan Dengan File

Jika Anda memiliki banyak variabel lingkungan atau konfigurasi bersama, menyimpan variabel tersebut dalam file mungkin lebih mudah. Lewati file melalui jalur relatif atau absolut ke Docker dengan --env-file pilihan. Teknik ini sering digunakan untuk memberikan kredensial aman ke wadah. Pastikan untuk tidak pernah mengkomit kredensial ke kontrol versi!

Buat file teks bernama env-vars.txt dengan variabel lingkungan untuk lulus dan nilai-nilai mereka. File ini dapat disebut apa saja yang Anda suka dan tidak memerlukan .txt ekstensi file.

Berikan variabel lingkungan ke Docker dengan env-file pilihan. Verifikasi bahwa variabel tersedia dengan echo perintah seperti yang ditunjukkan pada tangkapan layar di bawah ini.

# Pass the env-vars.txt file and open an interactive prompt
docker exec -it --env-file env-vars.txt mystifying_chandrasekhar sh
# Verify that the environmental variables are available in the Docker container
echo $MYVAR
echo $FOO
echo $SOMETHING

Berinteraksi dengan Container yang Berjalan sebagai Pengguna Berbeda

Dalam produksi, aplikasi sering dijalankan sebagai pengguna tertentu untuk membatasi aksesnya. Jika Anda menjalankan aplikasi sebagai pengguna tertentu dalam produksi, Anda juga harus melakukannya saat menguji perintah.

Dalam contoh ini, wadah Docker dijalankan sebagai nginx pengguna. Berikan pengguna ke w opsi untuk memberi tahu Docker untuk memulai wadah sebagai nginx Akun. whoami perintah, jalankan dari dalam wadah, mengonfirmasi bahwa nginx pengguna memang digunakan.

docker exec -it -u nginx mystifying_chandrasekhar sh
whoami

Langkah Selanjutnya

Anda telah mempelajari cara menjalankan perintah di dalam container yang sedang berjalan menggunakan docker exec memerintah. Memanfaatkan exec perintah untuk masuk dan menginterogasi container yang sedang berjalan, Anda memiliki alat baru yang andal di gudang senjata Anda untuk memecahkan masalah container Docker.

Sekarang cobalah untuk mengambil apa yang telah Anda pelajari selangkah lebih maju dan gunakan kontrol versi Git untuk menarik situs web statis ke dalam wadah, daripada menyalin satu file. Jika Git baru bagi Anda, maka artikel Panduan Pemula untuk Kode Visual Studio dan Git adalah tempat yang bagus untuk memulai.


Docker
  1. Beberapa Perintah DOCKER

  2. Perintah Docker Lembar Cheat Referensi Cepat

  3. Cara Menjalankan Perintah di Running Docker Container

  1. Membuat Wadah Server Windows Docker Pertama Anda

  2. Cara Mengubah Zona Waktu Untuk Wadah Docker

  3. Memahami Output Perintah "statistik buruh pelabuhan"

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

  2. 14 Perintah Terminal Linux Berbahaya

  3. Bagaimana cara menentukan nama host untuk wadah yang sedang berjalan?