Hur (och varför) lägga till hälsokontroller i dina Docker-behållare

0
165

Du har byggt din Docker-avbild, tryckit den till ditt register och startade en ny container i produktion. Allt fungerar när du åker hem för dagen men du möts av avbrottsrapporter när du kommer tillbaka nästa morgon. Din container är fortfarande igång men den serverar inte förfrågningar.

Det här scenariot kan vara obehagligt bekant för driftsteam som arbetar med Docker. Så här använder du Dockers hälsokontrollfunktion för att få exakta uppgifter om tillgängligheten för dina tjänster.

Hur hälsokontroller fungerar

Hälsokontroller gör att en behållare kan exponera sin arbetsbelastning. Detta skiljer sig från om behållaren är igång. Om din databas går ner kommer din API-server inte att kunna hantera förfrågningar, även om dess Docker-behållare fortfarande är igång.

Detta ger ohjälpsamma upplevelser under felsökning. En enkel docker ps skulle rapportera behållaren som tillgänglig. Genom att lägga till en hälsokontroll utökas dockarens ps-utgång till att inkludera behållarens sanna tillstånd.

Du konfigurerar containerhälsokontroller i din Dockerfile. Detta accepterar ett kommando som Docker-demonen kommer att utföra var 30: e sekund. Docker använder kommandos utgångskod för att bestämma behållarens hälsosamhet:

  • 0 & # 8211; Behållaren är frisk och fungerar normalt.
  • 1 & # 8211; Behållaren är ohälsosam; arbetsbelastningen kanske inte fungerar.
  • 2 & # 8211; Denna statuskod är reserverad av Docker och ska inte användas.

Annons

När HEALTHCHECK finns i en Dockerfil ser du behållarens hälsosamhet i STATUS-kolumnen när du kör docker ps.

Hälsa kontrolleras inte direkt när behållare skapas. Statusen visas som start innan den första kontrollen körs. Detta ger behållaren tid att utföra alla startuppgifter. En behållare med en godkänd hälsokontroll visas som frisk; en ohälsosam behållare visar ohälsosam.

Skriva kommandon för hälsokontroll

Containerhälsokontroller konfigureras med HEALTHCHECK-instruktionen i din Dockerfile. Du bör använda ett hälsokontrollkommando som är lämpligt för din container. För webbservrar ger curl dig ett enkelt sätt att utföra en grundläggande beredskapskontroll. Pinga en känd slutpunkt som ska vara tillgänglig när din tjänst är uppe.

FRÅN nginx: senaste HÄLSOCHECK CMD-curl –fail http: //localhost/api/healthcheck || avsluta 1

Det här exemplet skulle markera behållaren som ohälsosam om din server/api/healthcheck-slutpunkt utfärdade en felstatus.

Du kan använda dockerinspektion för att se utdata från hälsokontrollkommandon. Det här är användbart när du felsöker din HEALTHCHECK-instruktion.

dockerinspektion –format = '{{json .State.Health}}' min behållare

Byt ut min behållare med ID eller namn av behållaren du vill inspektera. Dessa detaljer visas i docker ps-utdata.

Anpassa hälsokontroller

Annons

Med Docker kan du anpassa frekvensen för hälsokontroller. Du kan också ändra kriterierna som markerar en container som ohälsosam.

Det finns fyra alternativ tillgängliga:

  • –intervall & # 8211; Ställ in tiden mellan hälsokontroller. Detta låter dig åsidosätta standardvärdet på 30 sekunder. Använd ett högre intervall för att öka tiden mellan kontrollerna. Detta hjälper om du har en tjänst med låg prioritet där regelbundna hälsokontroller kan påverka prestandan. Använd en mer regelbunden frekvens för kritiska tjänster.
  • –startperiod & # 8211; Ställ in varaktigheten efter att en behållare startar när hälsokontroller ska ignoreras. Kommandot körs fortfarande men en ohälsosam status räknas inte. Detta ger behållare tid att slutföra startprocedurer.
  • –retries & # 8211; Detta låter dig kräva flera på varandra följande fel innan en container markeras som ohälsosam. Det är som standard 3. Om en hälsokontroll misslyckas men den efterföljande går igenom kommer behållaren inte att övergå till ohälsosam. Det blir ohälsosamt efter tre misslyckade kontroller i rad.
  • – timeout & # 8211; Ställ in timeout för hälsokontrollkommandon. Docker behandlar kontrollen som misslyckad om kommandot inte avslutas inom denna tidsram.

Alternativ skickas som flaggor till HEALTHCHECK-instruktionen. Ange dem före hälsokontrollkommandot:

HEALTHCHECK –interval = 60s –retries = 5 CMD curl –fail http: //localhost || avsluta 1

Den här konfigurationen instruerar Docker att köra curl var 60: e sekund. Behållaren kommer att markeras som ohälsosam om fem på varandra följande tester har en utgångskod som inte är noll.

Command Format

Syntaxen för kommandot HEALTHCHECK stöder antingen en vanlig CMD eller en exec-array med ingångspunkter. Du kan också skicka INGEN istället för CMD för att inaktivera hälsokontroller:

HEALTHCHECK NONE

Detta låter dig hämma din basbilds hälsokontroller. Varje HEALTHCHECK-uttalande åsidosätter tidigare instruktioner i dina bildlager.

Vad sägs om Docker Compose?

Docker Compose stöder också definitioner för hälsokontroll. Lägg till ett hälsokontrollavsnitt i din tjänst:

version: & quot; 3 & quot; tjänster: app: bild: nginx: senaste portar: – 80:80 hälsokontroll: test: curl –fail http: //localhost || exit 1 intervall: 10s försöker igen: 5 start_period: 5s timeout: 10s Annonsering

Testnyckeln definierar kommandot som ska köras. De andra tangenterna kopplas till de parametrar som accepteras av Dockerfile HEALTHCHECK-instruktionen.

Sammanfattning

Att ställa in en HEALTHCHECK-instruktion gör det enklare att diagnostisera en behållare som inte fungerar bra. Du kan spåra beredskapen för din arbetsbelastning oberoende av behållarens & # 8220; körning & # 8221; tillstånd.

Hälsokontroller är kompatibla med alla kommandon som utfärdar en utgångskod 0 eller 1. Du kan använda vanliga kommandon som curl och ping för att inspektera webbtjänster och databaser. För mer avancerad kontroll, skriv ett dedikerat manus och inkludera det i dina bilder.