Cara Berinteraksi dengan Bekas Docker
- 3390
- 953
- Wendell Shields
Artikel ini memanjangkan artikel Docker sebelumnya dan menunjukkan cara berinteraksi dengan bekas Docker dengan melaksanakan arahan di dalam bekas, memasang perisian di dalam bekas, memeriksa status kontena, mengakses bekas menggunakan bash, berterusan perubahan ke dalam imej dan mengeluarkan bekas dan imej yang tidak digunakan.
Dalam tutorial ini anda akan belajar:
- Cara melaksanakan arahan di dalam bekas
- Cara memasang perisian di dalam bekas
- Cara memeriksa status kontena
- Cara mengakses bekas menggunakan bash
- Bagaimana untuk meneruskan perubahan menjadi gambar
- Cara Menghapus Bekas dan Imej yang Tidak Digunakan
Keperluan perisian dan konvensyen yang digunakan
Kategori | Keperluan, konvensyen atau versi perisian yang digunakan |
---|---|
Sistem | Mana -mana taburan Linux |
Perisian | Docker |
Yang lain | Akses istimewa ke sistem linux anda sebagai akar atau melalui sudo perintah. |
Konvensyen | # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak |
Cara Berinteraksi dengan Bekas Docker
Dalam artikel pertama siri ini, anda mempelajari konsep Docker dan beberapa arahan asas dan melihat bagaimana anda dapat dengan mudah menjalankan perisian dengan cara yang dikomentari, tanpa menyentuh konfigurasi sistem operasi tuan rumah anda. Sekarang mari kita pergi lebih mendalam, masuk ke dalam bekas yang sedang berjalan dan melaksanakan beberapa arahan.
Melaksanakan arahan di dalam bekas yang sedang berjalan
Dalam artikel sebelumnya, anda memulakan bekas Apache. Imej yang mendasari tidak dipasang PHP, jadi hanya mampu melayani halaman HTML statik. Mari kita dapatkan bekas dengan Apache dan PHP dipasang di atasnya. Sekiranya anda tertanya -tanya, ada gambar yang sedia digunakan dengan kedua -dua Apache dan PHP dipasang, dan mereka boleh didapati di Docker Hub. Kami melakukan ini hanya untuk menunjukkan bagaimana imej dapat disesuaikan dengan keperluan anda.
Oleh itu, mari kita mulakan contoh Debian menggunakan baris arahan yang serupa dengan artikel sebelumnya, tetapi dengan dua perbezaan: mari kita berikan nama (--Nama debian_container
), jadi kita boleh merujuknya kemudian, dan memperuntukkan terminal untuk dijalankan (-ia
).
$ docker run -it -nama debian_container -d -p 8000: 80 -v "$ pwd":/var/www/html debian
Kita boleh berinteraksi dengan bekas Docker yang berjalan. Anda telah diberitahu sebelum ini bahawa bekas berkongsi kernel yang sama dengan sistem operasi tuan rumah. Mari kita periksa.
$ docker exec debian_container uname -a
Perintah Docker Exec
di atas melaksanakan arahan yang diberikan di dalam bekas dan tunjukkan output itu.
Semua arahan Docker mempunyai bantuan yang berkaitan, oleh itu kita dapat melihat pilihannya Docker Exec
Menerima:
$ Docker Exec -Help
Sekarang anda boleh bermain -main dengan arahan lain:
$ docker exec debian_container ls -l $ docker exec debian_container pwd $ docker exec debian_container whoami $ docker exec debian_container Cat /etc /isu
Salinan Dalam perintah terakhir ini, kami mengetahui bahawa bekas sedang menjalankan Debian 9, walaupun sistem operasi mesin anda. Seperti yang dinyatakan sebelum ini, sistem operasi tuan rumah dan kontena hanya berkongsi kernel.
Sekiranya anda mencuba tetapi tidak dapat melaksanakan arahan di dalam bekas, mungkin tidak ada. Imej (seperti semua imej lain) dibina dari persediaan Debian yang minimum, jadi alat tambahan mesti dipasang. Ia mencapai dua objektif: saiz cakera yang lebih kecil dan keselamatan yang lebih baik kerana kurang perisian bermakna bug yang lebih sedikit untuk dieksploitasi.
Sekarang, mari masuk ke dalam bekas.
$ docker exec -it debian bash root@b5c694a02248:/usr/local/apache2##
Salinan Perhatikan bahawa arahan telah berubah dan sekarang anda pengguna akar
di dalam bekas (B5C694A02248
adalah nama hos di dalam bekas) di dalam shell bash.
Memasang perisian ke dalam bekas
Kami kini mempunyai cangkang di dalam bekas dengan pengguna akar
. Oleh kerana ini adalah versi Debian yang dipotong, bahkan tidak ada arahan Atas
dan ps
. Mari kita pasangkannya.
# Apt Update # Apt Pasang Procps
Salinan Anda dapat melihat apa yang sedang berjalan Atas
dan ps -ef
.
root@f5b423465e03:/# ps -ef uid pid ppid c stime tty time cmd root 1 0 0 19:46 pts/0 00:00:00 Bash root 42 0 0 19:49 pts/1 00:00:00 Bash root 310 42 0 19:53 pts/1 00:00:00 ps -ef root@f5b423465e03:/#
Salinan Ya, itu berjimat. Bekas Docker biasanya mempunyai bilangan minimum proses yang melaksanakan. Untuk meninggalkan cangkang dan kembali ke sistem operasi tuan rumah anda, hanya keluar bash (jenis keluar
atau ctrl+d
).
Perhatikan bahawa banyak fail telah dimuat turun oleh kemas kini apt
dan pemasangan apt
. Mereka semua wujud dalam cakera bekas yang sedang berjalan. Mereka masih wujud jika bekas dihentikan dan dimulakan lagi (Docker Stop Debian_Container
; Docker Mula Debian_Container
). Tetapi mereka tidak wujud dalam gambar. Ini bermaksud, jika anda mengeluarkan bekas ini (docker rm debian_container
) dan mulakan bekas baru, anda perlu memasang pakej procps
sekali lagi. Juga, jika anda memulakan imej Debian di tuan rumah yang lain, anda juga perlu memasang procps
sekali lagi. Kami akan melihat kemudian bagaimana untuk meneruskan imej dengan pengubahsuaian cakera, jadi pada masa akan datang anda memulakan bekas, semua perisian akan dipasang.
Sekarang, mari kita dapatkan Apache dan PHP dipasang. Perintah di bawah akan mengambil masa yang lama untuk menyelesaikan dan akan memuat turun dan memasang semua pakej ketergantungan, termasuk Apache dan PHP - ia akan mengambil beberapa minit. Akhirnya, mulakan Apache dan mengakses localhost di port 8000 di pelayar web anda (http: // localhost: 8000
). Anda akan melihat halaman debian lalai untuk Apache.
# Apt Pasang Libapache2-Mod-PhP # Service Apache2 Mula
Salinan Halaman lalai Apache Debian.
Sekarang mari kita sahkan bahawa php ada. Anda boleh pergi ke /var/ww/html
di dalam bekas, atau keluar dari shell kontena dan taip dari direktori semasa dalam sistem operasi tuan rumah anda (ingat kami memetakan direktori semasa /var/www/html
di dalam bekas?)
$ echo "> phpinfo.php
Dan voilà (http: // localhost: 8000/phpinfo.php
).
Melakukan gambar
Seperti yang dinyatakan sebelum ini, perubahan yang dibuat kepada bekas berterusan selagi bekas itu berterusan, dan bekas dijangka menjadi tidak lama lagi - mereka dibuat dimusnahkan. Pengubahsuaian tahan lama harus dijadikan gambar.
Artikel seterusnya akan menunjukkan cara membuat imej yang disesuaikan dengan cara yang elegan (dan sangat disyorkan), menggunakan Dockerfile. Buat masa ini, anda akan belajar hack yang dapat membantu dalam situasi tertentu di mana tidak mungkin atau wajar untuk menulis fail docker. Memperluas gambar dengan fail docker jika disukai kerana ia boleh diedit dengan mudah semasa melakukan keadaan kontena ke imej baru tidak meninggalkan kesan perubahan yang dibuat kecuali analisis lapisan sistem fail yang susah payah dilakukan.
Perintah Docker komit
mempunyai dua parameter: nama kontena dan Nama gambar baru Dan ia akan membuat imej baru pada cache imej tempatan berdasarkan bekas. Dalam arahan di bawah, debian_container
adalah nama kontena dan Debian-APACHE-PHP
adalah nama gambar baru.
$ docker komit debian_container debian-apache-php sha256: 3f01c0c71539c4dc6dfd7483ff68c411143b7eeb5aeb52de4a9892c8cc136eda236
Salinan Menyenaraikan gambar di cache tuan rumah.
$ Docker Images Repository Tag Id Id dicipta Saiz Debian-Apache-PHP Terkini 3F01C0C71539 10 minit yang lalu 235MB Debian terbaru BE2868BEBABA 11 hari yang lalu 101MB
Salinan Perhatikan bahawa terdapat imej baru di tuan rumah anda. Satu ciri menarik imej dan pengurusan kontena ialah Docker hanya akan menyimpan perbezaan keadaan cakera antara imej semasa dan imej yang berdasarkan, jadi tidak ada ruang cakera yang berlebihan yang dibazirkan. Untuk ini, Docker menggunakan sistem fail berlapis yang menggunakan pendekatan salinan-on-write: Apabila bekas baru dicipta, ia mewarisi cakera yang sama dari imej dan, sebagai pengubahsuaian dibuat untuk fail, mereka ditulis dalam lapisan baru.
Memeriksa bekas
Docker mengekalkan banyak maklumat mengenai objek Docker. Perintah Memeriksa Docker
digunakan untuk melihatnya.
$ docker periksa debian_container
Perintah itu akan mengambil objek JSON dengan puluhan baris yang memperincikan status kontena: ID kontena, Tarikh Dibuat, Negeri, Imej, Laluan Log, Port, Jilid, Rangkaian, dll.
Bekas pemangkasan dan gambar
Selepas bermain -main dengan bekas dan imej, cakera tuan rumah akhirnya akan mengisi dengan entiti yang ditinggalkan yang perlu dibersihkan supaya anda dapat menuntut semula ruang cakera.
Perintah Docker Container Prune
akan membuang semua bekas yang dihentikan. Berhati -hati: Setelah bekas dikeluarkan, keadaan yang berkaitan hilang. Membuat sandaran atau komited perubahan pada gambar sebelum ini.
Perintah Docker Image Prune
akan memadam semua gambar yang tidak digunakan. Kami belum membina gambar, tetapi arahan ini berguna dalam artikel seterusnya.
Kesimpulan
Dalam artikel ini, anda belajar bagaimana untuk berinteraksi dengan bekas dan bagaimana untuk melakukan perubahan kepada imej, walaupun pendekatan ini tidak disyorkan.
Dalam artikel seterusnya, anda akan membuat gambar anda sendiri dengan Dockerfile, cara yang disyorkan untuk menyesuaikan gambar Docker.
Lebih banyak dalam siri artikel Docker ini
- Pengenalan tangan kepada bekas Docker
- Cara menyesuaikan gambar Docker dengan Dockerfiles
Tutorial Linux Berkaitan:
- Pengenalan kepada Automasi, Alat dan Teknik Linux
- Perkara yang hendak dipasang di Ubuntu 20.04
- Menguasai Gelung Skrip Bash
- Cara membuat timbunan lampu berasaskan Docker menggunakan Docker pada ..
- Linux Apache Tidak Melaksanakan Fail PHP: Penyelesaian
- Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
- Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
- Pemasangan WordPress OpenLiteSpeed
- Cara memasang PHP di Ubuntu Linux
- Pemasangan ampache raspberry pi
- « Dayakan repositori pengurusan langganan di redhat 8 linux
- Cara Melaksanakan Operasi Input/Output Python pada Fail dengan Fungsi Terbuka Python »