De configuratie van draaiende Docker-containers wijzigen

0
175

Docker-containers worden gewoonlijk als onveranderlijk beschouwd zodra ze zijn gestart . U kunt echter enkele configuratieparameters dynamisch bijwerken, zoals de naam van de container en de limieten voor hardwarebronnen.

In deze handleiding laten we u zien hoe u ingebouwde Docker-opdrachten gebruikt. om geselecteerde parameters van actieve containers te wijzigen. We zullen ook kijken naar wat u niet moet veranderen en een tijdelijke oplossing die u kunt gebruiken als u denkt dat het moet.

De naam van een container wijzigen

De eenvoudigste wijziging is het hernoemen van een gemaakte container. Namen worden toegewezen via de –name vlag voor docker run. Als er geen naam wordt opgegeven, wijst de Docker-daemon een willekeurige naam toe. U kunt namen gebruiken om naar containers te verwijzen in Docker CLI-opdrachten; het kiezen van een geschikte gedenkwaardige vermijdt het uitvoeren van docker ps om de automatisch toegewezen naam of ID van een container te vinden.

De opdracht docker hernoemen wordt gebruikt om containernamen te wijzigen na het maken. Er zijn twee argumenten nodig, de ID van de doelcontainer of de huidige naam, en de nieuwe naam om toe te wijzen:

# docker hernoem <doel-ID of naam> <nieuwe naam> docker hernoem oude_naam nieuwe_naam

Het herstartbeleid wijzigen

Herstartbeleid bepaalt of containers automatisch moeten starten nadat uw host opnieuw is opgestart of de Docker-daemon wordt gestart. Met de vier beschikbare beleidsregels kun je de container forceren om te starten, te laten stoppen of voorwaardelijk te starten op basis van de vorige afsluitcode of actieve status van de container.

Advertentie

Docker ondersteunt het on-the-fly wijzigen van het herstartbeleid. Dit is handig als u van plan bent uw host of de Docker-daemon opnieuw op te starten en u wilt dat een bepaalde container gestopt blijft – of start automatisch – na de specifieke gebeurtenis.

docker update –restart tenzij-stopped demo_container

Het bovenstaande voorbeeld verandert het herstartbeleid van demo_container in tenzij-stopped. Dit beleid zorgt ervoor dat de container met de daemon start, tenzij deze handmatig is gestopt voordat de daemon voor het laatst werd afgesloten.

Hardwareresourcelimieten wijzigen

De opdracht docker update kan ook worden gebruikt om de resourcelimieten voor containers te wijzigen. U moet een of meer container-ID's of namen doorgeven, samen met een lijst met vlaggen die de limieten definiëren die op die containers moeten worden ingesteld.

Vlaggen zijn beschikbaar voor alle resourcelimieten die worden ondersteund door docker-run. Hier is een beknopte lijst van de opties die u kunt gebruiken:

  • –blkio-weight – Wijzig het relatieve gewicht van Block IO van de container.
  • –cpus – Stel het aantal CPU's in dat beschikbaar is voor de container.
  • –cpu-shares– Stel het relatieve gewicht van het CPU-aandeel in.
  • –memory – Wijzig de geheugenlimiet van de container (bijv. 1024M).
  • –memory-swap – Configureer de hoeveelheid geheugen die de container naar schijf kan wisselen; gebruik een grootte zoals 1024M om een ​​specifieke limiet in te stellen, of -1 voor onbeperkt wisselen.
  • –kernel-memory – Wijzig de kernelgeheugenlimiet van de container. Containers die geen kernelgeheugen meer hebben, kunnen een negatieve invloed hebben op andere workloads op de hostmachine.
  • –pids-limit – Configureer het maximale aantal proces-ID's dat in de container is toegestaan, waardoor het aantal processen dat kan worden gestart wordt beperkt.

Hier is een voorbeeld van het gebruik van docker-update om de geheugenlimiet te wijzigen en CPU-telling voor twee van uw containers:

docker-update –cpus 4 –memory 1024M first_container second_container

Alle beschikbare vlaggen behalve –kernel-memory kunnen worden gebruikt met draaiende Linux-containers. Om de kernelgeheugenlimiet te wijzigen, moet u eerst de container stoppen met docker stop.

Advertentie

Pas op dat geen van deze vlaggen momenteel wordt ondersteund voor op Windows gebaseerde containers. Ze zullen echter werken met Linux-containers die op een Windows-hostmachine draaien.

Wanneer deze commando's niet gebruiken?

De commando's docker update en docker hernoemen moeten worden gebruikt met containers die u handmatig hebt gemaakt via docker run. Wees op uw hoede om ze te gebruiken met containers die afkomstig zijn van andere tools zoals docker-compose.

Als u de naam van een container wijzigt, kan deze niet worden gedetecteerd door de brontool, waardoor andere componenten van uw stapel mogelijk kapot gaan. Bovendien, als u declaratief resourcelimieten definieert in een docker-compose.yml-bestand, zal het opnieuw uitvoeren van de opdracht docker-compose up die oorspronkelijke limieten opnieuw toepassen op uw container.

