Puntos clave: Los contenedores encapsulan aplicaciones, permitiendo un rendimiento consistente en todos los entornos y mejorando la gestión empresarial, especialmente en las prácticas DevOps. Reduce los costes de infraestructura y mejoran la eficiencia del desarrollo, apoyando el despliegue continuo y el control de versiones.
- Los contenedores ofrecen un enfoque versátil y eficiente en recursos para el despliegue de software.
- Mejoran la seguridad y el aislamiento en comparación con los métodos tradicionales de virtualización.
Construir contenedores están necesario si te desea Comienza usando Kubernetes (K8s) u opciones similares. La única forma de utiliza Kubernetes, que gestiona la orquestación de contenedores en servidores, están introduciendo código en un contenedor.
Por suerte, hay mucha ayuda construida en torno a empaquetar el código en un contenedor—es así de esencial. Entonces, ¿qué es exactamente un contenedor? Vamos a descubrirlo. En este artículo, presentaré la contenedorización, incluyendo:
- ¿Qué son los contenedores
- Cómo funcionan
- Contenedores vs máquinas virtuales
- Beneficios empresariales
- Tecnologías de contenedores
- Cómo Obtén
- Y más
¿Qué es un contenedor?
Los contenedores son formas de empaquetar código y permitir que se ejecute en cualquier máquina.
El código puede estar en diferentes lenguajes, depender de otro software, instalar paquetes desde un repositorio de internet y requerir requisitos específicos del sistema (como el tamaño de la memoria) para funcionar correctamente. En la contenedorización, los contenedores contienen todos los elementos necesarios para ejecutar un programa. El contenedor ordena a su propio entorno de ejecución incluir elementos que permiten que un programa sea ejecutable, como:
- Archivos
- Bibliotecas
- Variables de entorno
Esto es diferente de los enfoques tradicionales de virtualización, donde cada aplicación requiere un sistema operativo o una máquina virtual (VM) completa para ejecutarse en el servidor. Los contenedores son versátiles porque pueden funcionar en:
- Servidores bare-metal
- Servidores en la nube
- Una sola máquina virtual en un servidor.
Así que, en lugar de cocinar en la cocina de otra persona, los contenedores permiten a los programadores Crea sus propias cocinas en servidores dondequiera que vayan. Los servidores son simplemente ordenadores personales sin todos los adornos de un diseño elegante y un sistema operativo sofisticado para Haz el servidor fácil de usar. En cuanto al rendimiento del producto, la contenedorización asegura:
- Fiabilidad
- Consistencia
Cómo funcionan los contenedores
Los contenedores instalan todos los archivos previos necesarios para ejecutar el software disponible.
¿Recuerdas comprar software en cajas en Fry's Electronics? (☹) En la parte trasera de la caja normalmente había especificaciones del software que decían que este software solo funcionaría en máquinas que ejecuten Mac o Windows. Luego, había especificaciones sobre que el software necesitaría un mínimo de 512 MB de RAM y 2GB de espacio disponible en disco duro para funcionar. Las aplicaciones más complicadas podrían requerir una tarjeta gráfica con memoria mínima.
En cierto modo, las especificaciones en la parte trasera de los paquetes de software eran la forma para que los desarrolladores limitaran el riesgo de fallos de las aplicaciones en los dispositivos del usuario, especialmente cuando despliegan su aplicación ampliamente en muchos tipos de sistemas informáticos. Hoy en día, los desarrolladores de aplicaciones pueden:
- Sé más preciso
- Utiliza ordenadores remotos
- Indica exactamente qué tipo de sistema debe funcionar su software
De hecho, con la contenedorización, los desarrolladores pueden construirlo ellos mismos para asegurar que el software funcione y no falle.
En la contenedorización, son dos archivos de especificaciones que Define qué software están necesarios en una máquina y qué hardware es necesario para que la máquina funcione. Estos son los:
- Dockerfile , que controla el entorno de ejecución y la instalación de los paquetes necesarios para ejecutarse de forma adecuada.
- Archivo Yaml , que controla el hardware y los requisitos de seguridad de red
Además de entender el marco, también te necesario comprender los resultados. Después de están creado un contenedor, este forma una imagen. Una imagen resulta del conjunto completo de componentes de ejecución en un solo contenedor. Una vez que el código ha sido contenedorizado y la imagen están creada, puede desplegarse en un host elegido. Estos pueden ser:
- Ejecuta localmente en el ordenador de cada persona.
- Desplegado en máquinas en la nube.
Contenedorización vs virtualización de servidores
Cuando la gente habla de virtualización de servidores, normalmente son a una máquina virtual. Una máquina virtual crea una capa de hipervisor entre el sistema operativo, las aplicaciones y los servicios, la memoria, el almacenamiento y similares.
Esta capa actúa como su propia máquina virtual, creando un entorno autónomo para ejecutar una sola aplicación. Cada aplicación que están virtualizada consume su propia versión de un sistema operativo. Para desarrollarse en un entorno virtual, te necesitaría:
- Disponen de varias versiones disponibles de sistemas operativos
- Compra varias licencias
Por otro lado, los contenedores permiten que múltiples aplicaciones se ejecuten en una sola máquina virtual. Esto limita el número de licencias de software en las que una empresa empresarial debe invertir para desarrollar en un entorno de contenedores. Lo hacen compartiendo núcleos del sistema operativo, en lugar de exigir los propios. Por esta razón, desarrollar en un contenedor están un enfoque más ingenioso, tanto financiero como computacional, para el desarrollo de software empresarial.
(Entiende las diferencias entre contenedores y máquinas virtuales.)
Seguridad
YAML
Beneficios empresariales de la contenedorización
Los contenedores son la solución a muchos problemas cuando los equipos son desarrollando código:
- Diferentes bases de código
- Compartiendo código entre diferentes sistemas
- Compartiendo código en diferentes entornos de ejecución
- Seguridad
- Versión
Ahora, veamos los principales beneficios de desplegar software en un motor de contenedores.
Tecnología de plataforma multinube
Uno de los beneficios más deseables de usar la contenedorización como método de virtualización están que puede operar en la nube. Muchos motores soportan plataformas multi-nube para que puedan ejecutarse dentro de plataformas como:
- Instancias Amazon EC2
- Instancias de Google Compute Engine
- Servidores en rackspace
- VirtualBox
El código de paquete de los contenedores debe ser enviado por cualquier transportista. No importa quién lo están manejando, lo que da al cliente más poder para elegir entre diferentes proveedores.
Pruebas y despliegue continuo
La conteneorización ofrece a las empresas la flexibilidad de crear, probar y publicar imágenes para desplegarlas en múltiples servidores.
Aunque la consistencia entre entornos a veces fluctúa, especialmente en lo que respecta a los ciclos de desarrollo y lanzamiento, proveedores de contenedores como Docker son facilitar la coherencia sin importar en qué entorno te despliegues tu imagen. Por eso la contenedorización están una opción tan buena para las organizaciones que usan DevOps para acelera la entrega de aplicaciones.
(Explora las prácticas DevOps de despliegue continuo y pruebas continuas.)
Control de versiones
Para seguir siendo competitivas, las plataformas contenedores deben garantizar el control de versiones.
Docker puso el listón alto al ofrecer un control de versiones simplificado que facilita volver a una imagen anterior si tu entorno falla. Los competidores han seguido el ejemplo, haciendo que este método de virtualización sea bueno para desarrolladores que necesitan el control de versiones al alcance de la mano.
Aislamiento
Un componente clave de la virtualización están el aislamiento, el acto de segregar recursos para cada aplicación. Los motores contenedores rinden mejor que las máquinas virtuales en cuanto a aislamiento. Pero la elección de utilizar uno u otro requiere consideración, y depende del caso de utiliza.
En general, comparados con las máquinas virtuales, los contenedores tienen:
- Tiempos de arranque más rápidos
- Menos redundancia
- Mejor distribución de recursos
Cuando Docker debutó, la seguridad era escasa. Con el tiempo, sin embargo, Docker ha solucionado muchos de los problemas principales, como ejecutar todos los contenedores de la carpeta raíz.
Los proveedores de contenedores ofrecen diferentes formas de garantizar la seguridad, pero hay algo que están consistente en todos los aspectos. Si uno de tus contenedores es hackeado, las aplicaciones que se ejecutan en otros contenedores no son susceptibles.
Aun así, los contenedores individuales son susceptibles a ataques, pero existen formas de protegerlos, mediante buenas prácticas y servicios de monitorización de terceros.
(Sigue estas mejores prácticas de seguridad para Docker.)
Versátil y eficiente en recursos
A la mayoría de los desarrolladores son los contenedores porque son un enfoque versátil y eficiente en recursos para el desarrollo de software. Las empresas pueden asegurarse de que se cubran todas sus necesidades de desarrollo y despliegue mientras conservan espacio en los servidores, ya sea físico, virtual o en la nube.
Comparado con las máquinas virtuales, contenedores:
- Utiliza menos espacio, normalmente medido en MB en lugar de GB
- Puede estar restringido a consumir una cantidad mínima de recursos
Portabilidad
Dado que las aplicaciones contenedor pueden ejecutarse en servidores en la nube, son generalmente más accesibles que otras aplicaciones. La programación en contenedores ofrece un enfoque portátil de desarrollo de software.
Reproducibilidad
A DevOps le encanta la contenedorización, especialmente porque ofrece el beneficio de la reproducibilidad. Los componentes de cada contenedor permanecen estáticos e inmutables desde el código hasta el despliegue. Crea una única imagen que puede reproducirse en otros contenedores una y otra vez.
Los contenedores soportan la cultura DevOps
Para cualquier entorno de desarrollo que requiera portabilidad y versatilidad, DevOps y contenedores ofrecen una solución fantástica. Esta adopción cada vez más generalizada está impulsada por dos tendencias clave:
- Las empresas siguen adoptando la tecnología en la nube de forma generalizada, permitiéndote gestionar operaciones en la palma de la mano.
- El crecimiento continuo en la adopción de proveedores como servicio que empaquetan servicios en la nube para simplificar las operaciones empresariales y Reduce costes.
Mientras más empresas navegan por las complicadas aguas de asegurarse de que sus recursos en la nube son personalizados, integrados, automatizados y funcionen como deben, la necesidad de profesionales DevOps cualificados se ha disparado. Con más profesionales DevOps, suele producirse un cambio cultural, en el que ocurren dos cosas:
- Las solicitudes son cada vez más accesibles.
- Las empresas buscan soluciones innovadoras para mitigar el rápido crecimiento.
Por último, los equipos y empleados remotos aumentan la demanda de portabilidad. Trabajan desde ubicaciones remotas con acceso a internet, a menudo en zonas horarias y horarios fijos, para que sus aportaciones puedan llegar en cualquier momento.
La contenedorización ofrece exactamente lo que son buscan: un paquete para software que se distribuye conjuntamente. Las contribuciones pueden realizarse en cualquier momento. Los contenedores ofrecen un rendimiento consistente a través de zonas horarias y dispositivos.
(Conoce más sobre cómo gestionar código y contenedores).
Sistemas de contenedores
Varios servicios ayudan a orquestar contenedores, en la nube en entornos Kubernetes o en instancias de servidor único más tradicionales. Aquí tienes un breve vistazo a algunas opciones populares.
Docker & Kubernetes
La plataforma más utilizada están Docker, un sistema de contenedores de código abierto basado en runC. Las imágenes de Docker funcionan en varias plataformas de servicio, lo que las hace más versátiles que algunas de sus competidoras.
La funcionalidad básica de Docker es la siguiente:
Una práctica recomendable emergente están utilizar Docker y Kubernetes juntos. Aunque son tecnologías distintas, integrar K8s y Docker crea un mecanismo de aislamiento que te permite aumentar los recursos del contenedor de forma más eficiente.
CoreOS (rkt)
El mayor competidor de Docker, CoreOS'rkt (pronunciado CoreOS "rocket") están un framework de bajo nivel que utiliza sistemas para Crear aplicaciones fundamentales. Está diseñado como el motor de contenedores que impulsa Google Kubernetes.
Google Kubernetes (Cloud Run, GKE y GCE)
Google Kubernetes tiene su propio motor de contenedores, rkt, pero también es una comunidad donde los usuarios pueden ejecutar otros motores populares. Es un entorno anfitrión de código abierto para crear bibliotecas de aplicaciones para compartir o desarrollar.
Kubernetes están una buena opción portátil, ya que ofrece un servidor en la nube completo accesible en cualquier lugar.
Amazon AWS
AWS ofrece Backend-as-a-Service (BaaS) que incluye una oferta de Containers-as-a-Service (CaaS) a sus clientes. Además, es un host muy utilizado para quienes buscan desplegar imágenes Docker. Al igual que Kubernetes, AWS ofrece la portabilidad de la computación en la nube.
Fundición de Nubes
Garden de Cloud Foundry es una opción de código abierto que ofrece la contenedorización como parte de sus opciones Platform-as-a-Service (PaaS). Garden están el motor de contenedores. Cloud Foundry están el anfitrión para desarrollar, probar y desplegar aplicaciones portátiles en un servidor en la nube.
Empezando con los contenedores
¿Listo para probar los contenedores por ti mismo? Te explicaré te el proceso.
Archivo de requisitos
Aquí son comandos para generar una lista de todos los paquetes instalados en un dispositivo. Presumiblemente, el código ha sido escrito en un entorno y compila bien.
- Obtén una lista de todos los paquetes instalados de los que depende tu software, sus dependencias.
- Copia este archivo a otra máquina.
- Instala los paquetes en la máquina para que tenga todo lo necesario para funcionar.
A continuación son comandos tanto para Obtén la lista de paquetes como para instalar la lista en otra máquina. Cuando un contenedor se inicia en un servidor, tendrá que ejecutar estos comandos para instalar el software en el servidor en el que acaba de aterizar.
Estos son ejemplos para Ruby y Python. Estos pasos pueden encontrarse y repetirse para cualquier lenguaje de ordenador.
Para Ruby
Para Python
Get all python packages in your environment:
pip freeze > requirements.txt
Install python requirements on a machine:
pip3 install -r requirements.txt
Para Ruby
Put lists of gems in a file:
xargs gem unpack < $LISTNAME
Build gems without internet connection:
xargs -I gemname gem build gemname/gemname.gemspec < $LISTNAME
Build gems with internet connection:
xargs gem install < $LISTNAME
(Sigue este excelente tutorial para poner código Ruby en un contenedor Docker.)
Código Docker & Dockerfile
Para Docker, el Dockerfile está imprescindible, pero su tipo se ha repetido en otros registros de contenedores como el Container Registry de Google.
Cosas importantes que aprendí usando Docker:
- Utiliza imágenes Docker existentes para Comienza y luego modifíalas.
- Mira el tamaño de la imagen de Docker.
- Es posible construir una imagen docker que descargue todos los paquetes, y luego copiar esa imagen a otra imagen para ahorrar espacio. (A veces, cuando son descargados e instalados paquetes, los datos están duplicados cada vez que se descargan en zip y se extraen.)
El Dockerfile están un conjunto de instrucciones para indicar al contenedor qué hacer cuando se construye, lo cual ocurre justo antes de que se están desplegado.
El Dockerfile utiliza una combinación de comandos FROM, RUN, WORKDIR, COPY, RUN, CMD con entradas normales de línea de comandos después. Lo siguiente están un simple Dockerfile que:
- Construye un contenedor a partir de una imagen de 12 alpinos.
- Ejecuta un comando en Python.
- Copia todo desde el directorio al contenedor bajo el directorio /app.
- Instala todos los requisitos.
- Ejecuta el nodo de comando, que está relevante para algo dentro de la propia aplicación.
‘’’
FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN pip3 install -r requirements.txt
CMD ["node", "src/index.js"]
‘’’
(Ve la documentación de Docker para más detalles.)
El archivo YAML es un archivo de configuración que indica a los servidores Kubernetes exactamente cuáles son los requisitos del contenedor para ejecutarse. Si tú has trabajado con K8s, te familiarizarás ya con YAML.
El archivo YAML especifica si el contenedor necesita:
- 256 MB o 8 GB de memoria
- Un volumen adjunto para datos
- Cuántos procesos puede ejecutar
- Las mediciones de seguridad
- Y, de verdad, mucho más
Abreviatura de 'another markup language again' o 'YAML ain't markup language', YAML están un lenguaje de serialización que es muy legible. Es un poco como JSON, solo para almacenar datos. Aunque puede usarse para muchas cosas, se está empleado comúnmente para archivos de configuración, como el archivo de configuración al contenerizar código.
Nick Chase con Marantis desglosa aún más el YAML. Aquí solo he copiado cómo acaba siendo un YAML.
‘’’
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rss-site
labels:
app: web
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
- name: rss-reader
image: nickchase/rss-php-nginx:v1
ports:
- containerPort: 88
‘’’
Cuándo utilizar los recipientes
Los contenedores son perfectos para cualquier empresa u organización que están buscando mejorar la gestión digital de empresas mediante soluciones que ofrezcan fiabilidad, portabilidad, versatilidad y reproducibilidad en un entorno virtual.
Las empresas que avanzan hacia una cultura DevOps deben introducir los contenedores con cuidado. Se son recomendados los siguientes pasos al introducir contenedores:
- Evalúa las necesidades del negocio. Practica la gestión de contenedores a pequeña escala y Ve cómo encaja en el modelo y la cultura de negocio.
- Pilota contenedores con tu equipo de DevOps.
- Pasa a la fase de Producción y despliega contenedores en tu infraestructura.
Para embarcarse en la infraestructura de Kubernetes se requieren dos habilidades básicas
- Contenedorizar tu código.
- Aprender Kubernetes (tendré que conoce ese kubectl—por suerte, nuestra Guía de K8s te cubre)
Kubernetes orquesta el despliegue de contenedores en servidores, aunque son otras opciones también. Si no son hay contenedores, no está nada que desplegar.
La razón por la que existen las empresas de servicios en la nube están simplemente porque gestionar servidores están costoso desde el punto de vista de la gestión y costoso desde el punto de vista del equipo. Aunque ellos gestionan la mayoría de los problemas de la nube, están te Haz tus contenedores y desplegarlos en su servicio.
Lecturas relacionadas
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.