Fundamentos de docker para sistemas operativos
Creado por Giancarlo Ortiz
para explicar los fundamentos de los Sistemas operativos
Un instrumento de docker es un documento escrito que permite al motor de docker informar las opciones de compilación de imágenes y puesta en marcha de contenedores.
Un dockerfile es un documento de texto plano que contiene los comandos para agregar como una capa de software multiples elementos a una imagen base y ensamblar una nueva imagen de docker.
-
"Sigo a mucha gente, porque tengo mucho que aprender."
Salomón Hykes
# NGINX + SSH
# Opciones de construcción de la imagen
# -------------------------------------
# Imagen base de la imagen que construye el dockerfile
FROM debian:11
# Instalación de el servidor web
RUN apt-get update && apt-get install -y nginx openssh-server
# Copia de los archivos que se van a servir
# Expone los puertos a los que es dirigido los servicios TCP
EXPOSE 22
EXPOSE 80
En la compilación del dockerfile el motor de docker ejecuta cada instrucción en el archivo en secuencia, si la imagen base no esta almacenada la descarga y sobre ella realiza todas las actualizaciones en sucesión automatizada hasta obtener una nueva imagen de docker almacenada localmente.
Nota: Esta imagen nueva se puede almacenar en tu cuenta de docker-hub y publicar para compartir con otros usuarios de docker.
# Docker build -t [name_image:tag_image]
docker build -t web:10
Un Manifiesto es un documento de texto que contiene los comandos para configurar y ejecutar un contenedor a partir de una imagen de Docker utilizando docker compose.
-
"Siempre encuentro a la gente más inteligente que yo. Entonces mi trabajo es asegurarme de que la gente inteligente pueda trabajar junta. Y es que la gente estúpida puede trabajar junta fácilmente, la gente inteligente no."
Jack Ma
version: "3.9" # optional since v1.27.0
# Declaración de redes
networks:
# Red para los contenedores (back-tier es un label)
back-tier:
# Nombre de la red
name: red_org
# Tipo de red
driver: bridge
# Gestión IP
ipam:
driver: default
config:
subnet: 192.168.1.0/24
gateway: 192.168.1.254
# Declaración de servicios
services:
# Contenedor del servicio WEB (http es un label)
http:
# Nombre del contenedor
container_name: nginx_ctn
# Opciones de restart: "no" | always | on-failure | unless-stopped
restart: "no"
build:
# Ruta de la carpeta con el dockerfile de la imagen a construir
context: ./http
# Nombre del archivo dockerfile
dockerfile: Dockerfile
# Puertos que serán expuestos en ejecución
ports:
- "8000:80"
# Redes a las que se conectara el contenedor
networks:
back-tier:
aliases:
- nginx.host
En la ejecución de un docker-compose el motor de docker ejecuta uno o varios contenedores de una o varias imágenes cumpliendo con todas las opciones manifestadas en el archivo Yaml, esto puede incluir configuraciones de la red o redes a las que se conecta cada contenedor.
Nota: Es posible ejecutar un contenedor a partir de una imagen sin la ayuda de compose, pero compose facilita la legibilidad y gestión del código.
# Run docker-without-compose
docker run --name ng-server \
-p 8000:80 \
-p 8022:20 \
web:10
# Stop docker-without-compose
docker stop ng-server
# Remove docker-without-compose
docker rm ng-server
# Run docker-compose
docker compose up
# Stop docker-compose
docker compose -f ./docker-compose.yaml down
Un entry_point es un documento de texto plano que incluye una secuencia de comandos simple o script de sistema en un lenguaje que es soportado por el sistema operativo en el contenedor.
Este punto de entrada puede o no iniciar la ejecución de uno o varios Disk And Execution Monitor (daemon) para ejecutar servicios en segundo plano; en caso contrario el contenedor terminara su ejecución al finalizar la ultima tarea solicitada.
-
"Siempre encuentro a la gente más inteligente que yo. Entonces mi trabajo es asegurarme de que la gente inteligente pueda trabajar junta. Y es que la gente estúpida puede trabajar junta fácilmente, la gente inteligente no."
Jack Ma
# Inicia el servidor SSH
service ssh start
# Inicia el servidor HTTP
service nginx start
# Inicia el log de visitas por HTTP y se queda a la espera de nuevas entradas
tail -F /var/log/nginx/access.log
Si no se incluye el modificador -d
al comando docker run
la salida estándar STDOUT del proceso punto de entrada en el contenedor queda vinculada (attached) a la terminal de comandos; si se incluye este la terminal termina el comando pero el contenedor seguirá corriendo en segundo plano, pero aun se puede ejecutar comandos en un contenedor corriendo en segundo plano.
Nota: Incluso es posible ejecutar una terminal interactiva dentro del contenedor.
# Run container in detach mode with docker
docker run --name ng-server \
-p 8000:80 \
-p 8022:20 \
-d web:10
# Run docker-compose in detach mode
docker compose up -d
# Execute CLI terminal in a running container
docker exec –i ng-server /bin/bash
- Docker (Wikipedia)
- Motor de software (Wikipedia)
- Comandos Linux terminal (Wikipedia)
- Servicios en SO Windows (Wikipedia)
- Daemon en SO Linux (Wikipedia)