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

Panduan Pemula untuk Kebijakan Restart Docker

Docker menyediakan opsi kebijakan mulai ulang untuk memungkinkan penampung Anda memulai ulang secara otomatis jika terjadi peristiwa atau kegagalan tertentu.

Ini sangat membantu dalam skenario di mana Anda harus memulai ulang host Docker (server Linux Anda) atau jika layanan yang berjalan di wadah gagal.

Kebijakan restart Docker diterapkan pada basis per-kontainer. Ada dua cara untuk menetapkan kebijakan mulai ulang ke penampung. Anda dapat mengaturnya di file YAML jika Anda akan menggunakan Docker Compose atau Swarm atau Kubernetes.

Anda juga dapat menyetel kebijakan mulai ulang secara langsung di baris perintah saat menjalankan penampung:

docker container run --restart <policy>

Mari kita bicara tentang jenis kebijakan mulai ulang yang dapat Anda gunakan.

Kebijakan restart Docker

Ada kebijakan restart berikut untuk kontainer Docker:

  • tidak:Perilaku default adalah tidak memulai container secara otomatis
  • selalu:Selalu mulai ulang penampung yang dihentikan kecuali jika penampung dihentikan secara eksplisit
  • kecuali-dihentikan:Mulai ulang wadah kecuali jika wadah dalam keadaan berhenti sebelum daemon Docker dihentikan (dijelaskan nanti)
  • saat gagal:Mulai ulang penampung jika keluar dengan kode keluar bukan nol atau jika daemon buruh pelabuhan dimulai ulang

Seperti yang saya sebutkan, jika Anda tidak secara eksplisit menambahkan kebijakan mulai ulang, itu berjalan dengan "tidak", yang berarti wadah tidak akan dimulai ulang secara otomatis.

Menjelaskan kebijakan restart Docker dengan contoh

Biarkan saya menunjukkan kebijakan ini dalam tindakan sehingga Anda benar-benar dapat memvisualisasikannya. Ini sangat berguna untuk memahami perbedaan antara  always dan unless-stopped kebijakan.

Selalu mulai ulang kebijakan

Mari kita mulai dengan always memulai kembali kebijakan. Dengan set kebijakan ini, penampung akan selalu dimulai ulang kecuali dihentikan secara eksplisit.

Saya akan menjalankan wadah Alpine Linux dengan always memulai kembali kebijakan. Saya menamakannya selalu-kebijakan.

Wadah memiliki satu tugas. Ini menjalankan perintah bash sleep selama 10 detik dan kemudian keluar.

docker container run --name always-policy --restart always alpine sleep 10

Tanpa always restart kebijakan, wadah akan berhenti setelah 10 detik. Tapi di sini, itu akan restart secara otomatis dan menjalankan perintah sleep selama 10 detik dan terus seperti ini.

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS         PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   25 seconds ago   Up 4 seconds             always-policy

Anda dapat melihat pada perintah di atas bahwa meskipun container telah dibuat 25 detik yang lalu, container tersebut baru aktif selama 4 detik. Harap diingat bahwa penampung yang sama dimulai ulang, penampung baru tidak dibuat.

Anda dapat menggunakan perintah inspeksi buruh pelabuhan untuk melihat berapa kali wadah telah dimulai ulang sejauh ini.

[email protected]:~$ docker inspect always-policy | grep -i restartcount
        "RestartCount": 4,

Jika Anda menghentikan wadah dengan perintah stop, itu tidak akan restart secara otomatis setelahnya. Anda mungkin melihat pada contoh di bawah ini bahwa penampung sekarang memiliki status 'Keluar', bukan Naik.

