Docker
Sitio: | Facultad de Ingeniería U.Na.M. |
Curso: | IC511 - Internet de las Cosas, Sensores y Redes |
Libro: | Docker |
Imprimido por: | Invitado |
Día: | miércoles, 4 de diciembre de 2024, 23:05 |
1. introducción
Docker es una plataforma abierta para desarrollar, enviar y ejecutar aplicaciones. Docker le permite separar sus aplicaciones de su infraestructura para que pueda entregar software rápidamente. Con Docker, puede administrar su infraestructura de la misma manera que administra sus aplicaciones. Al aprovechar las metodologías de Docker para enviar, probar e implementar el código rápidamente, puede reducir significativamente la demora entre escribir el código y ejecutarlo en producción.
Docker se basa en "imágenes" que empaquetan aplicaciones. Cuando se ejecuta una imagen se crea un "contenedor".
Contenedores vs. Máquinas virtuales
¿Por qué Docker (resumen)?
- más que solo entornos virtuales
- entornos aislados para todas las dependencias
- variedad de servicios
- fáciles de desplegar
- mismo entorno para todos los desarrolladores
- se puede elegir la versión de python
- etc
2. Instalación
Pasos para instalar docker en la raspberry pi
$ sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
"deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
IMPORTANTE: Reiniciar el equipo
$ sudo apt install docker-ce docker-ce-cli containerd.io
$ sudo docker run hello-world
$ sudo groupadd docker
$ sudo usermod -aG docker "$USER"
$ newgrp docker
$ docker run hello-world
Activamos docker como servicio de sistema para que se ejecute cada vez que se inicia el sistema
$ sudo systemctl enable docker.service
$ sudo systemctl enable containerd.service
Por último editamos el archivo "dhcpcd.conf" y agregamos la siguiente línea al final
$ sudo nano /etc/dhcpcd.conf
denyinterfaces veth*
Reiniciamos el servicio DHCP
$ sudo systemctl restart dhcpcd.service
3. Crear una Imagen
En el capítulo anterior utilizamos la imagen "hello-world", ahora vamos a crear nuestra propia imagen. Vamos a convertir nuestro clientemqtt a imagen de docker. Las instrucciones para crear la imagen se especifican en un archivo Dockerfile.
$ git clone https://github.com/GermanXander/docker_iot.git
# branch 3a
Una vez que tenemos el archivo Dockerfile construimos la imagen
~/docker_iot/clienteMqtt $ docker build -t clientemqtt .
La opción -t es para indicar un tag o nombre de la imagen. El punto final es para indicar que el archivo Dockerfile se encuentra en directorio actual.
Ahora ejecutamos (creamos el contenedor) docker run
~/docker_iot/clienteMqtt $ docker run --rm --name cliente_mqtt clientemqtt
--rm para que elimine el contenedor cuando salimos
"cliente_mqtt" es el nombre del contenedor basado en la imagen "clientemqtt"
podemos observar que hay un error en la zona horaria. Esto lo vamos a solucionar con variables de entorno pasadas al contenedor (ENV).
Uso de Variables de entorno
# branch 3b
ENV TZ="America/Argentina/Buenos_Aires"
~/docker_iot/clienteMqtt $ docker run -e SERVIDOR=iotunam.duckdns.org -e TOPICO=temperatura --rm --name cliente_mqtt clientemqtt
Contenedores en segundo plano
~/docker_iot/clienteMqtt $ docker logs -f --tail 20 cliente_mqtt
$ docker exec -it cliente_mqtt /bin/bash
4. Docker compose
Docker compose es una herramienta que nos permite utilizar un archivo con la información para la creación de todos nuestros contenedores. Parámetros tales como imagen, variables de entorno, puertos, directorios, etc. se agregan de manera estructurada en una archivo .yaml (texto), generalmente compose.yaml.
Se instala con:
$ sudo apt install docker
version: "3"
services:
clientemqtt:
image: clientemqtt
container_name: clientemqtt
environment:
- TZ=America/Argentina/Buenos_Aires
- SERVIDOR=${SERVIDOR} #Se reemplazará por la env var SERVIDOR defineda en .env
- TOPICO=${TOPICO}
restart: unless-stopped
~/docker $ docker compose up