Docker
Gestion de contenedores
Buscar..
Sintaxis
- docker rm [OPCIONES] CONTENEDOR [CONTENEDOR ...]
- acoplar acoplador [OPCIONES] CONTENEDOR
- docker exec [OPCIONES] COMANDO DE CONTENEDORES [ARG ...]
- docker ps [OPCIONES]
- troncos acoplables [OPCIONES] CONTENEDOR
- Docker inspeccionar [OPCIONES] CONTENEDOR | IMAGEN [CONTENEDOR | IMAGEN ...]
Observaciones
- En los ejemplos anteriores, siempre que el contenedor es un parámetro del comando de ventana acoplable, se menciona como
<container>
o elcontainer id
o<CONTAINER_NAME>
. En todos estos lugares puede pasar un nombre de contenedor o un ID de contenedor para especificar un contenedor.
Listado de contenedores
$ 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
solo imprime contenedores actualmente en ejecución. Para ver todos los contenedores (incluidos los detenidos), use la bandera -a
:
$ 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
Para listar contenedores con un estado específico, use la opción de línea de comando -f
para filtrar los resultados. Aquí hay un ejemplo de listado de todos los contenedores que han salido:
$ 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
También es posible enumerar solo las ID de contenedor con el conmutador -q
. Esto hace que sea muy fácil operar el resultado con otras utilidades Unix (como grep
y awk
):
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
Al iniciar un contenedor con la aplicación docker run --name mycontainer1
le da un nombre específico y no un nombre aleatorio (en la forma mood_famous, como nostalgic_stallman), y puede ser fácil encontrarlos con un comando de este tipo
docker ps -f name=mycontainer1
Contenedores de referencia
Los comandos de Docker que toman el nombre de un contenedor aceptan tres formas diferentes:
Tipo | Ejemplo |
---|---|
UUID completo | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
UUID corto | 9cc69f11a0f7 |
Nombre | berserk_wozniak |
Use docker ps
para ver estos valores para los contenedores en su sistema.
El UUID es generado por Docker y no puede ser modificado. Puede proporcionar un nombre al contenedor cuando lo inicie docker run --name <given name> <image>
. Docker generará un nombre aleatorio para el contenedor si no especifica uno al momento de iniciar el contenedor.
NOTA : El valor del UUID (o un UUID 'corto') puede ser de cualquier longitud siempre que el valor dado sea único para un contenedor
Arranque y parada de contenedores.
Para detener un contenedor en ejecución:
docker stop <container> [<container>...]
Esto enviará al proceso principal en el contenedor un SIGTERM, seguido de un SIGKILL si no se detiene dentro del período de gracia. El nombre de cada contenedor se imprime cuando se detiene.
Para iniciar un contenedor que está detenido:
docker start <container> [<container>...]
Esto iniciará cada contenedor pasado en el fondo; El nombre de cada contenedor se imprime a medida que comienza. Para iniciar el contenedor en primer plano, pase la --attach
-a
( --attach
).
Listar contenedores con formato personalizado.
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
Encontrar un contenedor específico
docker ps --filter name=myapp_1
Encontrar contenedor IP
Para averiguar la dirección IP de su contenedor, use:
docker inspect <container id> | grep IPAddress
o usar el docker inspeccionar
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
Reiniciando contenedor contenedor
docker restart <container> [<container>...]
Opción - tiempo : segundos para esperar antes de detener el contenedor (valor predeterminado 10)
docker restart <container> --time 10
Eliminar, eliminar y limpiar contenedores.
docker rm
se puede utilizar para eliminar contenedores específicos como este:
docker rm <container name or id>
Para eliminar todos los contenedores puedes usar esta expresión:
docker rm $(docker ps -qa)
Por defecto, la ventana acoplable no eliminará un contenedor que se esté ejecutando. Cualquier contenedor que se esté ejecutando producirá un mensaje de advertencia y no se eliminará. Todos los demás contenedores serán eliminados.
Alternativamente puedes usar xargs
:
docker ps -aq -f status=exited | xargs -r docker rm
Donde el docker ps -aq -f status=exited
devolverá una lista de ID de contenedor de contenedores que tienen el estado "Exited".
Advertencia: Todos los ejemplos anteriores solo eliminarán los contenedores 'detenidos'.
Para eliminar un contenedor, independientemente de si está detenido o no, puede utilizar el indicador de fuerza -f
:
docker rm -f <container name or id>
Para eliminar todos los contenedores, independientemente del estado:
docker rm -f $(docker ps -qa)
Si desea eliminar solo los contenedores con un estado dead
:
docker rm $(docker ps --all -q -f status=dead)
Si desea eliminar solo los contenedores con un estado de exited
:
docker rm $(docker ps --all -q -f status=exited)
Estas son todas las permutaciones de los filtros utilizados al enumerar contenedores .
Para eliminar tanto los contenedores no deseados como las imágenes colgantes que usan espacio después de la versión 1.3 , use lo siguiente (similar a la herramienta df
Unix):
$ docker system df
Para eliminar todos los datos no utilizados:
$ docker system prune
Ejecutar comando en un contenedor de ventana acoplable ya existente
docker exec -it <container id> /bin/bash
Es común iniciar sesión en un contenedor que ya se está ejecutando para realizar algunas pruebas rápidas o ver qué está haciendo la aplicación. A menudo denota malas prácticas de uso de contenedores debido a los registros y los archivos modificados deben colocarse en volúmenes. Este ejemplo nos permite iniciar sesión en el contenedor. Esto supone que / bin / bash está disponible en el contenedor, puede ser / bin / sh o cualquier otra cosa.
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
Este ejemplo archiva el contenido del directorio de datos en un tar. Luego con el docker cp
puedes recuperarlo.
Registros de contenedores
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
Por ejemplo:
$ 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"
Conectar a una instancia que se ejecuta como demonio
Hay dos formas de lograrlo, la primera y la más conocida es la siguiente:
docker attach --sig-proxy=false <container>
Este, literalmente, adjunta su bash al contenedor bash, lo que significa que si tiene un script en ejecución, verá el resultado.
Para separar, simplemente escriba: Ctl-P Ctl-Q
Pero si necesita una forma más amigable y poder crear nuevas instancias de bash, simplemente ejecute el siguiente comando:
docker exec -it <container> bash
Copiando archivo desde / a contenedores
del contenedor al host
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
de host a contenedor
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
Si utilizo jess / transmisión desde
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
, los archivos en el contenedor están en / transmisión / descarga
y mi directorio actual en el host es / home / $ USER / abc, después de
docker cp transmission_id_or_name:/transmission/download .
Tendré los archivos copiados a
/home/$USER/abc/transmission/download
no puede, utilizando docker cp
copiar solo un archivo, copie el árbol de directorios y los archivos
Eliminar, eliminar y limpiar los volúmenes de la ventana acoplable.
Los volúmenes de Docker no se eliminan automáticamente cuando se detiene un contenedor. Para eliminar volúmenes asociados al detener un contenedor:
docker rm -v <container id or name>
Si no se especifica el indicador -v
, el volumen permanece en el disco como un 'volumen colgante'. Para borrar todos los volúmenes colgantes:
docker volume rm $(docker volume ls -qf dangling=true)
El docker volume ls -qf dangling=true
filter devolverá una lista de nombres de volúmenes de la docker volume ls -qf dangling=true
acoplable, incluidos los no etiquetados, que no están adjuntos a un contenedor.
Alternativamente, puedes usar xargs
:
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
Exportar e importar sistemas de archivos contenedor Docker
Es posible guardar el contenido del sistema de archivos de un contenedor Docker en un archivo de archivo tarball. Esto es útil en una pizca para mover sistemas de archivos de contenedores a diferentes hosts, por ejemplo, si un contenedor de base de datos tiene cambios importantes y de lo contrario no es posible replicar esos cambios en otros lugares. Tenga en cuenta que es preferible crear un contenedor completamente nuevo a partir de una imagen actualizada utilizando un comando de docker run
docker-compose.yml
o docker-compose.yml
archivo docker-compose.yml
, en lugar de exportar y mover el sistema de archivos de un contenedor. Parte del poder de Docker es la capacidad de auditoría y la responsabilidad de su estilo declarativo de creación de imágenes y contenedores. Al utilizar la docker export
y la docker import
, esta potencia se ve reducida debido a la ofuscación de los cambios realizados dentro del sistema de archivos de un contenedor desde su estado original.
docker export -o redis.tar redis
El comando anterior creará una imagen vacía y luego exportará el sistema de archivos del contenedor redis
a esta imagen vacía. Para importar desde un archivo tarball, use:
docker import ./redis.tar redis-imported:3.0.7
Este comando creará la imagen redis-imported:3.0.7
, a partir de la cual se pueden crear los contenedores. También es posible crear cambios en la importación, así como establecer un mensaje de confirmación:
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
Las directivas Dockerfile disponibles para uso con la opción de línea de comando -c
son CMD
, ENTRYPOINT
, ENV
, EXPOSE
, ONBUILD
, USER
, VOLUME
, WORKDIR
.