No se han encontrado resultados

Su búsqueda no coincide con ningún resultado.

Le sugerimos que pruebe lo siguiente para poder encontrar lo que está buscando:

  • Verifique la ortografía de su búsqueda de palabras clave.
  • Utilice sinónimos para la palabra clave que escribió; por ejemplo, intente con “aplicación” en lugar de “software”.
  • Pruebe con una de las búsquedas populares que se muestran a continuación.
  • Comience una nueva búsqueda.
Tendencias de preguntas

Contenedores de Docker y servicios en la nube de contenedores

Un contenedor es un formato de empaquetado que empaqueta todo el código y las dependencias de una aplicación en un formato estándar que le permite ejecutarse de manera rápida y confiable en todos los entornos informáticos. Un contenedor Docker es un contenedor ejecutable, independiente, liviano y popular que incluye todo lo necesario para ejecutar una aplicación, incluidas bibliotecas, herramientas del sistema, código y tiempo de ejecución. Docker también es una plataforma de software que permite a los desarrolladores crear, probar e implementar aplicaciones en contenedores rápidamente.

Containers as a Service (CaaS) o los servicios de contenedores son servicios en la nube administrados que administran el ciclo de vida de los contenedores. Los servicios de contenedores ayudan a orquestar (iniciar, detener, escalar) el tiempo de ejecución de los contenedores. Con los servicios de contenedores, usted puede simplificar, automatizar y acelerar el ciclo de vida de implementación y desarrollo de su aplicación.

Los servicios de contenedores y Docker han experimentado una rápida adopción y han tenido un gran éxito en los últimos años. Partiendo de una tecnología de código abierto casi desconocida y bastante técnica en 2013, Docker evolucionó y se convirtió en un entorno de tiempo de ejecución estandarizado que ahora es oficialmente compatible con muchos productos empresariales de Oracle.

¿Quién usa Docker?

Docker es un marco de desarrollo de aplicaciones abierto que está diseñado para beneficiar a DevOps y a los desarrolladores. Con Docker, los desarrolladores pueden crear, empaquetar, enviar y ejecutar aplicaciones fácilmente como contenedores livianos, portátiles y autosuficientes, que pueden ejecutarse prácticamente en cualquier lugar. Los contenedores permiten a los desarrolladores empaquetar una aplicación con todas sus dependencias e implementarla como una sola unidad. Al proporcionar contenedores de aplicaciones preconstruidos y autosuficientes, los desarrolladores pueden centrarse en el código de la aplicación y su uso sin preocuparse por el sistema operativo subyacente o el sistema de implementación.

Además, los desarrolladores pueden aprovechar miles de aplicaciones de contenedor de código abierto que ya están diseñadas para ejecutarse dentro de un contenedor de Docker. Para los equipos de DevOps, Docker se presta a cadenas de herramientas de desarrollo e integración continua y reduce las limitaciones y la complejidad necesarias dentro de la arquitectura de su sistema para implementar y administrar las aplicaciones. Con la introducción de los servicios en la nube de orquestación de contenedores, cualquier desarrollador puede desarrollar aplicaciones en contenedores a nivel local en su entorno de desarrollo y, luego, mover y ejecutar esas aplicaciones en contenedores en producción en servicios en la nube, como los servicios administrados de Kubernetes.

Comparación entre Docker y Kubernetes

Los contenedores de Linux existen desde 2008, pero no fueron muy conocidos hasta que aparecieron los contenedores de Docker en 2013. Con su aparición, explotó el interés en el desarrollo y la implementación de aplicaciones en contenedores. A medida que la cantidad de aplicaciones en contenedores creció para abarcar cientos de contenedores implementados en múltiples servidores, operarlas se volvió más complejo. ¿Cómo coordina, escala, administra y programa cientos de contenedores? Aquí es donde Kubernetes puede ayudar. Kubernetes es un sistema de orquestación de código abierto que le permite ejecutar sus cargas de trabajo y contenedores Docker. Le ayuda a administrar las complejidades operativas al escalar múltiples contenedores implementados en varios servidores. El motor de Kubernetes organiza automáticamente el ciclo de vida del contenedor y distribuye los contenedores en la infraestructura de alojamiento. Kubernetes puede aumentar o reducir rápidamente los recursos según la demanda. Aprovisiona, programa, elimina y supervisa de forma continua el estado de los contenedores.

