Cómo escalar contenedores Docker en producción

139

Así que recientemente descubrí esta increíble herramienta, y dice

Docker es un proyecto de código abierto para crear fácilmente contenedores livianos, portátiles y autosuficientes desde cualquier aplicación. El mismo contenedor que un desarrollador construye y prueba en una computadora portátil puede ejecutarse a escala, en producción, en máquinas virtuales, metal desnudo, clústeres OpenStack, nubes públicas y más.

Digamos que tengo una imagen acoplable que ejecuta Nginx y un sitio web se conecta a una base de datos externa. ¿Cómo escalo el contenedor en producción?

James Lin
fuente

Respuestas:

587

Actualizar: 2019-03-11

En primer lugar, gracias por quienes han votado esta respuesta a lo largo de los años.

Tenga en cuenta que esta pregunta se hizo en agosto de 2013, cuando Docker todavía era una tecnología muy nueva. Desde entonces: Kubernetes se lanzó en junio de 2014, el enjambre Docker se integró en el motor Docker en febrero de 2015, Amazon lanzó su solución de contenedor, ECS, en abril de 2015 y Google lanzó GKE en agosto de 2015. Es justo decir que el panorama de contenedores de producción tiene cambiado sustancialmente.


La respuesta corta es que tendrías que escribir tu propia lógica para hacer esto.

Esperaría que este tipo de característica emerja de los siguientes proyectos, construidos sobre docker y diseñados para soportar aplicaciones en producción:

Actualización 1

Otro proyecto relacionado que descubrí recientemente:

Actualización 2

La última versión de Openstack contiene soporte para administrar contenedores Docker:

Actualización 3

Sistema para gestionar instancias de Docker

Y una presentación sobre cómo usar herramientas como Packer , Docker y Serf para entregar un patrón de infraestructura de servidor inmutable

Actualización 4

Un artículo ordenado sobre cómo conectar juntos los contenedores acoplables con siervo :

Actualización 5

Ejecute Docker en Mesos usando el marco Marathon

Tutorial para desarrolladores de Mesosphere Docker

Actualización 6

Ejecute Docker en Tsuru, ya que admite docker-cluster y despliegue de planificador segregado

Actualización 7

Orquestación de entornos basados ​​en Docker

maestro-ng

Actualización 8

decking.io

Actualización 9

Google kubernetes

Actualización 10

Redhat ha reestructurado su PAAS OpenShift para integrar Docker

Actualización 11

Una biblioteca Docker NodeJS que ajusta la línea de comandos de Docker y la administra desde un archivo json.

Actualización 12

El nuevo servicio contenedor de Amazon permite escalar en el clúster.

Actualización 13

Estrictamente hablando, Flocker no "escala" las aplicaciones, pero está diseñado para cumplir una función relacionada de hacer que los contenedores con estado (¿ejecutan servicios de bases de datos?) Sean portátiles en varios hosts de acopladores:

https://clusterhq.com/

Actualización 14

Un proyecto para crear plantillas portátiles que describen aplicaciones Docker:

http://panamax.io/

Actualización 15

El proyecto Docker ahora aborda la orquestación de forma nativa (Ver anuncio )

Actualización 16

Spotify Helios

Ver también:

Actualización 17

El proyecto Openstack ahora tiene un nuevo proyecto "contenedor como servicio" llamado Magnum:

Muestra mucha promesa, permite la fácil configuración de los marcos de orquestación de Docker como Kubernetes y Docker swarm.

Actualización 18

Rancher es un proyecto que está madurando rápidamente

http://rancher.com/

Interfaz de usuario agradable y fuerte enfoque en las infraestructuras híbridas de Docker

Actualización 19

El proyecto Lattice es una rama de Cloud Foundry para administrar clústeres de contenedores.

Actualización 20

Docker compró recientemente Tutum:

https://www.docker.com/tutum

Actualización 21

Administrador de paquetes para aplicaciones implementadas en Kubernetes .

http://helm.sh/

Actualización 22

Vamp es una plataforma de código abierto y autohospedada para administrar arquitecturas orientadas a (micro) servicios que dependen de la tecnología de contenedores.

http://vamp.io/

Actualización 23

Un programador distribuido, de alta disponibilidad y compatible con el centro de datos

De los muchachos que nos dieron Vagrant y otras herramientas poderosas.

Actualización 24

Solución de alojamiento de contenedores para AWS, de código abierto y basada en Kubernetes

https://supergiant.io/

Actualización 25

Contenedor basado en Apache Mesos alojado ubicado en Alemania

https://sloppy.io/features/#features

Y Docker Inc. también proporciona un servicio de alojamiento de contenedores llamado Docker Cloud

https://cloud.docker.com/

Actualización 26

Jelastic es un servicio PAAS alojado que escala los contenedores automáticamente.

