Instalar docker en debian
Tutorial de instalación https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-debian-10
Crear y ejecutar un contenedor desde una imagen
docker run <nombre-de-la-imagen>
Ejemplo
docker run hello-world

Sobreescribir comando de una imagen
Para sobreescribir el comando inicial de una imagen lo hacemos con esta instrucción
docker run <nombre-de-la-imagen> comando
ejemplo
docker run busybox echo hola mundo

Podemos sobreescribir el comando por ejemplo con un ls
docker run busybox ls

En este caso podemos ver el contenido del sistema de ficheros de nuestro contenedor.
Si intentamos ejecutar los comandos sobre la imagen hello-world que hemos instalado al principio recibimos un error ya que ni echo ni ls estan instalador en la primera imagen
Listar contenedores en ejecución
Para listar los contenedores en ejecución lo hacemos tal como sigue:
docker ps (solamente los que están en ejecución)

docker ps -all (se ven todos los contenedores, aunque no estén en ejecución)
Ciclo de vida de un contenedor
Cuando ejectuamos un contenedor pasa lo siguiente:
docker run = docker create + docker start
crear un contenedor: docker create <nombre-de-la-imagen>
ejectuar un contenedor: docker start -a <id-del-contenedor>


Reiniciar contenedores apagados
Primero miramos que contenedores tenemos instalados con docker ps –all

Con el comando docker start -a <id> volvemos a ejecutar el contenedor apagado

En este caso no podemos sobreescribir el comando inicial.
Eliminar contendores apagados
Con docker system prune eliminamos los contenedores apagados

Logs de un contenedor
para obtener los logs de un contenedor:
docker logs <id-del-contenedor>

veamos otro ejemplo

Detener contenedores
Primero creamos un contendor con busybox que no se va a detener

Para detenerlo tenemos dos opciones
docker stop <id-del-contendor> (termina el proceso de manera normal)
docker kill <id-del-contenedor> (no realiza ningún tipo de cierre)
Stop da tiempo para guardar cambios, encambio kill no hace ningún trabajo adicional.
Es mejor enviar la señal de stop
Contenedores multi-comando
Primero ejecutamos un contenedor de redis
docker run redis

Ahora tenemos que abrir un segundo terminal con un cliente de redis no podremos acceder ya que no estamos ejecutando el cliente dentro del contenedor.
Para ello debemos ejecutar el cliente dentro del mismo contenedor.
La estructura del comando sería la siguiente:
docker exec -it <id-del-contenedor> <comando>
Com docker ps -all vemos la id del contenedor

Ahora ejecutando docker exec -it <id> redis-cli el cliente de redis se ejecutaria dentro del contenedor.

Los comandos redis se ejecutarían en el contenedor

Si la opción -it no tenemos interactividad con el nuevo comando.
Como tener un intérprete de comandos en nuestro contenedor
Primero tenemos que obtener la id de nuestro contenedor redis con docker ps -all
Luego ejecutamos docker exe -it <id-contenedor> sh y obtenemos un shell para ejecutar comando.

Podríamos ejectuar el cliente de redis

y para salir haríamos Ctrl+c
Para salir del shell del contenedor hacemos exit

Iniciar con un shell
Para iniciar con un shell usemos el siguiente comando:
docker run -it busybox sh
Si se abren dos contenedores con este comando están aislados, son máquinas diferentes, a no ser que los conectemos de alguna forma.