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.
- 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.