Este blog explicará cómo empezar con Docker para AWS y desplegar un multi-host Clúster enjambre en Amazon.


Muchas gracias a @friism ¡por ayudarme a depurar lo básico!
boot2docker -> Máquina Docker -> Docker para Mac
¿Está empaquetando sus aplicaciones con Docker y utilizando boot2docker para ejecutar contenedores en desarrollo? Entonces es que vives debajo de una piedra.
Se recomienda encarecidamente actualizar a Máquina Docker para desarrollo/pruebas de contenedores Docker. Encapsula boot2docker y permite crear una o más máquinas virtuales ligeras en su máquina. Cada
VM actúa como un motor Docker y puede ejecutar múltiples contenedores Docker. La ejecución de varias máquinas virtuales le permite configurar multihost Enjambre Docker cluster en tu portátil local fácilmente.
Máquina Docker también es ahora noticia vieja. Anunciada la DockerCon 2016 beta pública de Docker para Mac. Esto significa que cualquiera puede
regístrese en Docker para Mac en docker.com/getdocker y utilizarlo para dev/test de contenedores Docker. Por supuesto, también existe Docker para Windows.
Docker para Mac sigue siendo un host único pero tiene un modo enjambre que permite inicializarlo como un cluster Swarm de un solo nodo.
¿Qué es Docker para AWS?
Así que ahora que está utilizando Docker para Mac para el desarrollo, ¿cuál sería su plataforma de despliegue? DockerCon 2016 también anunciada la beta de Docker para AWS y Azure.
Docker para AWS y Azure inician una flota de motores Docker 1.12 con el modo de enjambre habilitado de fábrica. El modo enjambre significa que los motores Docker individuales forman un enjambre autoorganizado y autorreparable, distribuido por zonas de disponibilidad para garantizar la durabilidad.
Solo se aplican cargos de AWS y Azure, Docker para AWS y Docker para Azure son gratuitos en este momento. Regístrese en Docker para AWS y Azure en beta.docker.com. Tenga en cuenta, que es una disponibilidad restringida en este
tiempo. Una vez activada tu cuenta, recibirás un correo electrónico de invitación como el que se muestra a continuación:

Valores de Docker para AWS CloudFormation
Haga clic en Pila de lanzamiento para ser redirigido a la página de la plantilla de CloudFormation. Tome los valores predeterminados:

Plantilla S3
La URL se rellenará automáticamente y se ocultará aquí. Haga clic en Siguiente. Esta página le permite especificar detalles para la plantilla de CloudFormation:

Se pueden realizar los siguientes cambios:
- Nombre de la plantilla
- Número de director y trabajador nodos, 1 y 3 en este caso. Tenga en cuenta que sólo se puede especificar un número impar de gestores. Por defecto, los contenedores se programan sólo en los nodos trabajadores.
- Tamaño AMI de los nodos maestro y trabajador
- Una clave ya configurada en su cuenta AWS
Haga clic en Siguiente y tomar los valores por defecto:

Haga clic en Siguienteconfirme los ajustes:


Seleccione
Recursos IAM y haga clic en Cree para crear la plantilla de CloudFormation. Tardé unos 10 minutos en crear un clúster de 4 nodos (1 manager + 3 worker):

Para saber más
sobre el clúster se puede ver en EC2 Console:

Detalles del clúster de Docker para AWS Swarm
La pestaña Output de EC2 Console muestra más detalles sobre el cluster:

Para saber más
sobre la agrupación puede obtenerse de dos maneras:
- Inicie sesión en el clúster mediante SSH
- Crear un túnel y luego configurar la CLI local de Docker
Crear conexión SSH a Docker para AWS
Inicie sesión utilizando el comando mostrado en el Valor de la columna Salida pestaña. Crear una conexión SSH como:
|
1 2 3 4 |
ssh -i ~/.ssh/aruncouchbase.pem docker@Docker4AWS-ELB-SSH-945956453.us-west-1.elb.amazonaws.com The authenticity of host 'docker4aws-elb-ssh-945956453.us-west-1.elb.amazonaws.com (52.9.246.163)' can't be established. ECDSA key fingerprint is SHA256:C71MHTErrgOO336qAuLXah7+nc6dnRSEHFgYzmXoGyQ. Are you sure you want to continue connecting (yes/no)? yes |
Tenga en cuenta que aquí estamos utilizando la misma clave que se especificó durante la plantilla de CloudFormation. La lista de contenedores se puede ver usando docker ps mando:
|
1 2 3 4 5 |
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b7be5c7066a8 docker4x/controller:aws-v1.12.0-rc3-beta1 "controller run --log" 48 minutes ago Up 48 minutes 8080/tcp editions_controller 3846a869c502 docker4x/shell-aws:aws-v1.12.0-rc3-beta1 "/entry.sh /usr/sbin/" 48 minutes ago Up 48 minutes 0.0.0.0:22->22/tcp condescending_almeida 82aa5473f692 docker4x/watchdog-aws:aws-v1.12.0-rc3-beta1 "/entry.sh" 48 minutes ago Up 48 minutes naughty_swartz |
Crear túnel SSH a Docker para AWS
Alternativamente, se puede crear un túnel SSH como:
|
1 |
ssh -i ~/.ssh/aruncouchbase.pem -NL localhost:2375:/var/run/docker.sock docker@Docker4AWS-ELB-SSH-945956453.us-west-1.elb.amazonaws.com & |
Configurar DOCKER_HOST:
|
1 |
export DOCKER_HOST=localhost:2375 |
La lista de contenedores puede verse como arriba utilizando docker ps . Además, se puede obtener más información sobre el cluster utilizando información de docker mando:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
docker info Containers: 4 Running: 3 Paused: 0 Stopped: 1 Images: 4 Server Version: 1.12.0-rc3 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 32 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: host bridge overlay null Swarm: active NodeID: 02rdpg58s1eh3d7n3lc3xjr9p IsManager: Yes Managers: 1 Nodes: 4 CACertHash: sha256:4b2ab1280aa1e9113617d7588d97915b30ea9fe81852b4f6f2c84d91f0b63154 Runtimes: runc Default Runtime: runc Security Options: seccomp Kernel Version: 4.4.13-moby Operating System: Alpine Linux v3.4 OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 993.8 MiB Name: ip-192-168-33-110.us-west-1.compute.internal ID: WHSE:7WRF:WWGP:62LP:7KSZ:NOLT:OKQ2:NPFH:BQZN:MCIC:IA6L:6VB7 Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): true File Descriptors: 46 Goroutines: 153 System Time: 2016-07-07T04:03:11.344531471Z EventsListeners: 0 Username: arungupta Registry: https://index.docker.io/v1/ Experimental: true Insecure Registries: 127.0.0.0/8 |
He aquí algunos detalles clave de este resultado:
- 4 nodos y 1 gestor, lo que significa 3 nodos trabajadores
- Todos los nodos están ejecutando Docker Engine versión 1.12.0-rc3
- Cada VM se crea utilizando Alpine Linux 3.4
Escalado de nodos de trabajo en Docker para AWS
Todos los nodos trabajadores están configurados en un Grupo AWS AutoScaling. Manager está configurado en un grupo de AWS AutoScaling independiente.

Este primer
le permite escalar el número de trabajadores utilizando el grupo Autoscaling. Docker unirá o eliminará automáticamente nuevas instancias al Enjambre. Cambiar el recuento de gestores en vivo es no compatibles con esta versión. Seleccione la opción
Grupo AutoScaling para nodos trabajadores para ver los detalles completos sobre el grupo:

Haga clic en Editar para cambiar el número de instancias deseadas a 5, y guarde la configuración haciendo clic en Guardar botón:

Las nuevas instancias tardan unos segundos en aprovisionarse y autoincluirse en el clúster Docker Swarm. El grupo Autoscaling actualizado se muestra como:

Y ahora información de docker muestra la salida actualizada como:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
docker info Containers: 4 Running: 3 Paused: 0 Stopped: 1 Images: 4 Server Version: 1.12.0-rc3 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 32 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: overlay null host bridge Swarm: active NodeID: 02rdpg58s1eh3d7n3lc3xjr9p IsManager: Yes Managers: 1 Nodes: 6 CACertHash: sha256:4b2ab1280aa1e9113617d7588d97915b30ea9fe81852b4f6f2c84d91f0b63154 Runtimes: runc Default Runtime: runc Security Options: seccomp Kernel Version: 4.4.13-moby Operating System: Alpine Linux v3.4 OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 993.8 MiB Name: ip-192-168-33-110.us-west-1.compute.internal ID: WHSE:7WRF:WWGP:62LP:7KSZ:NOLT:OKQ2:NPFH:BQZN:MCIC:IA6L:6VB7 Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): true File Descriptors: 48 Goroutines: 169 System Time: 2016-07-07T04:12:34.53634316Z EventsListeners: 0 Username: arungupta Registry: https://index.docker.io/v1/ Experimental: true Insecure Registries: 127.0.0.0/8 |
Esto muestra que hay un total de 6 nodos con 1 gestor.