[email protected]:~$ docker stop always-policy 
always-policy
[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS                     PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   58 seconds ago   Exited (0) 6 seconds ago             always-policy

Saya telah menggunakan -it opsi untuk menjalankan wadah dengan terminal interaktif di tangkapan layar di atas. Itu di luar kebiasaan dan tidak perlu di sini.

kecuali-stopped vs always restart policy

unless-stopped mirip dengan always memulai kembali kebijakan. Keduanya memulai ulang penampung secara otomatis dan jika Anda menghentikan penampung secara eksplisit, penampung tidak memulai ulang.

Tetapi perbedaan utama antara keduanya adalah jika Anda menghentikan kontainer dengan perintah docker stop dan kemudian me-restart daemon buruh pelabuhan, wadah dengan always kebijakan restart akan memulai penampung secara otomatis tetapi penampung dengan unless-stopped kebijakan tidak akan dimulai ulang.

Mari saya tunjukkan dengan contoh. Saya sudah memiliki wadah yang dihentikan dengan kebijakan selalu mulai ulang. Izinkan saya membuat penampung baru bernama kecuali-kebijakan-dihentikan dengan unless-stopped kebijakan.

docker container run --name unless-stopped-policy --restart always alpine sleep 10

Hentikan wadah:

docker stop unless-stopped-policy

Sekarang saya memiliki dua kontainer yang secara eksplisit dihentikan:

[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS                          PORTS     NAMES
d244b6e08899   alpine    "sleep 10"   2 minutes ago    Exited (0) About a minute ago             unless-stopped-policy
1171dcfb7e06   alpine    "sleep 10"   22 minutes ago   Exited (0) 21 minutes ago                 always-policy

Mulai ulang daemon Docker:

sudo systemctl restart docker

Sekarang jika Anda memeriksa container yang sedang berjalan, Anda dapat melihat bahwa container bernama always-policy sedang berjalan karena disetel dengan always mulai ulang kebijakan.

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS         PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   30 minutes ago   Up 8 seconds             always-policy

Seluruh langkah dapat dilihat di tangkapan layar ini:

kebijakan mulai ulang saat gagal

on-failure kebijakan restart memulai ulang wadah jika keluar dengan kode keluar bukan nol (menunjukkan kesalahan/kegagalan). Itu juga memulai ulang wadah jika daemon buruh pelabuhan dimulai ulang termasuk yang sebelumnya dalam keadaan berhenti.

Jika Anda menghentikan container secara manual dengan perintah docker stop, container tersebut ada dengan kode nol yang menunjukkan bahwa semuanya normal.

Menyetel kebijakan mulai ulang di file Tulis Docker

Sekarang, Anda memiliki ide yang cukup bagus tentang menjalankan penampung dengan kebijakan mulai ulang.

Jika Anda menggunakan sesuatu seperti Docker Compose untuk men-deploy container, Anda dapat menyebutkan kebijakan restart untuk objek layanan dalam file YAML.

Berikut ini contoh contoh:

version: "3.3"      
services:
    NginxProxy:
        image: "jwilder/nginx-proxy:latest"
        restart: "on-failure"
        networks: ["net"]
        ports:
            - "80:80"
            - "443:443"

Kebijakan restart Docker mana yang akan digunakan?

Sejujurnya, tidak ada jawaban langsung untuk pertanyaan ini. Itu tergantung pada kasus penggunaan Anda dan apa yang Anda inginkan.

Saya harap artikel ini bermanfaat untuk memahami kebijakan restart Docker. Jika Anda memiliki pertanyaan atau saran, beri tahu saya di bagian komentar.


Docker
  1. Cara Menjalankan Nginx dalam Wadah Docker:Panduan Langkah demi Langkah

  2. Cara Menjalankan MySQL Dalam Wadah Docker

  3. Cara SSH Ke Wadah Docker

  1. Apa itu Docker Container:Panduan Pengantar untuk Pemula

  2. Cara Menjalankan MySQL di Docker Container:Panduan Sederhana dan Mudah Diikuti

  3. Cara Mendaftar Kontainer Docker

  1. Beberapa Perintah DOCKER

  2. Pengantar Docker

  3. Cara Menetapkan IP Statis ke Wadah Docker