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

3 Perintah Docker yang Tidak Dikenal yang Akan Membantu Anda dalam Berbagai Skenario

Jika Anda menggunakan Docker untuk sementara waktu, Anda mungkin sudah memiliki alur kerja yang sederhana dan efektif yang disesuaikan untuk Anda, yang mencakup beberapa perintah buruh pelabuhan favorit Anda (sub-perintah secara teknis benar).

Sebagai contoh, saya biasa menghapus container yang tidak berjalan menggunakan perintah long yang terlihat seperti ini docker container rm $(docker container ps -qf status=exited) , itu berhasil, jelas menimbulkan kesalahan setiap kali tidak ada wadah yang menggantung. Ini berhenti suatu hari ketika saya mengetahui bahwa kami juga memiliki prune sub-perintah untuk kontainer! Jadi sekarang perintah panjang itu telah menjadi docker container prune sederhana .

Intinya adalah meskipun banyak dari kita telah menggunakan Docker untuk sementara waktu, ada kemungkinan beberapa hal terlewatkan, atau bahkan terlupakan seiring waktu.

Dalam artikel ini, saya akan memberi Anda tiga sub-perintah buruh pelabuhan, yang mungkin baru bagi Anda, atau Anda tidak terlalu sering menggunakannya, tetapi saya pikir Anda harus melakukannya.

Sub-perintah ini mungkin juga menyertakan sub-perintahnya sendiri.

1. Sub-perintah sistem

Docker memiliki system perintah yang memberi Anda beberapa informasi tingkat sistem yang terkait dengan buruh pelabuhan. Anda sebenarnya telah menggunakan salah satu sub-perintahnya untuk sementara waktu sekarang. Ingat docker info ? Perintah ini sebenarnya docker system info .

Untuk mengetahui lebih lanjut tentang subperintah ini dan apa yang ditawarkannya, jalankan --help pilihan di atasnya.

➟ docker system --help

Usage:  docker system COMMAND

Manage Docker

Commands:
  df          Show docker disk usage
  events      Get real time events from the server
  info        Display system-wide information
  prune       Remove unused data

Run 'docker system COMMAND --help' for more information on a command.

Mari kita bahas masing-masing sub-perintah ini karena menurut saya semuanya sangat penting.

df sistem buruh pelabuhan

Pernahkah Anda berada dalam situasi di mana ruang disk server Anda tampak hampir penuh? Untuk memeriksa apakah itu wadah (berjalan/volume), Anda mungkin telah menggunakan du perintah langsung di root data.

Data root atau data-root adalah lokasi dimana buruh pelabuhan menyimpan semua data yang berhubungan dengan statusnya. Itu termasuk tetapi tidak terbatas pada gambar (lapisan), volume, informasi terkait jaringan, plugin.

Menggunakan du pada root data membutuhkan sudo akses.

✗ du -h --max-depth=1 /var/lib/docker
du: cannot read directory '/var/lib/docker': Permission denied
4.0K    /var/lib/docker

Tidak hanya itu, untuk mengetahui secara eksplisit berapa banyak volume yang dialokasikan atau gambar, Anda harus menjalankan perintah beberapa kali.

➟ sudo du -h --max-depth=0 /var/lib/docker/volumes && \
    sudo du -h --max-depth=0 /var/lib/docker/image && \
    sudo du -h --max-depth=0 /var/lib/docker/

Alternatif yang jauh lebih baik adalah memanggil docker system df memerintah. Ini akan secara otomatis mendeteksi root data dan dengan demikian mencetak semua informasi yang berkaitan dengan penggunaan disk oleh wadah, gambar, dan volume Docker.

Inilah yang ditampilkan sistem saya saat ini (ini adalah pemasangan baru)

➟ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        1         84.17MB   84.17MB (100%)
Containers      1         1         8.219MB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

Pangkas sistem buruh pelabuhan

Jika Anda ingin menghapus (1) semua jaringan yang tidak digunakan, (2) gambar yang menggantung, (3) wadah yang berhenti, (4) semua volume yang tidak digunakan, kemungkinan besar Anda menggunakan, atau terbiasa menggunakan empat perintah terpisah untuk mencapai pekerjaan.

docker network prune && \
    docker image prune && \
    docker volume prune && \
    docker container prune

Jika sebelumnya Anda tidak tahu tentang container prune seperti saya maka perintahnya semakin besar. Beruntung bagi kita, semua ini bisa dilakukan hanya dengan menggunakan perintah sederhana, yaitu docker system prune --volumes .

Secara default docker system prune tidak menghapus volume, untuk itu Anda perlu menggunakan --volumes pilihan. Perintah ini juga menghapus cache build untuk Anda.

Anda dapat menggunakan -f opsi untuk menghindari (terkadang) prompt yang mengganggu. Lihat contoh di bawah ini:

➟ docker system prune --volumes -f
Deleted Containers:
672d39c1a78969887f411ce9139e74e5b21c31fccf2bcf8c1190a9e166089ede

Deleted Networks:
Example
SSHnet
Dummy

Deleted Volumes:
dummy

Total reclaimed space: 0B

Pilihan lainnya termasuk -a yang menghapus semua gambar yang tidak digunakan, bukan hanya gambar yang menggantung.

Acara sistem Docker

Perintah ini mungkin tidak berguna sepanjang waktu, tetapi menurut saya ini adalah sesuatu yang harus diperhatikan semua orang.

