APLICACIONES AVANZADAS

Para devops y entusiastas del software

READ MORE

 Introducción

Esta es una pequeña guía de introducción a Docker con ella puedes crear tus propios contenedores y desplegar tus aplicaciones.

Las aplicaciones cada vez se hacen las largas según va pasando el tiempo, con Docker puedes desplegar, aplicaciones y desarrollos rápidamente todos ellos con la misma configuración en cualquier equipo que tenga Docker instalado.

Esta guía te mostrará los comandos y conceptos esenciales para construir tu contenedor Docker y desplegarlo en cualquier máquina, puedes tenerla de referencia para consultarla mas adelante.

  • Indice:
  1. Que es Docker
  2. Porque deberías de usar Docker
  3. Docker Arquitectura
  4. Conceptos básicos de Docker
  5. Instalar Docker
  6. Comandos básicos esenciales
  7. Dokerfile
  8. Volumenes
  9. Recursos
  10. Ejemplo

 

Que es Docker

Docker es una plataforma open-source para el despliegue y la gestión de aplicaciones en contenedores. Permite a los devops y desarrolladores empaquetar fácilmente sus aplicaciones en contenedores que pueden ser desplegadas en cada máquina de cualquier entorno desde test a producción con una instalación identica de Docker.

Es esencialmente un kit de herramientas para ayudar a los desarrolladores a construir, administrar e implementar contenedores utilizando comandos únicos y archivos de configuración.


Por qué y para qué deberías de usar Docker