Mark O'Connor
fuente
1
openstack es otro candidato para esta lista
ben schwartz
@benschwartz Muy cierto, pero solo en la última versión.
Mark O'Connor
¡Guau, Dock, yo, tú Rockin Fock! ¡Gracias!
jredd
2
@ MarkO'Connor El mesosphere/mesos-dockerproyecto ha quedado obsoleto y reemplazado por mesosphere/deimos: github.com/mesosphere/deimos
Ross Allen
1
También vale la pena mirarlo, desde Google - github.com/GoogleCloudPlatform/kubernetes
mjsalinger
42

Deis automatiza el escalado de contenedores Docker (entre otras cosas).

Deis (pronunciado DAY-iss) es un PaaS de código abierto que facilita la implementación y administración de aplicaciones en sus propios servidores. Deis se basa en Docker y CoreOS para proporcionar un PaaS ligero con un flujo de trabajo inspirado en Heroku.

Aquí está el flujo de trabajo del desarrollador:

deis create myapp                      # create a new deis app called "myapp"
git push deis master                   # built with a buildpack or dockerfile
deis scale web=16 worker=4             # scale up docker containers

Deis implementa automáticamente sus contenedores Docker en un clúster CoreOS y configura los enrutadores Nginx para enrutar las solicitudes a contenedores Docker en buen estado. Si un host muere, los contenedores se reinician automáticamente en otro host en segundos. Simplemente vaya a la URL del proxy o use deis openpara acceder a su aplicación.

Algunos otros comandos útiles:

deis config:set DATABASE_URL=          # attach to a database w/ an envvar
deis run make test                     # run ephemeral containers for one-off tasks
deis logs                              # get aggregated logs for troubleshooting
deis rollback v23                      # rollback to a prior release

Para ver esto en acción, vea el video del terminal en http://deis.io/overview/ . También puede aprender sobre los conceptos de Deis o saltar directamente a la implementación de su propio PaaS privado .

gabrtv
fuente
3
+1 Estoy viendo tu proyecto con interés. ¡Sigan con el buen trabajo!
Mark O'Connor
19

Puedes probar Tsuru. Tsuru es un PaaS de código abierto inspirado en Heroku, y ya está con algunos productos en producción en Globo.com (brazo de Internet de la mayor compañía de televisión de difusión en Brasil)

Gestiona todo el flujo de una aplicación, desde la creación, despliegue, enrutamiento de contenedores (con hipache) con muchas características agradables como clúster docker, escalado de unidades, despliegue segregado, etc.

Eche un vistazo a nuestra documentación a continuación: http://docs.tsuru.io/

Aquí nuestra publicación que cubre nuestro medio ambiente: http://blog.tsuru.io/2014/04/04/running-tsuru-in-production-scaling-and-segregating-docker-containers/

Magno Torres
fuente
18

Eche un vistazo a Rancher.com : puede administrar múltiples hosts Docker y mucho más.

dublx
fuente
Rancher es de código abierto e incluye una distribución completa de Kubernetes. Proporciona una plataforma para ejecutar muchos clústeres diferentes, administrar la infraestructura y simplifica drásticamente la ejecución de contenedores.
Shannon Williams el
9

Un enfoque sensato para escalar Docker podría ser:

  1. Cada servicio será un contenedor acoplable
  2. Descubrimiento del servicio intracontenedor administrado a través de enlaces ( nueva característica de Docker 0.6.5 )
  3. Los contenedores se desplegarán a través de Dokku
  4. Las aplicaciones se gestionarán a través de Shipyard, que a su vez utiliza hipache

Otro proyecto de fuente abierta de Docker de Yandex:

tommasop
fuente
¿Puedes dar más consejos sobre cómo usar Dokku junto con Shipyard?
djskinner
2

Openshift chicos también crearon un proyecto. Puede encontrar más información aquí , pruebe el contenedor de prueba e información detallada aquí . El único problema es que la solución está centrada en Redhat por ahora :)

Kunthar
fuente
2

Si bien somos grandes admiradores de Deis (deis.io) y lo estamos implementando activamente, hay otras soluciones de implementación de estilo Heroku como PaaS, que incluyen:

Longshoreman de la gente de Wayfinder:

https://github.com/longshoreman/longshoreman

Decker de la gente de CloudCredo, usando CloudFoundry:

http://www.cloudcredo.com/decker-docker-cloud-foundry/

En cuanto a la orquestación directa, el proyecto Centurion de código abierto de NewRelic parece bastante prometedor:

https://github.com/newrelic/centurion

IanBlenke
fuente
1

Panamax: Docker Management para humanos. panamax.io

Fig: entornos de desarrollo rápidos y aislados con Docker. fig.sh

rus1
fuente
Creo que Fig todavía no admite la implementación de múltiples hosts.
lolski
¡Es eso así! ¿Entonces solo ayuda a organizar la configuración de aplicaciones dentro de un solo host?
fatuhoku