Daarom moet u bij uw bestaande containerbeheeroplossing blijven als u er een gebruikt. Voor Compose betekent dat het wijzigen van containernamen en resourcelimieten in het bestand docker-compose.yml en vervolgens het uitvoeren van docker-compose up -d om de wijziging automatisch toe te passen. Dit zorgt ervoor dat u niet onbedoeld verweesde containers of onbedoelde bijwerkingen veroorzaakt.

Hoe zit het met andere eigenschappen (Image/Ports/Volumes)?

Hardwarelimieten, resourcebeleid en containernamen zijn de enige configuratieparameters die u met de Docker CLI kunt wijzigen. U kunt de afbeelding van een draaiende container niet wijzigen; je kunt ook niet gemakkelijk andere opties wijzigen, zoals poortbindingen en volumes.

Je moet een andere container maken als deze waarden verouderd raken. Vernietig je huidige instantie en gebruik docker run om een ​​vervanging te starten met je nieuwe afbeelding en gecorrigeerde instellingen.

Advertentie

Aangezien containers staatloos en kortstondig zijn bedoeld, moet u ze op elk moment kunnen vervangen. Gebruik volumes om persistente containergegevens op te slaan; met dit mechanisme kunt u stateful-bestanden opnieuw aan de nieuwe container koppelen door de -v-vlaggen te herhalen die zijn doorgegeven aan de oorspronkelijke opdracht docker run:

docker run -v config-volume:/usr/lib/config –name demo example-image :v1 docker rm demo # Bestaande gegevens in /usr/lib/config behouden docker run -v config-volume:/usr/lib/config –name demo2 example-image:v2

Gevarenzone: Andere containereigenschappen wijzigen

Hoewel u ernaar moet streven containers waar mogelijk te vervangen, is het mogelijk om de eigenschappen van bestaande te wijzigen door de configuratiebestanden van Docker rechtstreeks te bewerken. Wees voorzichtig bij het gebruik van deze methode: het wordt volledig niet ondersteund en een misplaatste wijziging kan uw container breken.

Hoewel deze optie een manier biedt om willekeurig bestaande containers te bewerken, zal het niet werken terwijl ze rennen. Gebruik de opdracht docker stop my-container om de container die u wilt bewerken te stoppen en ga vervolgens door met het doorvoeren van uw wijzigingen.

Containerconfiguratiebestanden hebben het volgende pad op uw host:

/var/lib/docker/containers/<container id>/config.v2.json

U moet de volledige ID van de container weten , niet de ingekorte versie getoond door docker ps. U kunt de opdracht docker inspect gebruiken om dit te krijgen:

docker inspect <short id or name> | jq | grep-ID

Als u eenmaal bij de config.v2.json van een container bent, kunt u deze openen in een teksteditor om de nodige wijzigingen aan te brengen. De JSON slaat de containerconfiguratie op die is gemaakt toen u docker-run uitvoerde. U kunt de inhoud wijzigen om eigenschappen zoals poortbindingen, omgevingsvariabelen, volumes en het containeringangspunt en -commando te wijzigen.

Advertentie

Als u een poortbinding wilt toevoegen, zoekt u de PortBindings-sleutel in het bestand, voeg vervolgens een nieuw item in het object in:

{ “PortBindings”: { “80/tcp”: { “HostIp”: “”, “HostPort”: “8080” } } }

Hier is poort 80 in de container gebonden aan poort 8080 op de host. Het is even eenvoudig om omgevingsvariabelen toe te voegen – zoek de Env-sleutel en voeg vervolgens nieuwe items in de array in:

{ “Env”: [ “FOO=bar”, “CUSTOM_VARIABLE=example” ] }

Als u klaar bent met bewerken, start u de Docker-service en uw container:

sudo-service docker restart docker start my-container

De container wordt nu uitgevoerd met de bijgewerkte configuratie.

Conclusie

< p>Docker-containers zijn bedoeld als kortstondige eenheden die u vervangt wanneer hun configuratie verouderd raakt. Ondanks deze intentie zijn er scenario's waarin het nodig is om een ​​bestaande container aan te passen. Docker behandelt de meest voorkomende gebruiksscenario's – naamswijzigingen en realtime aanpassingen aan resourcelimieten – via ingebouwde CLI-commando's zoals docker-update.

Als je een andere eigenschap wilt wijzigen, probeer dan altijd eerst de container te vervangen. Dit minimaliseert het risico dat dingen kapot gaan en is in overeenstemming met het model van onveranderlijkheid van Docker. Als je in een situatie terechtkomt waarin een bestaande container moet worden bewerkt, kun je de interne configuratiebestanden van Docker handmatig wijzigen zoals hierboven beschreven.

Onthoud ten slotte dat containers die worden beheerd door andere ecosysteemtools zoals Docker Compose moet worden aangepast met behulp van die mechanismen. Anders zou u kunnen ontdekken dat containers onverwacht verweesd of overschreven zijn als de tool niet op de hoogte is van de wijzigingen die u heeft aangebracht.