Ahora que hemos explicado brevemente lo que es Docker, podrías preguntarte, por qué y para qué debería usar Docker. Es la primera pregunta que deberías de hacerte, te voy a indicar las razonas a mi entender por las que deberias de utilizar Docker.

  • Aislar tu código, las librerías y otras aplicaciones o recursos que necesitas, del sistema operativo donde estás ejecutando los desarrollos. Esta es la primera razón y para mi la mas importante. (Aunque solo ejecutes un único contenedor
  • Escribes la aplicación Docker con tu código y librerias una única vez y puedes desplegarla en cualquier Sistema Operativo tantas veces como quieras.
  • Docker permite un menor y más rápido proceso de desarrollo y despliegue.
  • Gran integración de CI y CD.


Docker Arquitectura

La arquitectura de Docker se basa en un principio cliente-servidor.

El cliente Docker (CLI) habla con el Docker Daemon (dockerd), que es responsable de la construcción, funcionamiento y gestión de los contenedores.

El cliente Docker (CLI) se comunica con una interfaz REST API con el Docker Daemon (dockerd) utilizando el comando "docker".

Conceptos básicos de Docker

  • Imágenes

Las imágenes son plantillas de sólo lectura que contienen instrucciones para crear contenedores Docker.

 

Las imágenes suelen estar basadas en otra imagen, que llamaremos imagen base, a la que se le añaden configuraciones adicionales. Por ejemplo, construyes una imagen basada en la imagen de python y añades una configuración adicional de tus paquetes y así poder ejecutar una aplicación Django.

Las imágenes pueden almacenarse localmente o en algún tipo de registro de imágenes como DockerHub, también podemos crear nuestro propio servidor de imágenes con docker-registry

  • Contenedores

Un contenedor es una instancia ejecutable de una imagen Docker que puede ser administrada usando el Docker CLI o API. Se pueden conectar los contenedores a redes, añadir volúmenes de almacenamiento, e incluso construir imágenes a partir del estado actual del contenedor. Si paramos o reiniciamos el contenedor, no persistirá los datos que hemos modificado, a no ser que creemos otra imagen o guardemos la información en volúmenes, al arrancarlo a partir de la imagen volverá a su estado inicial

 

  • Volúmenes

Los volúmenes son la forma que tiene Docker para persistir en los datos, que son generados y utilizados por los contenedores de Docker. Se gestionan por Docker en el arranque del contenedor y pueden utilizarse para compartir datos entre los contenedores y el sistema anfitrión.

No aumentan el tamaño de los contenedores que los utilizan y su contexto es independiente del ciclo de vida del contenedor, pueden ser utilizados en contenedores Windows y Linux. Si necesitas almacer datos no persistentes se pueden crear volúmenes en memoria que aumentan el rendimiento, pero se borran al parar o reiniciar el contenedor

 

  • Variables de entorno

Las variables de entorno se utilizan para llevar los datos de configuración a su contenedor. Esto suele ocurrir cuando se tienen algunas configuraciones específicas para el sistema operativo o la implementación de su host, se cargan en el sistema del contenedor como variables de entorno.

  • networks

Las redes se utilizan para conectar contenedores Docker entre sí para que puedan comunicarse y compartir datos. También se pueden utilizar para aislar completamente las aplicaciones individuales para poder administrar mejor la seguridad e imposibilitar accesos no deseados.

Instalar Docker

Podemos instalar Docker en Linux, Mac y Windows(solo versión 10 Pro), os dejo la guía de cada uno de estos sistemas operativos, en el caso de Linux, indico el link de la distribución de Ubuntu pero existen otras que podreis encontrar junto a esta

MaC

https://docs.docker.com/docker-for-mac/install/

Windows

https://docs.docker.com/docker-for-windows/install/

Linux

https://docs.docker.com/engine/install/ubuntu/

 

Comandos básicos esenciales

Aunque existen herramientas gráficas para la administración de contenedores es fundamental saber los comandos principales desde la línea de comando ya sea bash, o powershell. el comando CLI es:

docker [OPTIONS] COMMAND

Con "docker --help" podemos ver la ayuda en donde nos indica la totalidad de opciones y comandos

docker run [opciones] <imagen> , con esto pondremos en marcha el contenedor de la imagen que le indiquemos ej. "docker run nginx"

Las opciones más habituales de la opción "run" son las siguiente:

-p, --publish: Publicaremos los puertos TCP en el host del sistema
-v, --volume: Montaremos un volumen en el contenedor
-e, --env: Añadir una variable de entorno en el contenedor
-i, --interactive: Nos mostrará y podremos interactuar con el pront del sistema del contenedor
-t, --tty: Pseudo tty
--name: Nombre del contenedor

Ejemplo: docker run --name contenedorapache -p 8080:80 apache

docker ps nos muestra un listado de los contenedores activos, si utilizamos el comando "docker ps -a" veremos los activos  y los  que están parados

 

docker stop <id_contenedor> con este comando pararemos el contenedor que indiquemos, no se elimina el contenedor, solo se para

Si queremos parar todos los contenedores activos pondemos ulitizar la siguiente instrucción  "docker stop $(docker ps -q)"

docker rm <id_contenedor> Al ejecutar este comando se borrará el contenedor. Para poder eliminar el contenedor tenemos primero que pararlo, nos mostrará un mensaje indicando que no puede hacer la operación hasra que lo paremos. Para borrar todos los contenedores que estén parados podemos ejecutar la instrucción "docker rm $(docker ps -q -a)"

docker exec [options] <contenedor> COMMANDO Este comando lo utilizaremos para ejecutar un comando dentro de un contenedor.

-d, --detach # ejecuta el comando en background
-i, --interactive # interactivo
-t, --tty # tty

Si queremos abrir un terminal bash ejecutaremos "docker exec -it contenedor_id /bin/bash"

docker logs <contenedor> nos permite ver los los logs del contenedor, si queremos que el contenedor nos muestre en vivo y continuamente los logs ulinizamos la opcion -f ej "docker logs contenedor_id -f"

docker stats , con este comando veremos el estado y recursos utilizados por cada contenedor activo

docker inspect <dontenedor> con esto veremos información más detallada del contenedor, nos lo mostrará en formato json.

docker images [opciones] [REPOSITORIO[:TAG]] Nos muestra la información de las imagenes que tenemos descargadas, las opciones son:

-a, --all muestra todas las imagenes
-q, --quiet Solo muestra los IDs

docker pull <imagen> descarga las imagen indicada a nuestro equipo, no la ejecuta.

docker rmi <imagen> Elimina la imagen indicada, no tiene que estar en uso, si está debemos de borrar primero el contenedor.

Dockerfile

El fichero Dokerfile lo utilizamos para crear una mueva imagen a partir de una imagen a la que le añadimos la configuración que necesitamos, es un fichero de texto en el que le indicaremos mediante unos comandos como queremos configurar la imagen para luego ejecutarla en un contenedor, los comandos más utilizados son lo siguientes:

FROM - Define la imagen base con la cual vamos a crear el contenedor
RUN - Usado para ejecutar un comando en el contenedor durante el proceso de creacion de la imagen
Copy - Copia un fichero o directorio al contenedor cuando se ejecuta.
Expose - Informa a  Docker que el contenedor tiene que exponer el puerto que le indiquemos en el sistema anfitrión.
CMD - Define el comando por defecto que se ejecutará cuando creemos un nuevo contenedor desde la imagen
Entrypoint - Define el comando por defecto que se elecutará cuando el contenedor esté ejecutandose
Volume - Activa el acceso ente la máquina anfitriona y el contenedor, puede ser un directorio e incluso un volumen en memoria.
Workdir - indica el directorio de trabajo dentro del contenedor
Env - Configura una variable de entorno dentro del contenedor
Label - Permite aladir una etiqueta la la imagen
Maintainer - Define quien es el que mantiene la imagen de docker
User - Configura el nombre de usuario para los comandos RUN, CMD o ENTRYPOINT

Volúmenes

Recursos

Ejemplo

Joomla templates by a4joomla