Docker en línea de comandos

Docker

Actuando en el terminal


  • Cómo usar docker en línea de comandos
  • Crear contenedores
  • Descargar imágenes
  • Modificar contenedores y persistirlos en imágenes
  • Usar contenedores
  • Subir a docker hub imágenes

1. Obteniendo una Imagen

Obtención de Imágenes
Las imágenes en Docker son las bases para crear contenedores .
Puedes obtener diferentes versiones de una imagen usando etiquetas.
Comandos a estudiar


  • docker pull
  • docker images
  • docker search
  1. Descarga una imagen :

    1
    
    docker pull ubuntu:latest
    En este caso estamos descargando una imagen llamada ubuntu en su versión más reciente ( latest ).

  2. Ver imágenes disponibles :

    1
    
    docker images

  3. Consultar ayuda :

    1
    
    docker help images

  4. Buscar imágenes

Buscar todas las imágenes que contengan ubuntu cuya distribución empiece por 1

1
  docker search ubuntu:1


2. Estados del Contenedor

Antes de empezar con los comandos, es importante tener muy claro los estados que puede tener un contenedor , ya que nos ayudará a entender qué estamos haciendo en un momento determinado con un contenedor y por qué podemos realizar ciertas acciones y no otras.

Por ejemplo, no podremos ejecutar comandos en un contenedor si este no está en el estado running o en estado de ejecución.

Estados del Contenedor
Un contenedor en Docker puede estar en los siguientes estados:

Estados de un contenedor

  • Created : El contenedor ha sido creado, pero aún no se está ejecutando.
  • Running : El contenedor está activo y operativo.
  • Paused : El contenedor está en pausa, con todos los procesos detenidos, pero puede reanudarse.
  • Stopped : El contenedor se detuvo de manera controlada.
  • Exited : Similar al estado "stopped", pero indica que el contenedor terminó de manera inesperada.
  • Deleted : El contenedor ha sido eliminado y ya no está disponible.

Para ver los estados de cada contenedor:

1
docker ps -a

Para ver los contenedores que actualmente están en estado Running o Up :

1
docker ps

Los estados se irán comentando según avancemos con los comandos.


2. Crear un Contenedor

contenedor
Un contenedor es una instancia ejecutable de una imagen, que contiene todo el entorno necesario para correr aplicaciones de forma aislada. El comando **create** tiene varias opciones, pero no lo vamos a utilizar, no obstante lo comentamos
Comandos a estudiar


  • docker create
  • docker start
  • docker run

  1. Crear contenedor :
  • El comando docker create permite crear contenedores sin ejecutarlos inmediatamente .

1
2
3
docker create --name ls ubuntu:latest ls
docker create -i -t --name bash ubuntu:latest bash
docker create --name update ubuntu:latest apt-get update
Un contenedor en estado created, no puede ejecutar nada, tenemos que hacerlo usando start para pasarlo a estado up o running

Observa la siguiente secuencia 1de comandos y entiéndela


3. Crear un contenedor con run

docker run
Permite crear un contenedor a partir de una imagen y ponerlo en ejecución En caso de que la imagen no esté descargada, la descarga automáticamente

  • Este es uno de los comandos que más vamos a utilizar
  • Es un comando que tiene muchas opciones, puedes verlas con el comando help
    docker help run
    

3. Ejecutando y Administrando Contenedores

  1. Ver contenedores creados :

    1
    
    docker ps -a

  2. Ejecutar contenedores creados :

  • Para ejecutar un contenedor creado, usa el comando docker start con opciones para ver su salida en consola.
1
2
3
docker start -a ls
docker start -i bash
docker start -a update

Como vemos, con docker start , inicio un contenedor en estado creado ( created ).

Con el uso de las opciones -a (adjuntar salida) y -i (entrada interactiva) puedo interactuar con el contenedor al iniciarlo.

En el apartado 5, vemos cómo ejectuar comandos en un contenedor que esté en estado running o up (ver estados del contenedor e el apartado siguiente)


5. Ejecución de Comandos en el Contenedor

  1. Ejecutar comandos con docker exec :

    • Usa docker exec para ejecutar comandos en un contenedor que ya esté en ejecución.
    1
    
    docker exec -ti web bash

6. Forward de Puertos

docker run -p XXXX:XXXX

  1. Redireccionamiento de puertos entre anfitrión y contenedor :

    • Para acceder al servidor web desde la red, configura un puerto en el anfitrión que redirija al puerto 80 del contenedor.
    1
    
    docker run -ti -p 8080:80 --name web ubuntu:latest

7. Compartiendo Carpetas

Mapeo de Directorios
Puedes mapear una carpeta local en el directorio de trabajo del contenedor para compartir archivos.

  1. Crear un volumen compartido :
    1
    
    docker run -ti -p 8080:80 --name web -v /home/usuario/docker:/var/www/html ubuntu:latest

Si la carpeta no existe, Docker la crea automáticamente.


8. Crear una Imagen desde un Contenedor

Crear imagen desde contenedor
Para conservar el estado de un contenedor y replicarlo, crea una imagen con `docker commit`.
  1. Crear imagen :
    1
    
    docker commit container_name nombre_imagen:tag