Conceptos básicos de Docker

Los conceptos centrales de Docker son imágenes y contenedores. Una imagen de Docker contiene todo lo necesario para ejecutar su software: el código, un tiempo de ejecución (por ejemplo, Java Virtual Machine (JVM), controladores, herramientas, scripts, bibliotecas, implementaciones) y más.

Un contenedor de Docker es una instancia en ejecución de una imagen de Docker. Sin embargo, a diferencia de la virtualización tradicional con un hipervisor tipo 1 o tipo 2, un contenedor Docker se ejecuta en el núcleo del sistema operativo host. Dentro de una imagen de Docker no hay un sistema operativo separado, como se ilustra en la figura 1.

imagen básica de docker
Figura 1

Comparación entre aislamiento y virtualización

Cada contenedor Docker tiene su propio sistema de archivos, su propia pila de red (y, por lo tanto, su propia dirección IP), su propio espacio de proceso y limitaciones de recursos definidas para la CPU y la memoria. Dado que un contenedor Docker no tiene que iniciar un sistema operativo, se inicia de inmediato. Docker es aislamiento, es decir, separa los recursos de un sistema operativo host, a diferencia de la virtualización que proporciona un sistema operativo invitado por encima del sistema operativo host.

Comparación entre VM y Kubernetes: infraestructura de implementación
imagen de sistema de archivos incremental
Figura 2

Sistema de archivos incremental

El sistema de archivos de una imagen de Docker tiene capas, con semántica de copia en escritura. Esto habilita la herencia y la reutilización, ahorra recursos en el disco y habilita la descarga incremental de imágenes.

Como se ilustra en la figura 2, una imagen de Docker con una implementación de WebLogic podría basarse en una imagen con un dominio de Oracle WebLogic Server, que podría basarse en una imagen de WebLogic, que se basa en una imagen de Java Development Kit (JDK) que, a su vez, se basa en una imagen base de Oracle Linux.

Registro de Docker

Si bien las imágenes de Docker son fáciles de construir, y los desarrolladores adoran la simplicidad y portabilidad de las imágenes de Docker, rápidamente descubrieron que administrar miles de imágenes de Docker es muy desafiante. Docker Registry aborda este desafío. Docker Registry es una forma estándar de almacenar y distribuir imágenes de Docker. El Registro es un repositorio de código abierto bajo la licencia permisiva de Apache.

Docker Registry también ayuda a mejorar el control de acceso y la seguridad de las imágenes de Docker almacenadas en su repositorio. Administra la distribución de imágenes y también se puede integrar con los flujos de trabajo de desarrollo de aplicaciones. Los desarrolladores pueden configurar su propio Registro de Docker o utilizar un servicio de registro de Docker alojado, como Docker Hub, Oracle Container Registry, Azure Container Registry, etc.

Docker Hub es un registro de Docker alojado administrado por Docker. Docker Hub tiene más de 100.000 imágenes de contenedores de proveedores de software, proyectos de código abierto y la comunidad. Docker Hub contiene software y aplicaciones de repositorios oficiales, como NGINX, Logstash, Apache HTTP, Grafana, MySQL, Ubuntu y Oracle Linux.

Al iniciar un contenedor, Docker extraerá de manera automática y predeterminada la imagen correspondiente del Docker Hub público si no está disponible a nivel local. Además, también puede crear sus propias imágenes y enviarlas a Docker Hub en un repositorio público o privado.

Figura 3: Captura de pantalla de Docker Registry
Figura 3

Docker como un tiempo de ejecución de microservicios

