Los contenedores se ejecutan en la nube. Esto se debe a que la tecnología de contenedores permite que los sitios web y las aplicaciones web generen copias nuevas de sí mismos a medida que aumenta la demanda. Son la razón por la que cientos de millones de personas pueden usar sitios populares sin que esos sitios se dobleguen bajo la presión del tráfico global. Los contenedores son una tecnología de Linux, lo que significa que dependen del código (específicamente cgroups
y espacios de nombres) exclusivos del kernel de Linux, por lo que cuando ejecuta un contenedor, está ejecutando Linux. Usando imágenes de contenedores de sitios como quay.io y dockerhub.io, la mayoría de las personas crean nuevos contenedores específicos para su aplicación o caso de uso. Pero eso hace que algunas personas se pregunten:si mi contenedor proviene de un edificio de desarrolladores sobre el contenedor de otro desarrollador, ¿dónde están esos? vienen los contenedores? No te preocupes, no son tortugas hasta abajo. Puede crear un contenedor desde cero y existe una excelente herramienta de código abierto llamada Buildah para ayudarlo a hacerlo.
Contenedores Linux
- ¿Qué son los contenedores de Linux?
- Una introducción a la terminología de contenedores
- Descargar:Introducción a los contenedores
- Operadores de Kubernetes:automatización de la plataforma de orquestación de contenedores
- eBook:Patrones de Kubernetes para diseñar aplicaciones nativas de la nube
- ¿Qué es Kubernetes?
Especificaciones del contenedor
Los contenedores surgieron de proyectos como los contenedores de Linux (LXC) y Docker, y es la Open Container Initiative (OCI) la que mantiene la especificación formal de lo que es un contenedor. Un contenedor correctamente ensamblado que cumple con la definición de OCI se ejecuta en cualquier motor de contenedor compatible con OCI, como Podman, Docker, CRI-O, etc.
Instalando Buildah
En Fedora y CentOS, es posible que ya tenga instalado Buildah. Si no, puedes instalarlo con tu administrador de paquetes:
$ sudo dnf install buildah
En Debian y sistemas basados en Debian:
$ sudo apt install buildah
Configuración de Buildah
Debido a que Buildah crea contenedores, la configuración de su entorno es la misma que la configuración de Podman. Ya sea que esté usando Podman o no, configure su sistema para podman "sin raíz" antes de continuar.
Construir un contenedor de la nada
Para construir un contenedor completamente nuevo, utilizando el trabajo previo de nadie como base, usa el nombre especial scratch
para decirle a Buildah que desea crear un contenedor vacío. El scratch
la designación no es un nombre de imagen. Es su exención de usar una imagen existente para basar su trabajo.
$ buildah from scratch
Este nuevo contenedor, llamado working-container
de forma predeterminada, presenta una pequeña cantidad de metadatos y, literalmente, nada más, y ahora se ejecuta en segundo plano en secreto. Puedes verlo con los containers
subcomando:
$ buildah containers
CONTAINER ID BUILDER ID IMAGE NAME CONTAINER NAME
dafc77921c0c * scratch working-container
Para ejecutar el contenedor, primero debe usar unshare
subcomando (a menos que esté ejecutando Buildah como root):
$ buildah unshare
Confirme que su contenedor de trabajo no tiene funcionalidad (respuesta de falla esperada en este caso):
$ buildah run working-container sh
ERRO[0000] container_linux.go:349: starting container process caused "exec: \"sh\": executable file not found in $PATH"
Agregar a su contenedor
Para agregar comandos a su contenedor, primero debe montarlo. Las imágenes del contenedor se almacenan en su ~/.local
directorio por defecto:
$ buildah mount working-container
~/.local/share/containers/storage/overlay/b76940e6fe4efad7a0adca3b5399ee12055ddd733bbe273120dcae36a2e6c12f/merged
Con el contenedor montado en su ~/.local
directorio (o /var/lib/containers/
en el caso de ejecutar como root), puede agregar paquetes usando su administrador de paquetes. El --releasever
debe coincidir con la distribución que está ejecutando a medida que crea el contenedor.
[Fedora]$ sudo dnf install --installroot \
~/.local/share/containers/storage/overlay/b76940e6fe4efad7a0adca3b5399ee12055ddd733bbe273120dcae36a2e6c12f/merged \
--releasever 33 \
bash coreutils \
--setopt install_weak_deps=false -y
El método exacto para agregar paquetes depende de su distribución y del administrador de paquetes que utilice. Por ejemplo, en mi escritorio Slackware, uso installpkg
:
[Slack]$ installpkg --root ~/.local/share/containers/storage/overlay/b76940e6fe4efad7a0adca3b5399ee12055ddd733bbe273120dcae36a2e6c12f/merged \
/tmp/bash-5.0.17-x86_64-1_SMi.txz
Ahora puede ejecutar el contenedor e intentar algo simple, como iniciar un shell:
$ buildah run working-container bash
# bash --version
GNU bash, version 5.0.17(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Configurando tu contenedor
La buildah config
El subcomando le brinda acceso a atributos comunes, como el comando predeterminado que desea que su contenedor ejecute cuando se inicie, establecer variables de entorno, establecer el shell predeterminado, definir el autor, la arquitectura y el nombre de host, y mucho más. Por ejemplo, imagine que ha agregado un paquete que contiene un script de shell llamado motd.sh
y desea que se ejecute cuando se inicie el contenedor:
$ buildah config --author "Seth Kenlon" \
--os "Slackware" --shell /bin/bash \
--cmd /usr/bin/motd.sh working-container
Distribuyendo tu contenedor
Cuando haya terminado de construir su contenedor, puede conservarlo como una imagen usando el commit
subcomando.
$ buildah commit working-container my_image
Constrúyelo con Buildah
Los contenedores a veces parecen mágicos, pero no son mágicos. Se construyen desde cero y son lo suficientemente flexibles como para que, una vez que existe una imagen, otros puedan usarla para crear nuevos contenedores e imágenes de contenedores que llenan un nicho diferente. No es necesario comenzar desde cero, pero si tiene curiosidad sobre cómo comienzan las imágenes o si desea intentar crear una imagen específica para sus requisitos, Buildah es la herramienta que debe usar.