9. Comandos para Manejar Volúmenes

  1. Crear y administrar volúmenes :

    • Comandos útiles para gestionar volúmenes en Docker:
    1
    2
    3
    4
    
    docker volume create [nombre]
    docker volume ls
    docker volume inspect nombre
    docker volume rm nombre

Los volúmenes permiten persistir datos y compartirlos entre contenedores o con el sistema anfitrión.

9. Otros Comandos Importantes en Docker

  1. Comandos útiles en Docker : Existen varios comandos para gestionar contenedores e imágenes. Aquí algunos de los más importantes:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    docker inspect
    docker pause
    docker unpause
    docker rm
    docker stop
    docker rmi
    docker login
    docker push
    docker pull
    docker import
    docker export

    Para obtener ayuda detallada sobre cada comando:

    1
    
    docker help


10. Inspección de Contenedores

Comando inspect
El comando `docker inspect` proporciona información detallada del contenedor, como directorios mapeados y puertos abiertos.
  1. Inspeccionar un contenedor :

    1
    
    docker inspect [opciones] nombre_contenedor

    Nota: Con la opción -s, obtienes información adicional sobre el tamaño de los archivos.


11. Pausar y Reiniciar un Contenedor

  1. Pausar y reanudar : Los comandos docker pause y docker unpause congelan y reinician un contenedor en un estado específico.

    1
    2
    
    docker pause
    docker unpause

    Práctica: Arranca un contenedor, abre un terminal y pausa el contenedor. Observa cómo afecta el terminal y reanúdalo.


12. Borrar un Contenedor

  1. Detener y borrar contenedores :

    • docker stop tiene una opción -t para especificar el tiempo de espera antes de detener el contenedor.
    1
    2
    
    docker stop [opciones]
    docker rm [opciones]

    Nota: pause y stop no son lo mismo. pause detiene momentáneamente el contenedor sin interrumpir el proceso, mientras que stop finaliza la ejecución.


13. Borrar Todos los Contenedores

  1. Comando para borrar múltiples contenedores :

    1
    2
    
    docker stop $(docker ps -a -q)
    docker rm $(docker ps -a -q)

    En PowerShell, utiliza paréntesis en lugar de $().


14. Ver Imágenes y Borrarlas

Gestión de Imágenes
Para borrar una imagen, no debe tener contenedores asociados, independientemente de su estado.
  1. Comandos para imágenes :

    1
    2
    
    docker images
    docker rmi nombre_imagen

15. Exportar e Importar Imágenes

Exportación e Importación de Imágenes
Los comandos `docker export` y `docker import` permiten guardar una imagen en un archivo `.tar` y restaurarla posteriormente.
  1. Exportar un contenedor a un archivo tar :

    1
    
    docker export -o web.tar web
  2. Importar una imagen desde un archivo :

    1
    
    docker import web.tar

    Ejercicio: Exporta el contenedor web a un archivo tar, revisa su tamaño, y crea una imagen web:v2 a partir del archivo.


16. Trabajando con Docker Hub

Docker Hub
Docker Hub permite almacenar, compartir y descargar imágenes de contenedores.
  1. Comandos esenciales para Docker Hub :

    1
    2
    3
    4
    
    docker login
    docker search
    docker pull nombre_imagen
    docker push nombre_imagen

17. Creando una Cuenta y Usando Docker Hub

  1. Crear una cuenta en Docker Hub :

    • Puedes descargar imágenes sin cuenta usando docker pull o docker run.
    • Inicia sesión con docker login para subir tus propias imágenes.
  2. Subir imágenes al repositorio :

    • Usa docker push para subir una imagen. Recuerda: el nombre de usuario debe ser parte del nombre de la imagen.

18. Estadísticas de Contenedores

docker stats
El comando `docker stats` muestra estadísticas en tiempo real del uso de recursos por los contenedores.
  1. Ver estadísticas de todos los contenedores activos :
    1
    
    docker stats

19. Espacio en Disco

docker system df
El comando `docker system df` proporciona información sobre el uso de disco por imágenes, contenedores y volúmenes.
  1. Revisar el uso de disco por Docker :
    1
    
    docker system df

20. Logs de Contenedores

docker logs
Con `docker logs`, puedes revisar los registros de un contenedor para solucionar problemas o revisar su estado.
  1. Ver logs de un contenedor específico :
    1
    
    docker logs container_name

Nota: Usa --tail para ver solo las últimas líneas.


21. Gestión de Redes

docker network
Docker permite gestionar redes personalizadas para conectar contenedores.
  1. Listar redes disponibles :

    1
    
    docker network ls

  2. Crear una red personalizada :

    1
    
    docker network create my_custom_network


22. Renombrar Contenedores

docker rename
Usa `docker rename` para renombrar un contenedor existente.
  1. Renombrar un contenedor :
    1
    
    docker rename old_name new_name

23. Limpieza de Recursos

docker system prune
El comando `docker system prune` elimina contenedores, imágenes y volúmenes que no se estén utilizando.
  1. Ejecutar limpieza de recursos :
    1
    
    docker system prune -f

Nota: Añade la opción --volumes para eliminar también volúmenes.