La idea de cortar aplicaciones monolíticas en fragmentos más pequeños de microservicios atrae mucha atención de los desarrolladores de software estos días.

Los microservicios se implementan de forma independiente como un proceso, utilizan protocolos livianos para comunicarse entre sí y cada servicio es propietario de sus datos [7]. Dado que los microservicios siguen un enfoque de gobernanza descentralizado, requieren una cantidad bastante alta de automatización de la infraestructura, pruebas automatizadas, pipelines de CD completamente automatizadas y equipos de DevOps ágiles y capacitados.

Todavía hay mucha discusión sobre este estilo arquitectónico; sin embargo, sería ingenuo suponer que una aplicación descompuesta en microservicios se puede operar simplemente como un conjunto de procesos. Para nombrar solo algunos requisitos, un microservicio debe ser independiente del host y estar aislado en el nivel del sistema operativo. Debe ejecutarse dentro de sus límites de recursos, debe poder aumentarse y reducirse, reiniciarse si falla, así como detectarse y conectarse a otros microservicios mediante una capa de red definida por el software.

Por lo tanto, ejecutar un microservicio en un contenedor de Docker lo coloca en un excelente punto de partida para lograr la mayoría de estos objetivos.

Docker: dos dimensiones clave

Docker cambia la manera en que creamos, enviamos y ejecutamos software en dos dimensiones diferentes:

  • Mejora el proceso para obtener aplicaciones de manera confiable desde el desarrollo hasta la producción.
  • Proporciona un formato de imagen estándar para pasar del entorno local a la nube.

Ambas dimensiones se explican con más detalle en los siguientes párrafos.

Imagen de Docker: desde el desarrollo hasta la producción

La creación de una imagen de Docker con todas sus dependencias resuelve el problema “funcionó para mí en mi máquina de desarrollo”. La idea clave es que una imagen de Docker se crea automáticamente mediante una canalización de compilación a partir de un repositorio de código fuente, como Git, y se prueba inicialmente en un entorno de desarrollo. Esta imagen inmutable se almacenará en un registro de Docker.

Como se muestra en la Figura 4, la misma imagen se utilizará para más pruebas de carga, pruebas de integración, pruebas de aceptación, entre otras. En todos los entornos, se utilizará la misma imagen. Las diferencias ambientales específicas pequeñas pero necesarias, como una URL JDBC para una base de datos de producción, se pueden introducir en el contenedor como variables de entorno o archivos.

captura de pantalla de imagen de docker
Figura 4

Las estadísticas muestran que el 65 % de todos los casos de uso actuales de Docker están en desarrollo y el 48 % usa Docker para la integración continua [5].

Del entorno local a la nube

Docker cambió la adopción de las nubes públicas: Por un lado, con una imagen de Docker, por primera vez en la historia, existe un formato de paquete común que se puede ejecutar tanto a nivel local como en todos los principales proveedores de nube. Los contenedores Docker se ejecutan en mi computadora portátil de la misma manera que se ejecutan en Oracle Cloud.

Por otro lado, dado que los contenedores Docker se ejecutan en todas las nubes públicas principales, contribuyen en gran medida a superar un antiguo prejuicio contra las nubes públicas: la dependencia de un proveedor. Todos los proveedores de nube principales ahora ofrecen Docker como una PaaS.

Versiones de Docker: madurez de la tecnología subyacente

El ritmo con el que se crean nuevas versiones de Docker es mucho más rápido que el del software empresarial tradicional. En ocasiones, el alto ritmo de los lanzamientos de versiones de Docker, junto con la novedad del proyecto Docker, genera inquietudes acerca de su seguridad y estabilidad.

Mientras que Docker y su línea de comandos, el Docker Deamon, su API y las herramientas como Docker Swarm, Docker Machine y Docker Compose solo llevan evolucionando los últimos tres años, las características de núcleo subyacentes llevan estando casi una década disponibles en todos los núcleos Linux.

