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