Jika Anda mencari tampilan mendetail dari semua komponen utama Docker dari image Docker, container, dan sebagainya, perintah docker inspect cocok untuk Anda.
Dalam tutorial ini, Anda akan belajar bagaimana menemukan menjadi detektif untuk menemukan informasi rinci tentang banyak komponen Docker untuk debugging, pemecahan masalah, atau hanya rasa ingin tahu Anda.
Mari kita mulai!
Prasyarat
Jika Anda ingin mengikuti langkah demi langkah, pastikan Anda memiliki hal berikut:
- Docker – Tutorial ini menggunakan Docker v19.03.11 di Ubuntu 18.04.5 LTS.
- Gambar Docker apa pun yang diunduh dan tersedia. Tutorial ini menggunakan image NGINX Docker terbaru yang tersedia di Docker Hub.
- Setidaknya satu kontainer berjalan di host Docker.
Memeriksa Gambar Docker dengan Docker Inspect
Docker Inspect
dapat memberikan informasi tentang banyak komponen Docker yang berbeda tetapi pertama-tama mari kita mulai dengan salah satu komponen yang paling populer; gambar-gambar. Jika Anda telah mengunduh gambar, bagaimana Anda kemudian memeriksa informasi tentang gambar itu? Mari kita cari tahu.
Dengan asumsi Anda memiliki setidaknya satu gambar di host Docker Anda, gunakan inspect
perintah untuk menanyakan gambar itu. Perintah di bawah ini mengasumsikan bahwa Anda memiliki gambar bernama nginx
di host Anda.
docker image inspect nginx
Setelah dieksekusi, perintah di atas mengembalikan banyak informasi melalui JSON tentang gambar tertentu. Beberapa atribut penting adalah:
- Tag gambar.
- Waktu gambar dibuat.
- Nama host container terkait dengan nginx image Docker.
- Port jaringan yang disediakan wadah untuk jaringan luar.
- Anda juga akan melihat volume yang dilampirkan ke container milik nginx image Docker.
Mendapatkan Informasi Detail tentang Jaringan Docker
docker inspect
perintah tidak hanya diturunkan untuk mengambil informasi tentang gambar dan wadah; itu juga dapat menanyakan jaringan. Jaringan Docker memungkinkan wadah untuk berkomunikasi dengan cara yang berbeda, seperti melalui jaringan jembatan (jaringan pribadi), jaringan host (jaringan publik), atau jaringan overlay.
Mengetahui jaringan Docker penting karena memungkinkan Anda untuk beralih ke jaringan Docker lain kapan saja sesuai kebutuhan aplikasi dengan memutuskan sambungan dan kemudian menghubungkan kembali.
Dengan asumsi Anda masih di terminal:
1. Jalankan perintah di bawah ini. docker network ls
perintah mencantumkan semua jaringan yang ada di Docker. Anda memerlukan output dari perintah ini untuk menemukan ID jaringan.
docker network ls
Selanjutnya, berikan ID jaringan ke docker inspect network
memerintah. Perintah ini mengembalikan berbagai informasi tentang jaringan tertentu, seperti yang ditunjukkan di bawah ini.
docker inspect network 4748f122c987
1. Jenis jaringan.
2. Alamat subnet yang digunakan jaringan.
3 dan 4. Ringkasan informasi tentang setiap wadah yang menggunakan jaringan khusus ini.
Memahami Template Go Docker dan Format
Parameter
Hingga saat ini, Anda telah mempelajari cara menggunakan perintah inspeksi Docker tanpa menggunakan parameter opsi tambahan apa pun. Tetapi jika Anda perlu memanipulasi format output, pertimbangkan untuk menggunakan --format
bendera. --format
parameter menggunakan templat Go untuk memfilter dan menampilkan informasi yang dikembalikan dari docker inspect
.
Berbagai fungsi digunakan bersama dengan format flag, seperti join, println, table, dll. Mari kita bahas beberapa di antaranya!
Misalnya, mungkin Anda ingin menggabungkan beberapa nilai dari output dari wadah tertentu. Jika demikian, join
perintah bekerja dengan baik. Di bawah, Anda akan melihat bahwa join
perintah menggabungkan string bersama-sama (nginx, -g, daemon off
) dengan setiap elemen dipisahkan oleh pemisah (,
).
docker inspect --format '{{join .Args " , "}}' container_id
Mungkin Anda ingin memanfaatkan nilai? Gunakan upper
perintah.
docker inspect --format "{{upper .Name}}" container_id
Anda dapat menemukan berbagai contoh penggunaan format
parameter.
Menemukan Nama Gambar Dasar Kontainer Docker
Di bagian sebelumnya, Anda melihat cara mendapatkan tampilan mendetail dari semua gambar Docker Anda, termasuk wadah yang menggunakan gambar tersebut. Tetapi bagaimana jika Anda sudah mengetahui ID penampung dan perlu menemukan gambar tempat pembuatannya dengan cepat? Anda dapat memberikan ID kontainer ke docker inspect
.
Untuk menemukan nama image dari mana container tertentu dibuat, jalankan docker inspect
memerintah. Perintah di bawah ini meneruskan ID penampung (8f34d039fa3a
dalam hal ini) ke docker inspect
dan menggunakan format
parameter untuk hanya mengembalikan image
nilai dari Config
simpul dalam keluaran JSON.
# 8f34d039fa3a is the container represented with ContainerID.
docker inspect --format='{{.Config.Image}}' 8f34d039fa3a
Anda dapat melihat keseluruhan Config
node terlihat seperti di bawah ini dan di mana Image
nama berasal dari.
Menemukan Alamat IP Container, Alamat Mac, dan Port Bindings
Meskipun Anda sekarang tahu cara menemukan jaringan yang digunakan wadah, bagaimana Anda tahu apa alamat IP atau Alamat Mac, dan Port Bindings pada jaringan yang digunakan wadah? Anda menebaknya! docker inspect
.
Untuk mempersempit alamat IP yang digunakan container, berikan ID container ke docker inspect
memerintah. Sekali lagi, gunakan format
parameter untuk memfilter JSON yang tidak diinginkan untuk mendapatkan apa yang Anda cari.
Anda akan melihat format
argumen parameter di bawah ini memberi tahu docker inspect
hanya untuk mengembalikan nilai yang tertanam di dalam NetworkSettings
→Networks
→ IPAddress
Atribut JSON menggunakan range
atribut. Atribut range memungkinkan Anda untuk mengulangi array, menyetel .
nilai untuk setiap elemen larik.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container
Anda akan melihat NetworkSettings
utama simpul di bawah dan di mana IPAddress
nilai bersarang.
Demikian pula, untuk menemukan alamat MAC wadah, gunakan docker inspect
perintah container seperti di bawah ini.
Sekali lagi, Anda akan melihat bahwa format
argumen parameter di bawah ini menggunakan range
tapi kali ini, temukan alamat Mac penampung dengan memeriksa NetworkSettings
→Networks
→ Mac address
.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' 3dd206041249
Terakhir, Untuk memeriksa semua ikatan port suatu wadah, jalankan docker inspect
di bawah ini memerintah. Anda akan melihat format
argumen parameter di bawah ini menggunakan range
untuk menemukan binding port container dengan memeriksa NetworkSettings
→HostPort
.
Anda tidak perlu tahu tentang binding port karena jika ada port yang sudah digunakan, port tersebut tidak boleh digunakan lagi; jika tidak, itu akan memunculkan pesan kesalahan yang menyatakan bahwa port telah dialokasikan.
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 8f34d039fa3a
Mendapatkan tampilan mendetail dari Volume Docker Menggunakan Docker Inspect
Hingga saat ini, Anda telah mempelajari cara menemukan informasi mendetail tentang gambar, wadah, dan jaringan, tetapi Anda belum mempelajari tentang penyimpanan. Mari kita ubah itu.
Untuk memastikan tutorial memiliki setidaknya satu volume terpasang yang terpasang ke wadah, pertama-tama buat wadah dan pasang volume penyimpanan.
Jika Anda sudah memiliki volume penyimpanan yang terpasang ke wadah, Anda dapat melewati bagian ini.
Perintah di bawah ini membuat wadah Docker baru bernama my_container
, memperlihatkan port 80 ke host (-p 80:80
), memasang volume berdasarkan /var/container_dir . host direktori bernama mounted_val (-v mounted_vol:/var/container_dir
) menggunakan nginx
gambar.
docker run --name my_container -p 80:80 -v mounted_vol:/var/container_dir nginx
Sekarang Anda memiliki volume yang dipasang ke wadah, berikan nama volume ke docker volume inspect
. Perhatikan di bawah bahwa perintah mengembalikan output JSON, hanya memberikan informasi tentang volume penyimpanan yang dipasang.
docker volume inspect mounted_vol
Kesimpulan
Anda sekarang seharusnya dapat menggunakan docker inspect
perintah dalam banyak situasi berbeda, mulai dari menanyakan informasi tentang gambar, wadah, jaringan, dan penyimpanan.
Bagaimana Anda berencana menggunakan docker inspect
untuk menanyakan informasi tentang lingkungan Docker Anda sendiri?