Android

Docker-opdracht uitvoeren met voorbeelden

Docker file рецепт для Docker images. Как рождается Docker контейнер c помощью Docker build.

Docker file рецепт для Docker images. Как рождается Docker контейнер c помощью Docker build.

Inhoudsopgave:

Anonim

Docker is een platform waarmee u toepassingen kunt ontwikkelen, testen en implementeren als draagbare, zelfvoorzienende containers die vrijwel overal kunnen worden uitgevoerd.

De opdracht docker run maakt een container van een bepaalde afbeelding en start de container met een gegeven opdracht. Het is een van de eerste opdrachten waarmee u vertrouwd moet raken wanneer u met Docker begint te werken., gebruiken we de officiële Nginx-afbeelding om verschillende manieren te tonen om een ​​Docker-container uit te voeren.

Docker Run-opdracht

De opdracht docker run heeft de volgende vorm:

docker run IMAGE

De naam van de afbeelding waaruit de container moet worden gemaakt, is het enige vereiste argument voor de opdracht docker run . Als de afbeelding niet aanwezig is op het lokale systeem, wordt deze uit het register gehaald.

Als er geen opdracht is opgegeven, wordt de opdracht die is opgegeven in de CMD- of ENTRYPOINT instructies van het ENTRYPOINT uitgevoerd tijdens het uitvoeren van de container.

Vanaf versie 1.13 is de Docker CLI geherstructureerd en zijn alle opdrachten gegroepeerd onder het object waarmee ze communiceren.

Omdat de opdracht run samenwerkt met containers, is het nu een subopdracht van de docker container . De syntaxis van de nieuwe opdracht is als volgt:

docker container run IMAGE

De oude syntaxis van vóór 1.13 wordt nog steeds ondersteund. Onder de motorkap is de opdracht docker run een alias voor de uitvoering van de docker container run . Gebruikers worden aangemoedigd om de nieuwe opdrachtsyntaxis te gebruiken.

Een lijst met alle docker container run van de docker container run vindt u op de documentatiepagina van de Docker.

Voer de container op de voorgrond uit

Wanneer er geen optie is opgegeven voor de opdracht docker run , wordt het rootproces standaard op de voorgrond gestart. Dit betekent dat de standaard invoer, uitvoer en fout van het rootproces zijn gekoppeld aan de terminalsessie.

docker container run nginx

De output van het nginx-proces wordt weergegeven op uw terminal. Aangezien er geen verbindingen met de webserver zijn, is de terminal leeg.

Om de container te stoppen, beëindigt u het lopende Nginx-proces door op CTRL+C drukken.

Voer de container uit in de modus Vrijstaand

Om de container actief te houden wanneer u de terminalsessie verlaat, start u deze in een ontkoppelde modus. Dit is vergelijkbaar met het uitvoeren van een Linux-proces op de achtergrond.

Gebruik de optie -d om een ​​vrijstaande container te starten:

docker container run -d nginx

050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa

De losgemaakte container stopt wanneer het rootproces wordt beëindigd.

U kunt de actieve containers weergeven met de opdracht docker container ls de docker container ls .

Gebruik de opdracht docker container attach de docker container attach uw terminal aan het root-proces van de losgemaakte docker container attach .

Verwijder de container na afsluiten

Wanneer de container wordt afgesloten, blijft het bestandssysteem standaard op het hostsysteem staan.

De opties --rm vertellen de opdracht --rm docker run om de container te verwijderen wanneer deze automatisch wordt afgesloten:

docker container run --rm nginx

De Nginx-afbeelding is misschien niet het beste voorbeeld om het bestandssysteem van de container op te schonen nadat de container is afgesloten. Deze optie wordt meestal gebruikt op voorgrondcontainers die taken op korte termijn uitvoeren, zoals tests of databaseback-ups.

Stel de containernaam in

In Docker wordt elke container geïdentificeerd door zijn UUID en naam. Standaard, indien niet expliciet ingesteld, wordt de naam van de container automatisch gegenereerd door de Docker-daemon.

Gebruik de optie --name om een ​​aangepaste naam toe te wijzen aan de container:

docker container run -d --name my_nginx nginx

