Contenedores¶
Los contenedores son instancias de las imágenes que hemos creado o hemos descargado que se ejecutan de forma aislada.
Listado¶
La orden para ver el listado de contenedores del sistema es docker container ls
o la forma abreviada docker ps
. Si lo ejecutamos nos dará un listado vacío porque no hay ningún contenedor activo.
Probemos con el parámetro --all
o -a
.
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4bd76e08b07f wordpress "docker-…" 11 minutes ago Exited (0) peaceful_murdock
69a3c34c224d hello-world "/hello" 18 minutes ago Exited (0) blissful_goldwasser
Estos contenedores están parados y se pueden volver a ejecutar, con el mismo estado que tuviera el sistema de archivos cuando se detuvieron.
Ejecutar comandos dentro de un contenedor¶
Ya hemos usado docker run
para crear e iniciar un contenedor. También podemos usar este comando para ejecutar programas que estén dentro del contenedor. Por ejemplo:
docker run --name ubuntu_bash --rm -i -t ubuntu bash
Info
Las primeras versiones de Docker eran más limitadas, respecto a la creación de objetos. Así que salió con comandos como docker start
, docker stop
, etc. relacionados con los contenedores. Cuando surgieron más objetos no había consistencia entre los comandos de otros objetos (como docker volumes ls
) y los de los contenedores.
Así que se ha creado una jerarquía nueva de subcomandos bajo el comando container
que son equivalentes y se mantienen por compatibilidad:
Antiguo | Nuevo |
---|---|
docker run |
docker container run |
docker start |
docker container start |
docker stop |
docker container stop |
docker rm |
docker container rm |
docker inspect |
docker container inspect |
docker exec |
docker container exec |
No hay más diferencia entre ellos que el nombre.
Pero esta forma de ejecutar cosas, crea un nuevo contenedor. Si queremos ejecutar un comando en un contenedor que ya esté iniciado, debemos usar docker container exec
.
Ejecuta lo siguiente en otro terminal (no cierres el anterior).
docker exec -w /tmp ubuntu_bash touch my_file.sh
El parámetro -w
indica el directorio de trabajo, después indicamos el contenedor donde queremos ejecutar el comando (ubuntu_bash
) y por último el comando a ejecutar (touch my_file.sh
).
Si en el primer terminal ejecutamos un listado del directorio tmp:
# ls /tmp
my_file.sh
Vemos como podemos modificar un contenedor ya iniciado con docker container exec
.
Pulsa Ctrl+D en el primer terminal para cerrar y borrar el contenedor.
Iniciar un contenedor¶
Con docker container start
podemos iniciar un contenedor parado:
Info
Aquí peaceful_murdock
es el nombre del contenedor que nos salió en docker container ls -a
.
Tendrás que cambiarlo por el nombre que te salga en tu equipo, dado que cuando no se asigna un
nombre de forma específica, se asigna uno automático.
$ docker container start peaceful_murdock
peaceful_murdock
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4bd76e08b07f wordpress "docker…" 14 minutes ago Up 0.0.0.0:8080->80/tcp peaceful_murdock
Veremos que la web de instalación de WordPress está de nuevo disponible. Solo que ahora el contenedor se ejecuta en segundo plano y no lo podemos detener como antes.
Detener un contenedor¶
Con docker container stop
podemos detener un contenedor iniciado, indicando su id o su nombre
$ docker container stop 4bd76e08b07f
4bd76e08b07f
Tip
Podemos hacer referencia a los contenedores por su ID o por su nombre.
Borrar un contenedor¶
Un contenedor detenido ocupa espacio. Si hemos dejado de necesitar un contenedor podemos borrarlo con docker container rm
. Igualmente hay que indicar id o nombre.
$ docker container rm 4bd76e08b07f
4bd76e08b07f
Danger
Hay que tener cuidado al borrar contenedores. Cuando un contenedor se borra se elimina cualquier información que contenga y no esté almacenada en algún lugar externo al propio contenedor.