docker system events atau docker events singkatnya memberi Anda acara waktu nyata secara langsung untuk daemon buruh pelabuhan (dockerd ). Ini dapat membantu memantau peristiwa tertentu seperti saat gambar telah dihapus, misalnya.

Lihat tangkapan layar di bawah untuk memahaminya dengan lebih baik.

2. Sub-perintah konteks

Ini adalah sub-perintah indah lainnya yang tidak banyak diketahui sejauh yang saya tahu. Konteks untuk eksekusi perintah buruh pelabuhan adalah beberapa pasangan nilai kunci, yang mencakup tetapi tidak terbatas pada titik akhir, host, mungkin beberapa file konfigurasi, dll.

Setelah Anda membuat konteks, itu dapat digunakan kembali nanti.

Salah satu kasus penggunaan praktis terbesar, terutama bagi saya telah membuat konteks terpisah untuk masing-masing server tempat saya menjalankan buruh pelabuhan. Karena sebagian besar pekerjaan saya berkisar pada itu, alih-alih masuk ke server setiap saat, saya menggunakan klien lokal saya dengan menghapus server buruh pelabuhan melalui SSH.

Cara Mengatur Akses Jarak Jauh ke Docker Daemon [Panduan Lengkap]Tidak ingin ssh ke server jarak jauh dan kemudian menjalankan perintah buruh pelabuhan? Anda dapat mengatur akses buruh pelabuhan jarak jauh yang memiliki manfaat lain juga. Buku Pegangan LinuxDebdut Chakraborty

Biarkan saya menunjukkan kepada Anda bagaimana saya mencapai ini dengan konteks buruh pelabuhan.

Pertama saya memiliki server yang digunakan di Linode, yang menjalankan buruh pelabuhan. Jika saya mengakses daemon buruh pelabuhan jarak jauh, tanpa konteks, saya akan menggunakan perintah seperti berikut

➟ docker --host ssh://[email protected]:7770 ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Jadi untuk mengakses daemon jarak jauh saya harus alias docker ke docker --host ssh://[email protected]:7770 , atau gunakan variabel lingkungan DOCKER_HOST . Tapi ini membuat beralih ke host lain sangat sulit. Alternatif yang lebih mudah adalah membuat konteks saja.

Perintah berikut membuat konteks bernama remote , untuk titik akhir buruh pelabuhan dengan host yang berbeda dari host lokal.

docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"

Outputnya terlihat seperti ini:

➟ docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"
remote
Successfully created context "remote"

Sekarang Anda dapat menggunakan -c opsi dengan docker jika Anda ingin memeriksa sesuatu dengan cepat atau untuk operasi berulang, ubah konteksnya ke yang baru ini.

Dengan -c pilihan:

➟ docker -c remote ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Dengan docker context use [CONTEXT_NAME] :

➟ docker context use remote
remote
Current context is now "remote"
~ 
➟ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Untuk keluar dari konteks, gunakan use subperintah dengan default untuk nama konteks:

➟ docker context use default
default
Current context is now "default"
~ 
➟ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3. Jeda &batalkan jeda perintah

Penyebaran besar (aplikasi) sekarang dibagi menjadi beberapa komponen, lebih dikenal sebagai layanan mikro. Saat Anda menerapkannya menggunakan sesuatu seperti docker-compose, terkadang yang terjadi adalah satu komponen dimulai sebelum komponen yang menjadi sandarannya. Ini menjadi masalah karena dependensinya (atau dependensinya) belum dimulai, komponen ini akan gagal untuk memulai.

Anda dapat mengurangi masalah ini dengan menggunakan kebijakan mulai ulang di Docker, tetapi kebijakan tersebut tidak mencegah membanjiri log dengan upaya yang gagal. Apa yang biasa saya lakukan di awal adalah menghentikan container/service sampai ketergantungan benar-benar dimulai.

Cara yang lebih baik adalah dengan menjeda penampung untuk sementara waktu, dan setelah layanan yang diperlukan berhasil muncul, Anda dapat membatalkan jeda penampung dan semuanya akan bergerak maju dari sana dengan baik.

Meskipun container cepat berputar, ini adalah cara yang lebih cepat untuk mengatasi masalah seperti itu.

Sintaks untuk pause dan unpause cukup sederhana.

docker pause [CONTAINER_NAME|ID]
docker unpause [CONTAINER_NAME|ID]

Itu menyimpulkan artikel ini untuk saat ini. Jika saya menemukan perintah seperti itu lagi, berguna atau menarik, saya akan memperbarui artikel ini sesuai dengan itu.

Apakah Anda memiliki perintah Docker yang menurut Anda seharusnya ada dalam daftar ini? Beri tahu saya di komentar di bawah.


Docker
  1. 3 perintah Linux untuk mematikan sistem dan Anda akan dapat melakukannya dengan mudah

  2. Beberapa Perintah DOCKER

  3. Perintah Docker Lembar Cheat Referensi Cepat

  1. 20 Contoh Perintah OpenSSL yang harus anda ketahui

  2. Haruskah Anda Menjalankan Database di Docker?

  3. 10 Perintah Mematikan yang Tidak Boleh Anda Jalankan di Linux

  1. 12 Perintah Lucu Linux yang Bisa Membuat Anda Tertawa

  2. Cara SSH ke Wadah Docker dan Jalankan Perintah

  3. Instal Docker (Sistem Operasi Berbasis Debian)