De containernaam moet uniek zijn. Als u probeert een andere container met dezelfde naam te starten, krijgt u een soortgelijke foutmelding:

docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "9…c". You have to remove (or rename) that container to be able to reuse that name.

Voer docker container ls -a om alle containers weer te geven en hun namen te zien:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9d695c1f5ef4 nginx "nginx -g 'daemon of…" 36 seconds ago Up 35 seconds 80/tcp my_nginx

De betekenisvolle namen zijn handig om te verwijzen naar de container in een Docker-netwerk of bij het uitvoeren van CLI-opdrachten van Docker.

Containerpoorten publiceren

Als er geen poorten worden gepubliceerd, is het proces dat in de container wordt uitgevoerd, alleen toegankelijk vanuit de container.

Het publiceren van poorten betekent het toewijzen van containerpoorten aan de hostmachinepoorten zodat de poorten beschikbaar zijn voor services buiten Docker.

Om een ​​poort te publiceren, gebruikt u de opties -p als volgt:

-p host_ip:host_port:container_port/protocol

  • Als er geen host_ip is opgegeven, wordt dit standaard ingesteld op 0.0.0.0 . Als er geen protocol wordt opgegeven, wordt standaard TCP gebruikt. Als u meerdere poorten wilt publiceren, gebruikt u meerdere -p opties.

Om de TCP-poort 80 (nginx) in de container toe te wijzen aan poort 8080 op de host localhost-interface, zou u het volgende uitvoeren:

docker container run --name web_server -d -p 8080:80 nginx

U kunt controleren of de poort is gepubliceerd door http://localhost:8080 in uw browser te openen of door de volgende curl opdracht op de Docker-host uit te voeren:

curl -I

De uitvoer ziet er ongeveer zo uit:

HTTP/1.1 200 OK Server: nginx/1.17.6 Date: Tue, 26 Nov 2019 22:55:59 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT Connection: keep-alive ETag: "5dd3e500-264" Accept-Ranges: bytes

Gegevens delen (koppelingsvolumes)

Wanneer een container wordt gestopt, worden alle door de container gegenereerde gegevens verwijderd. Dockervolumes zijn de geprefereerde manier om de gegevens te laten bestaan ​​en deze over meerdere containers te delen.

Gebruik de volgende opties om volumes te maken en te beheren:

-v host_src:container_dest:options

  • De host_src kan een absoluut pad zijn naar een bestand of map op de host of een benoemd volume. De container_dest is een absoluut pad naar een bestand of map op de container. Opties kunnen rw (lezen-schrijven) en ro (alleen-lezen) zijn.). Als er geen optie is opgegeven, wordt standaard rw .

Om uit te leggen hoe dit werkt, laten we een map op de host maken en er een index.html bestand in plaatsen:

mkdir public_html echo "Testing Docker Volumes" > public_html/index.html

public_html map public_html in /usr/share/nginx/html in de container:

docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx

In plaats van het absolute pad naar de map public_html , gebruiken we de opdracht $(pwd) , die de huidige werkmap afdrukt.

Als u nu http://localhost:8080 in uw browser typt, zou u de inhoud van het bestand index.html moeten zien. U kunt ook curl :

curl

Testing Docker Volumes

Voer de container interactief uit

Gebruik bij het omgaan met de interactieve processen zoals bash de opties -i en -t om de container te starten.

De -it opties vertellen Docker om de standaard invoer verbonden te houden met de terminal en een pseudo-tty toe te wijzen:

docker container run -it nginx /bin/bash

De Bash-shell van de container wordt aan de terminal bevestigd en de opdrachtprompt wordt gewijzigd:

root@1da70f1937f5:/#

Nu kunt u communiceren met de shell van de container en elke opdracht erin uitvoeren.

In dit voorbeeld hebben we een opdracht ( /bin/bash ) gegeven als argument voor de opdracht docker run die is uitgevoerd in plaats van de opdracht die is opgegeven in het Dockerfile.

Conclusie

Docker is de standaard voor het verpakken en implementeren van applicaties en een essentieel onderdeel van CI / CD, automatisering en DevOps.

De opdracht Docker container docker container run wordt gebruikt om Docker-containers te maken en uit te voeren.

havenarbeider