Docker
Containers beheren
Zoeken…
Syntaxis
- docker rm [OPTIES] CONTAINER [CONTAINER ...]
- docker attach [OPTIONS] CONTAINER
- docker exec [OPTIES] CONTAINER COMMAND [ARG ...]
- docker ps [OPTIES]
- docker-logboeken [OPTIES] CONTAINER
- docker inspecteert [OPTIES] CONTAINER | IMAGE [CONTAINER | IMAGE ...]
Opmerkingen
- In de bovenstaande voorbeelden wordt container telkens een parameter van de docker-opdracht genoemd als
<container>
ofcontainer id
of<CONTAINER_NAME>
. Op al deze plaatsen kunt u een containernaam of container-ID doorgeven om een container op te geven.
Lijst containers
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
docker ps
op zichzelf print alleen momenteel lopende containers. Gebruik de vlag -a
om alle containers te bekijken (inclusief de containers die zijn gestopt):
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago berserk_wozniak
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
Om containers met een specifieke status weer te geven, gebruikt u de opdrachtregeloptie -f
om de resultaten te filteren. Hier is een voorbeeld van een lijst met alle containers die zijn verlaten:
$ docker ps -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago
Het is ook mogelijk om alleen de container-ID's te vermelden met de schakelaar -q
. Dit maakt het zeer eenvoudig om het resultaat te bewerken met andere Unix-hulpprogramma's (zoals grep
en awk
):
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
Bij het starten van een container met docker run --name mycontainer1
geeft u een specifieke naam en geen willekeurige naam (in de vorm mood_famous, zoals nostalgic_stallman), en het kan gemakkelijk zijn om ze te vinden met een dergelijk commando
docker ps -f name=mycontainer1
Verwijzen naar containers
Docker-opdrachten die de naam van een container aannemen, accepteren drie verschillende vormen:
Type | Voorbeeld |
---|---|
Volledige UUID | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
Korte UUID | 9cc69f11a0f7 |
Naam | berserk_wozniak |
Gebruik docker ps
om deze waarden voor de containers op uw systeem te bekijken.
De UUID wordt gegenereerd door Docker en kan niet worden gewijzigd. U kunt de container een naam geven wanneer u deze start. docker run --name <given name> <image>
. Docker genereert een willekeurige naam voor de container als u er geen opgeeft bij het starten van de container.
OPMERKING : De waarde van de UUID (of een 'korte' UUID) kan elke lengte hebben, zolang de gegeven waarde uniek is voor één container
Containers starten en stoppen
Een lopende container stoppen:
docker stop <container> [<container>...]
Dit zal het hoofdproces in de container een SIGTERM sturen, gevolgd door een SIGKILL als het niet stopt binnen de respijtperiode. De naam van elke container wordt afgedrukt zodra deze stopt.
Een container starten die is gestopt:
docker start <container> [<container>...]
Hiermee start u elke container die op de achtergrond wordt doorgegeven; de naam van elke container wordt afgedrukt zodra deze begint. Om de container op de voorgrond te starten, geeft u de vlag -a
( --attach
) door.
Lijst containers met aangepast formaat
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
Een specifieke container zoeken
docker ps --filter name=myapp_1
Zoek container IP
Gebruik het volgende om het IP-adres van uw container te achterhalen:
docker inspect <container id> | grep IPAddress
of gebruik docker inspecteren
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
Dockercontainer opnieuw starten
docker restart <container> [<container>...]
Optie --tijd : seconden wachten om te stoppen voordat de container wordt gedood (standaard 10)
docker restart <container> --time 10
Containers verwijderen, verwijderen en opruimen
docker rm
kan worden gebruikt om specifieke containers zoals deze te verwijderen:
docker rm <container name or id>
Om alle containers te verwijderen, kunt u deze uitdrukking gebruiken:
docker rm $(docker ps -qa)
Docker verwijdert standaard geen actieve container. Elke container die wordt uitgevoerd, geeft een waarschuwingsbericht en wordt niet verwijderd. Alle andere containers worden verwijderd.
Als alternatief kunt u xargs
:
docker ps -aq -f status=exited | xargs -r docker rm
Waar docker ps -aq -f status=exited
een lijst met container-ID's retourneert van containers met de status "Exited".
Waarschuwing: alle bovenstaande voorbeelden zullen alleen 'gestopte' containers verwijderen.
Om een container te verwijderen, ongeacht of deze al dan niet is gestopt, kunt u de force flag -f
:
docker rm -f <container name or id>
Om alle containers te verwijderen, ongeacht de staat:
docker rm -f $(docker ps -qa)
Als u alleen containers met een dead
status wilt verwijderen:
docker rm $(docker ps --all -q -f status=dead)
Als u alleen containers met een exited
status wilt verwijderen:
docker rm $(docker ps --all -q -f status=exited)
Dit zijn allemaal permutaties van filters die worden gebruikt bij het vermelden van containers .
Om zowel ongewenste containers als hangende afbeeldingen die ruimte gebruiken na versie 1.3 te verwijderen , gebruikt u het volgende (vergelijkbaar met de Unix-tool df
):
$ docker system df
Alle ongebruikte gegevens verwijderen:
$ docker system prune
Voer opdracht uit op een reeds bestaande docker-container
docker exec -it <container id> /bin/bash
Het is gebruikelijk om in een reeds lopende container in te loggen om enkele snelle tests uit te voeren of om te zien wat de toepassing doet. Vaak duidt dit op slecht gebruik van containers vanwege logboeken en moeten gewijzigde bestanden in volumes worden geplaatst. In dit voorbeeld kunnen we in de container inloggen. Dit veronderstelt dat / bin / bash beschikbaar is in de container, dit kan / bin / sh of iets anders zijn.
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
Dit voorbeeld archiveert de inhoud van de gegevensmap in een tar. Vervolgens kunt u met docker cp
het ophalen.
Containerlogboeken
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, --follow=false Follow log output
--help=false Print usage
--since= Show logs since timestamp
-t, --timestamps=false Show timestamps
--tail=all Number of lines to show from the end of the logs
Bijvoorbeeld:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ff9716dda6cb nginx "nginx -g 'daemon off" 8 days ago Up 22 hours 443/tcp, 0.0.0.0:8080->80/tcp
$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
Maak verbinding met een exemplaar dat als daemon wordt uitgevoerd
Er zijn twee manieren om dat te bereiken, de eerste en meest bekende is de volgende:
docker attach --sig-proxy=false <container>
Deze verbindt je bash letterlijk aan de container bash, wat betekent dat als je een lopend script hebt, je het resultaat ziet.
Typ los: Ctl-P Ctl-Q
Maar als u een vriendelijkere manier nodig hebt en om nieuwe bash-instanties te kunnen maken, voert u gewoon de volgende opdracht uit:
docker exec -it <container> bash
Bestand van / naar containers kopiëren
van container tot host
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
van host naar container
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
Als ik jess / transmissie van gebruik
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
, de bestanden in de container zijn in / verzending / download
en mijn huidige map op de host is / home / $ USER / abc, daarna
docker cp transmission_id_or_name:/transmission/download .
Ik zal de bestanden naar laten kopiëren
/home/$USER/abc/transmission/download
u kunt niet, met behulp van docker cp
kopieert u slechts één bestand, kopieert u de mapstructuur en de bestanden
Docker-volumes verwijderen, verwijderen en opschonen
Dockervolumes worden niet automatisch verwijderd wanneer een container wordt gestopt. Bijbehorende volumes verwijderen wanneer u een container stopt:
docker rm -v <container id or name>
Als de vlag -v
niet is opgegeven, blijft het volume op de schijf staan als een 'hangend volume'. Alle hangende volumes verwijderen:
docker volume rm $(docker volume ls -qf dangling=true)
Het docker volume ls -qf dangling=true
filter retourneert een lijst met namen van docker-volumes, inclusief niet-gecodeerde namen, die niet aan een container zijn gekoppeld.
Als alternatief kunt u xargs
:
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
Docker-containerbestandssystemen exporteren en importeren
Het is mogelijk om de inhoud van het bestandssysteem van een Docker-container op te slaan in een tarball-archiefbestand. Dit is handig voor het verplaatsen van containerbestandssystemen naar verschillende hosts, bijvoorbeeld als een databasecontainer belangrijke wijzigingen heeft en het anders niet mogelijk is deze wijzigingen elders te repliceren. Houd er rekening mee dat het de voorkeur verdient om een geheel nieuwe container te maken op basis van een bijgewerkte afbeelding met behulp van een opdracht docker-compose.yml
docker run
of docker-compose.yml
, in plaats van het bestandssysteem van een container te exporteren en verplaatsen. Een deel van de kracht van Docker is de controleerbaarheid en verantwoording van de declaratieve stijl van het maken van afbeeldingen en containers. Door gebruik te maken van docker export
en docker import
, is deze kracht ingetogen vanwege de onduidelijkheid van wijzigingen aangebracht in het bestandssysteem van een container vanuit de oorspronkelijke staat.
docker export -o redis.tar redis
De bovenstaande opdracht maakt een lege afbeelding en exporteert vervolgens het bestandssysteem van de redis
container naar deze lege afbeelding. Gebruik het volgende om te importeren uit een tarball-archief:
docker import ./redis.tar redis-imported:3.0.7
Met deze opdracht maakt u de redis-imported:3.0.7
afbeelding, waaruit containers kunnen worden gemaakt. Het is ook mogelijk om wijzigingen aan te brengen bij het importeren en om een commit-bericht in te stellen:
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
De Dockerfile richtlijnen beschikbaar voor gebruik met de -c
command line optie zijn CMD
, ENTRYPOINT
, ENV
, EXPOSE
, ONBUILD
, USER
, VOLUME
, WORKDIR
.