Un ejemplo destacado de uno de los primeros en adoptar la tecnología de contenedores es Google. Google utilizaba contenedores de Linux incluso antes de que existiera Docker. Además, Google ejecuta todo en un contenedor. Se estima que Google arranca 2000 millones de contenedores por semana [3].

Historial de Cgroups y espacios de nombres

Las características subyacentes del núcleo Linux que usa Docker son los Cgroups y los espacios de nombres. En 2008, los Cgroups se introdujeron en el núcleo Linux a raíz del trabajo realizado previamente por los desarrolladores de Google [1]. Los Cgroups limitan y contabilizan el uso de recursos de un conjunto de procesos del sistema operativo.

El núcleo Linux utiliza el espacio de nombres para aislar entre sí los recursos del sistema en los procesos. El primer espacio de nombres, es decir, el espacio de nombres Mount, se introdujo ya en 2002.

Servicios en la nube de contenedores

La primera parte de este artículo explica algunos conceptos importantes de Docker. Sin embargo, en un entorno de producción no basta con ejecutar una aplicación en un contenedor Docker.

A la hora de configurar y operar un entorno de producción se requiere hardware para ejecutar los contenedores. Es necesario instalar, actualizar y revisar software como Docker, junto con los repositorios y administradores de clústeres. En caso de que varios contenedores Docker se comuniquen entre hosts, se debe crear una red. Los contenedores agrupados deben reiniciarse si fallan. Además, implantar un conjunto de contenedores vinculados entre sí debería resultar tan sencillo como hacerlo con una única instancia de aplicación lógica. Un ejemplo podría ser un equilibrador de carga, algunos servidores web, algunas instancias de Oracle WebLogic Server con un servidor de administración, un servidor administrado y una base de datos. Para administrar aplicaciones en contenedores a escala se requiere un sistema de orquestación de contenedores como Kubernetes o Docker Swarm. Implementar, administrar y operar sistemas de orquestación como Kubernetes puede resultar lento y todo un desafío.

Para que los desarrolladores puedan crear aplicaciones en contenedores de forma más sencilla y eficiente, los proveedores de nube ofrecen Container Cloud Services o Containers as a Service (CaaS). Container Cloud Services ayuda a los desarrolladores y equipos de operaciones a optimizar y administrar el ciclo de vida de los contenedores de forma automatizada. Estos servicios de orquestación, generalmente creados con Kubernetes, permiten que los equipos de DevOps administren y operen aplicaciones en contenedores a escala de manera más sencilla. Oracle Container Engine for Kubernetes y Azure Kubernetes Service son dos ejemplos de los servicios administrados de orquestación de contenedores en la nube más conocidos.

Oracle Container Engine for Kubernetes es un servicio totalmente administrado, escalable y de alta disponibilidad que puede utilizar para implementar en la nube sus aplicaciones en contenedores. Utilice Container Engine for Kubernetes (en ocasiones abreviado como OKE) si su equipo de desarrollo desea crear, implementar y administrar con confianza aplicaciones nativas de nube.

Imágenes de Docker de Oracle—A continuación se muestran algunas fuentes para obtener o crear imágenes de Docker para productos Oracle. El repositorio Oracle GitHub para imágenes de Docker contiene archivos de Docker y ejemplos para crear imágenes de Docker para productos comerciales de Oracle y proyectos de código abierto patrocinados por Oracle.

Laboratorio práctico de Docker—Desarrollo en contenedores con Docker

Referencias

  1. Cgroups (Wikipedia)
  2. Espacios de nombres de Linux (Wikipedia)
  3. Google ejecuta TODO en un contenedor, por Jack Clark
  4. Docker Hub alcanza los 5000 millones de extracciones
  5. Evolución de la cadena de suministro del software moderno, encuesta sobre Docker, 2016
  6. ID de documento MOS 2216342.1: Compatibilidad de Oracle DB con Docker
  7. Microservicios, por Martin Fowler
  8. Oracle Container Engine y demostración de registro (3:13)
  9. Documentación de Container Engine for Kubernetes