Dalam artikel ini, saya akan menunjukkan kepada Anda cara menghentikan wadah Docker tertentu. Saya juga akan menunjukkan cara menghentikan semua container Docker yang sedang berjalan, atau semua container Docker yang menjalankan image Docker tertentu menggunakan Ansible. Jadi, mari kita mulai.
Prasyarat:
Jika Anda ingin mencoba contoh artikel ini,
1) Anda harus menginstal Ansible di komputer Anda.
2) Anda harus menginstal Docker di komputer Anda atau host Ubuntu jarak jauh.
3) Anda harus menginstal pustaka Python Docker di host Docker Anda.
4) Anda harus mengonfigurasi host Docker untuk otomatisasi yang memungkinkan.
CATATAN: Tuan rumah buruh pelabuhan adalah komputer tempat Anda menginstal Docker.
Ada banyak artikel di LinuxHint yang didedikasikan untuk Menginstal Ansible dan mengonfigurasi host untuk otomatisasi Ansible dan menginstal Docker. Anda dapat memeriksanya jika diperlukan.
Membuat Direktori Proyek:
Untuk menjaga semua file dan direktori yang akan kita buat dalam artikel ini terorganisir, ada baiknya untuk membuat direktori proyek project.
Untuk membuat direktori proyek buruh pelabuhan1/ di direktori kerja Anda saat ini, jalankan perintah berikut:
$ mkdir -pv docker1/playbooks
Sekarang, navigasikan ke buruh pelabuhan1/ direktori proyek sebagai berikut:
$ cd buruh pelabuhan1/
Mengonfigurasi Kemungkinan untuk Otomatisasi Host Docker Jarak Jauh:
Jika Anda telah menginstal Docker pada host Ubuntu jarak jauh yang ingin Anda otomatisasi menggunakan Ansible, maka bagian ini cocok untuk Anda.
Pertama, buat file inventaris Ansible tuan rumah dengan perintah berikut:
$ nano host
Sekarang, tambahkan alamat IP atau nama DNS dari host Docker Anda di tuan rumah' file inventaris sebagai berikut:.
[buruh pelabuhan]vm4.simpul.com
Dalam kasus saya, nama DNS dari Host Docker Ubuntu saya adalah vm4.simpul.com. Ini akan berbeda untukmu. Jadi, pastikan untuk menggantinya seperlunya.
Setelah selesai, tekan
Sekarang, buat file konfigurasi Ansible mungkin.cfg sebagai berikut:
$ nano mungkin.cfg
Sekarang, ketik baris berikut di mungkin.cfg file konfigurasi.
[buruh pelabuhan]vm4.simpul.com
Setelah selesai, tekan
Sekarang, periksa apakah Anda dapat melakukan ping ke host Docker jarak jauh dari komputer Anda dengan perintah berikut:
$ mungkin semua -u mungkin -m ping
Seperti yang Anda lihat, saya dapat melakukan ping ke host Docker jarak jauh saya.
Seperti yang Anda lihat, saya memiliki Docker 19.03.11 diinstal pada Host Docker Ubuntu jarak jauh saya.
Sekarang, Anda harus menginstal pustaka Python Docker di Host Docker jarak jauh Anda agar modul buruh pelabuhan yang memungkinkan berfungsi. Pada artikel ini, saya menggunakan Ubuntu. Jadi, inilah yang akan saya bahas.
Untuk menginstal pustaka Python Docker di host Docker jarak jauh Anda (Ubuntu), buat buku pedoman Ansible baru install_docker_python_lib.yaml dalam buku pedoman/ direktori sebagai berikut:
$ nano buku pedoman/install_docker_python_lib.yaml
Sekarang, ketik baris berikut di install_docker_python_lib.yaml mengajukan.
- tuan rumah: buruh pelabuhanpengguna: mungkin
menjadi: Benar
tugas:
- nama: Pastikan paket python3-docker diinstal
tepat:
nama: python3-docker
negara: sekarang
update_cache: Benar
Setelah selesai, tekan
Sekarang, jalankan install_docker_python_lib.yaml buku pedoman sebagai berikut:
$ buku pedoman playbook yang memungkinkan/install_docker_python_lib.yaml
Playbook harus berjalan dengan sukses dan itu akan menginstal pustaka Python Docker di host Docker jarak jauh Anda.
Mengonfigurasi Kemungkinan untuk Otomatisasi Host Docker Lokal:
Jika Anda menginstal Docker di host tempat Anda menginstal Ansible dan Anda ingin mengotomatiskannya menggunakan Ansible, maka bagian ini cocok untuk Anda.
Pertama, buat buku pedoman Ansible baru install_docker_python_lib.yaml dalam buku pedoman/ direktori sebagai berikut:
$ nano buku pedoman/install_docker_python_lib.yaml
Sekarang, ketik baris berikut di install_docker_python_lib.yaml mengajukan.
- host: localhostkoneksi: lokal
pengguna: shovon
menjadi: Benar
tugas:
- nama: Pastikan paket python3-docker diinstal
tepat:
nama: python3-docker
negara: sekarang
update_cache: Benar
Di sini, garis pengguna: shovon set shovon sebagai pengguna yang akan menjalankan tugas. Ini akan berbeda untukmu. Jadi, pastikan untuk mengubahnya menjadi nama pengguna login Anda.
Anda dapat menemukan nama pengguna masuk dari host Docker Anda dengan perintah berikut:
$ whoami
Setelah selesai, tekan
Sekarang, jalankan install_docker_python_lib.yaml buku pedoman sebagai berikut:
$ ansible-playbook --ask-pass --ask-become-passplaybook/install_docker_python_lib.yaml
Ansible akan menanyakan kata sandi login pengguna yang telah Anda tentukan di buku pedoman. Ketik kata sandi masuk dan tekan
Ansible akan menanyakan kata sandi MENJADI/Sudo juga. Kata sandi harus sama dengan kata sandi login Anda. Jadi, biarkan kosong dan tekan
Buku pedoman harus mulai berjalan. Mungkin perlu beberapa saat untuk menyelesaikannya.
Pada titik ini, buku pedoman harus berhasil dan pustaka Python Docker harus diinstal.
Membuat Penyesuaian yang Diperlukan untuk Playbook:
Bergantung pada apakah Anda mengelola wadah Docker di Host Docker lokal Anda atau Host Docker jarak jauh, Anda perlu menyesuaikan buku pedoman Anda.
Dari bagian selanjutnya dari artikel ini, saya akan menjalankan contoh buku pedoman pada host Docker jarak jauh. Jadi, semua buku pedoman akan dimulai dengan baris berikut:
- tuan rumah: buruh pelabuhanpengguna: mungkin
tugas:
Jika Anda ingin menjalankan playbook di host Docker lokal Anda, pastikan playbook dimulai dengan baris berikut.
- host: localhostkoneksi: lokal
pengguna: shovon
menjadi: Benar
tugas:
Kemudian, ganti
Anda juga harus menjalankan buku pedoman Ansible sedikit berbeda jika Anda akan mengelola host Docker secara lokal menggunakan Ansible.
Anda dapat menjalankan playbook Ansible secara lokal sebagai berikut:
$ ansible-playbook --ask-pass --ask-become-pass
Pastikan untuk berubah
Menghentikan Kontainer Docker:
Jika Anda memiliki wadah Docker yang sedang berjalan dan Anda mengetahui ID atau nama wadah Docker, Anda dapat dengan mudah menghentikan wadah Docker itu menggunakan Ansible.
Di bagian ini, saya akan menunjukkan cara melakukannya.
Pertama, saya akan membuat Nginx (nama gambar) Wadah buruh pelabuhan http_server1 (nama wadah) sebagai berikut:
$ docker run -p 8080:80 -d --name http_server1 nginx
Seperti yang Anda lihat, wadah Docker http_server1 sedang berlari.
$ buruh pelabuhan
Untuk menghentikan wadah Docker http_server1 menggunakan Ansible, buat buku pedoman baru stop_container.yaml dalam buku pedoman/ direktori sebagai berikut:
$ nano buku pedoman/stop_container.yaml
Kemudian, ketik baris berikut di stop_container.yaml buku pedoman.
- tuan rumah: buruh pelabuhanpengguna: mungkin
tugas:
- nama: Hentikan wadah http_server1
docker_container:
nama: http_server1
status: berhenti
Setelah selesai, tekan
Di sini, Ansible docker_container modul digunakan untuk menghentikan wadah Docker http_server1.
Sekarang, jalankan stop_container.yaml playbook dengan perintah berikut:
$ buku pedoman playbook yang memungkinkan/stop_container.yaml
Seperti yang Anda lihat, wadah Docker http_server1 tidak berjalan lagi di Host Docker jarak jauh saya.
$ buruh pelabuhan
Anda dapat membuat daftar semua wadah Docker (berjalan, dijeda, dihentikan) dengan perintah berikut:
$ buruh pelabuhan ps --semuaSeperti yang Anda lihat, wadah Docker yang berhenti http_server1 terdaftar.
Menghentikan Semua Kontainer Docker yang Berjalan:
Jika Anda ingin menghentikan semua wadah Docker yang berjalan di host Docker Anda menggunakan Ansible, maka bagian ini untuk Anda.
Pertama, saya akan membuat 3 wadah Docker (server1, server2, dan server3) sehingga saya bisa menghentikan mereka semua menggunakan Ansible nanti.
Untuk membuat server1 Wadah Docker, jalankan perintah berikut:
$ docker run -p 8081:80 -d --name server1 nginx
Untuk membuat server2 wadah Docker, jalankan perintah berikut:
$ docker run -p 8082:80 -d --name server2 nginx
Untuk membuat server3 wadah Docker, jalankan perintah berikut:
$ docker run -p 8083:80 -d --name server3 nginx
Seperti yang Anda lihat, server1, server2, dan server3 Kontainer Docker berjalan di host Docker jarak jauh saya.
$ buruh pelabuhan
Untuk menghentikan semua wadah Docker itu, buat buku pedoman baru stop_all_container.yaml di kamu buku pedoman/ direktori sebagai berikut:
$ nano buku pedoman/stop_all_container.yaml
Sekarang, ketik baris berikut di stop_all_container.yaml file buku pedoman.
- tuan rumah: buruh pelabuhanpengguna: mungkin
tugas:
- name: Dapatkan daftar semua container yang sedang berjalan
docker_host_info:
wadah: Benar
daftar: docker_info
- nama: Hentikan semua kontainer yang sedang berjalan
docker_container:
nama: ' item.Nama[0] | regex_replace("^/", "") '
status: berhenti
loop: ' docker_info.wadah '
Untuk menyimpan stop_all_container.yaml file, tekan
Di sini, saya telah menetapkan 2 tugas.
Tugas pertama menggunakan Ansible docker_host_info modul untuk mendapatkan daftar semua wadah Docker yang berjalan dan menyimpannya di docker_info variabel.
Tugas kedua berputar melalui docker_info.wadah array menemukan nama container Docker yang sedang berjalan dan menghentikannya satu per satu.
Sekarang, jalankan stop_all_container.yaml playbook dengan perintah berikut:
$ buku pedoman playbook yang memungkinkan/stop_all_container.yaml
Playbook harus berjalan dengan sukses seperti yang Anda lihat pada tangkapan layar di bawah ini.
Seperti yang Anda lihat, tidak ada wadah Docker yang berjalan di host Docker jarak jauh saya.
$ buruh pelabuhan
Anda dapat membuat daftar semua wadah Docker (berjalan, dijeda, dihentikan) dengan perintah berikut:
$ buruh pelabuhan ps --semuaSeperti yang Anda lihat, wadah Docker yang berhenti server1, server2, dan server3 terdaftar.
Hentikan Semua Kontainer Docker Menjalankan Gambar Tertentu:
Jika Anda ingin menghentikan semua container Docker yang menjalankan image Docker tertentu, maka bagian ini cocok untuk Anda.
Pertama, mari kita buat beberapa wadah Docker dummy.
Saya akan membuat 2 wadah Docker (nginx1 dan nginx2) menggunakan Nginx Gambar Docker dan 2 wadah Docker (http1 dan http2) menggunakan httpd Gambar buruh pelabuhan untuk demonstrasi.
Untuk membuat nginx1 Wadah buruh pelabuhan menggunakan using Nginx gambar Docker, jalankan perintah berikut:
$ docker run -d -p 8081:80 --nama nginx1 nginx
Untuk membuat nginx2 Wadah buruh pelabuhan menggunakan using Nginx gambar Docker, jalankan perintah berikut:
$ docker run -d -p 8082:80 --nama nginx2 nginx
Untuk membuat http1 Wadah buruh pelabuhan menggunakan using httpd gambar Docker, jalankan perintah berikut:
$ docker run -d -p 8091:80 --name http1 httpd
Untuk membuat http2 Wadah buruh pelabuhan menggunakan using httpd gambar Docker, jalankan perintah berikut:
$ docker run -d -p 8092:80 --name http2 httpd
Seperti yang Anda lihat, nginx1, nginx2, http1, dan http2 Kontainer Docker berjalan di host Docker jarak jauh saya.
Untuk menghentikan semua container Docker yang menjalankan image Docker tertentu (misalkan, nginx), buat buku pedoman Docker baru stop_all_image_containers.yaml dalam buku pedoman/ direktori sebagai berikut:
$ nano buku pedoman/stop_all_image_containers.yaml
Sekarang, ketik baris berikut di stop_all_image_containers.yaml mengajukan.
- tuan rumah: buruh pelabuhanpengguna: mungkin
tugas:
- name: Dapatkan daftar semua container yang sedang berjalan
docker_host_info:
wadah: Benar
daftar: docker_info
- nama: Hentikan semua wadah yang menjalankan gambar nginx
docker_container:
nama: ' item.Nama[0] | regex_replace("^/", "") '
status: berhenti
kapan: barang.Gambar == 'nginx'
loop: ' docker_info.wadah '
Setelah selesai, tekan
Di sini, saya telah menambahkan 2 tugas.
Tugas pertama menggunakan Ansible docker_host_info modul untuk mendapatkan daftar semua wadah Docker yang berjalan dan menyimpannya di docker_info variabel.
Tugas kedua berputar melalui docker_info.wadah array menemukan nama container Docker yang sedang berjalan dan menjalankannya docker_container modul untuk setiap wadah yang berjalan hanya jika nama gambar wadah adalah Nginx. Kemudian, itu menghentikan wadah Docker yang cocok.
Di tugas kedua, baris berikut digunakan untuk memeriksa apakah wadah Docker menjalankan Nginx gambar. Anda dapat mengubahnya ke nama gambar Docker yang berbeda jika Anda mau.
Sekarang, jalankan stop_all_image_containers.yaml buku pedoman sebagai berikut:
$ buku pedoman playbook yang memungkinkan/stop_all_image_containers.yaml
Seperti yang Anda lihat, hanya Nginx wadah (nginx1 dan nginx2) diubah (dihentikan). Itu httpd wadah (http1 dan http2) dilewati.
Seperti yang Anda lihat, tidak Nginx Kontainer Docker berjalan di host Docker jarak jauh saya. Hanya httpd Wadah buruh pelabuhan (http1 dan http2) sedang berlari.
$ buruh pelabuhan
Anda dapat membuat daftar semua wadah Docker (berjalan, dijeda, dihentikan) dengan perintah berikut:
$ buruh pelabuhan ps --semuaSeperti yang Anda lihat, wadah Docker yang berhenti nginx1 dan nginx2 terdaftar.
Kesimpulan:
Dalam artikel ini, saya telah menunjukkan kepada Anda cara menghentikan container Docker yang sedang berjalan, semua container Docker yang menjalankan image Docker tertentu, dan semua container Docker yang sedang berjalan dari host Docker Anda. Untuk melakukan itu, saya telah menggunakan Ansible docker_container dan docker_host_info modul dalam artikel ini.
Untuk mempelajari lebih lanjut tentang modul ini, kunjungi halaman dokumentasi resmi Ansible berikutsible.
[1] docker_container - Kelola wadah buruh pelabuhan
[2] docker_host_info - Mengambil fakta tentang host buruh pelabuhan dan daftar objek layanan