Joyent ha anunciado recientemente su nuevo servicio de alojamiento de contenedores Docker Triton. Ejecutar contenedores Docker en Triton en lugar de en una plataforma de alojamiento en la nube más tradicional tiene varias ventajas:
- Mejor rendimiento, ya que no hay sobrecarga de virtualización a nivel de hardware. Los contenedores se ejecutan sobre metal desnudo.
- Red simplificada entre contenedores. Cada contenedor obtiene su propia dirección ip privada (y opcionalmente pública).
- Los hosts se abstraen: basta con desplegar en la "nube de contenedores" y no importa en qué host se ejecute el contenedor.
Para más detalles, consulte la charla de Bryan Cantrill sobre Docker y el futuro de los contenedores en la producción.
Vamos a darle una vuelta con un contenedor "hola mundo", y luego con un cluster de servidores Couchbase.
Regístrese para obtener una cuenta Joyent
Siga las instrucciones de inscripción en la página Joyent sitio web.
También tendrá que añadir su clave SSH a su cuenta.
Actualizar el cliente Docker a 1.4.1 o posterior
Compruebe su versión de Docker con:
|
1 2 |
$ docker --versión Docker versión 1.0.1, construya 990021a |
Si estás en una versión anterior a la 1.4.1 (como era mi caso), puedes actualizar Docker mediante el comando instaladores boot2docker.
Configuración de Joyent + Docker
Obtenga el repositorio sdc-docker (sdc == Smart Data Center):
|
1 |
$ git clonar https://github.com/joyent/sdc-docker.git |
Realiza la configuración a través de:
|
1 2 |
$ cd sdc-docker $ ./herramientas/sdc-docker-configuración.sh -k 165.225.168.22 $CUENTA ~/.ssh/$ARCHIVO_CLAVE_PRIVADA |
Sustituya los valores de la siguiente manera:
- $ACCUENTAPuedes conseguirlo iniciando sesión en la interfaz web de Joyent y accediendo al menú Cuenta desde el desplegable de la esquina superior derecha. Busca la opción Nombre de usuario y utilizar ese campo
- $PRIVATE_KEY_FILE: el nombre del archivo donde se almacena su clave privada, normalmente será
id_rsa
Ejecute el comando y debería ver la siguiente salida:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Configuración arriba Docker cliente para COSUDE utilizando: CloudAPI: https://165.225.168.22 Cuenta: Clave: /Inicio/ubuntu/.ssh/id_rsa [..snip..] Escribió certificado archivos a /Inicio/ubuntu/.sdc/docker/ Docker servicio punto final es: tcp://:2376 * * * Éxito. Establecer su medio ambiente como sigue: exportar DOCKER_CERT_PATH=/Inicio/ubuntu/.sdc/docker/ exportar DOCKER_HOST=tcp://:2376 alias docker="docker --tls" Entonces usted debe sea able a ejecute docker info y véase su cuenta nombre 'SDCAccount: ' en el salida. |
Exportar variables de entorno
Como sugiere la salida anterior, copie y pegue los comandos de la salida. He aquí un ejemplo de cómo se verá (pero usted debe copiar y pegar de la salida de su comando, no el fragmento de abajo):
|
1 2 3 |
$ exportar DOCKER_CERT_PATH=/Inicio/ubuntu/.sdc/docker/ $ exportar DOCKER_HOST=tcp://:2376 $ alias docker="docker --tls" |
Docker Hola Mundo
Vamos a crear una imagen docker de Ubuntu que diga hola mundo.
Recuerda, estás ejecutando el cliente Docker en tu estación de trabajo, no en la nube. Aquí tienes un resumen de lo que va a pasar:

Para iniciar el contenedor docker::
|
1 |
$ docker ejecute --rm ubuntu:14.04 echo "Hola mundo Docker, de Joyent" |
Debería ver la siguiente salida:
|
1 2 3 4 |
Imposible a encontrar imagen ubuntu:14.04 localmente Tirando de repositorio biblioteca/ubuntu ... Hola Docker Mundo, de Joyent |
Además, puesto que el --rm el contenedor habrá sido eliminado después de salir. Puede comprobarlo ejecutando docker ps -a. Esto es importante porque los contenedores parados generan gastos en Joyent.
¡Enhorabuena! Has conseguido un contenedor Docker "hola mundo" corriendo en Joyent.
Ejecutar contenedores Couchbase Server
Ahora es el momento de ejecutar Couchbase Server.
Para poner en marcha tres contenedores de Couchbase Server, ejecute:
|
1 2 3 4 |
$ para i en `seq 1 3`; do echo "Iniciando contenedor $i"; exportar contenedor_$i=$(docker ejecute --nombre couchbase-servidor-$i -d -P couchbase/servidor); hecho |
Para confirmar que los contenedores están en funcionamiento, ejecute
|
1 |
$ docker ps |
y deberías ver:
|
1 2 3 4 |
CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES 5bea8901814c couchbase/servidor "couchbase-start" 3 minutos hace Arriba 2 minutos couchbase-servidor-1 bef1f2f32726 couchbase/servidor "couchbase-start" 2 minutos hace Arriba 2 minutos couchbase-servidor-2 6f4e2a1e8e63 couchbase/servidor "couchbase-start" 2 minutos hace Arriba Acerca de a minuto couchbase-servidor-3 |
En este punto tendrás variables de entorno definidas con los ids de contenedor de cada contenedor. Puedes comprobarlo ejecutando
|
1 2 3 4 |
$ echo $contenedor_1 && echo $contenedor_2 && echo $contenedor_3 21264e44d66b4004b4828b7ae408979e7f71924aadab435aa9de662024a37b0e ff9fb4db7b304e769f694802e6a072656825aa2059604ba4ab4d579bd2e5d18d 0c6f8ca2951448e497d7e12026dcae4aeaf990ec51e047cf9d8b2cbdd9bd7668 |
Obtener las direcciones ip públicas de los contenedores
Cada contenedor tendrá asignadas dos direcciones IP:
- Una IP pública, accesible desde cualquier lugar
- Una IP privada, sólo accesible desde contenedores/máquinas en tu cuenta Joyent
Para obtener la IP pública, podemos utilizar el cliente Docker. (para obtener la IP privada, es necesario utilizar las herramientas Joyent SmartDataCenter, que se describe a continuación).
|
1 2 3 |
$ contenedor_1_ip=`docker inspeccionar $contenedor_1 | grep -i Dirección IPA | awk -F: '{print $2}' | grep -oE "b([0-9]{1,3}.){3}[0-9]{1,3}b"` $ contenedor_2_ip=`docker inspeccionar $contenedor_2 | grep -i Dirección IPA | awk -F: '{print $2}' | grep -oE "b([0-9]{1,3}.){3}[0-9]{1,3}b"` $ contenedor_3_ip=`docker inspeccionar $contenedor_3 | grep -i Dirección IPA | awk -F: '{print $2}' | grep -oE "b([0-9]{1,3}.){3}[0-9]{1,3}b"` |
Ahora tendrás las direcciones IP públicas de cada contenedor definidas en variables de entorno. Puedes comprobar que ha funcionado mediante:
|
1 2 3 4 |
$ echo $contenedor_1_ip && echo $contenedor_2_ip && echo $contenedor_3_ip 165.225.185.11 165.225.185.12 165.225.185.13 |
Conectarse a Couchbase Web UI
Abre tu navegador a $container_1_ip:8091 y deberías ver la pantalla de bienvenida de Couchbase:

En este punto, es posible configurar el cluster yendo a la Web UI de cada nodo de Couchbase y siguiendo el Asistente de Configuración. Sin embargo, en caso de que quieras automatizar esto en el futuro, vamos a hacerlo a través de la línea de comandos.
Configurar el primer nodo Couchbase
Elijamos arbitrariamente contenedor_1 como primer nodo del clúster. Este nodo es especial en el sentido de que otros nodos se unirán a él.
El siguiente comando realiza estas operaciones:
- Establece el nombre de usuario y la contraseña del administrador como Administrador / contraseña (debería cambiarlo).
- Establece el tamaño de la RAM del clúster en 600 MB
Nota -u admin -p contraseña debe dejarse como está, ya que es sólo pasar el nombre de administrador por defecto y la contraseña para fines de autenticación.
|
1 2 3 4 5 6 |
$ docker ejecute --rm --punto de entrada=/op/couchbase/papelera/couchbase-cli couchbase/servidor grupo-init -c $contenedor_1_ip --grupo-init-nombre de usuario=Administrador --grupo-init-contraseña=contraseña --grupo-init-ramsize=600 -u admin -p contraseña |
Deberías ver una respuesta como:
|
1 |
ÉXITO: init 165.225.185.11 |
Crear un cubo por defecto
Un bucket es equivalente a una base de datos en los sistemas RDMS típicos.
|
1 2 3 4 5 6 7 8 |
$ docker ejecute --rm --punto de entrada=/op/couchbase/papelera/couchbase-cli couchbase/servidor cubo-crear -c $contenedor_1_ip:8091 --cubo=por defecto --cubo-tipo=couchbase --cubo-puerto=11211 --cubo-ramsize=600 --cubo-réplica=1 -u Administrador -p contraseña |
Deberías verlo:
|
1 |
ÉXITO: cubo-crear |
Añadir 2º nodo Couchbase
Añade el segundo nodo Couchbase con este comando
|
1 2 3 4 5 6 |
$ docker ejecute --rm --punto de entrada=/op/couchbase/papelera/couchbase-cli couchbase/servidor servidor-añada -c $contenedor_1_ip -u Administrador -p contraseña --servidor-añada $contenedor_2_ip --servidor-añada-nombre de usuario Administrador --servidor-añada-contraseña contraseña |
Deberías verlo:
|
1 2 |
ÉXITO: servidor-añada 165.225.185.12:8091 |
Para verificar que se ha añadido, ejecute:
|
1 2 3 |
$ docker ejecute --rm --punto de entrada=/op/couchbase/papelera/couchbase-cli couchbase/servidor servidor-lista -c $contenedor_1_ip -u Administrador -p contraseña |
que debería devolver la lista de nodos de Couchbase Server que ahora forman parte del cluster:
|
1 2 |
ns_1@165.225.185.11 165.225.185.11:8091 saludable activo ns_1@165.225.185.12 165.225.185.12:8091 saludable inactivoAgregado |
Añadir 3er nodo Couchbase y reequilibrar
En este paso lo haremos:
- Añade el tercer nodo Couchbase
- Activar un "reequilibrio", que distribuye los datos del cubo (vacío) por todo el clúster.
|
1 2 3 4 5 6 |
$ docker ejecute --rm --punto de entrada=/op/couchbase/papelera/couchbase-cli couchbase/servidor reequilibrar -c $contenedor_1_ip -u Administrador -p contraseña --servidor-añada $contenedor_3_ip --servidor-añada-nombre de usuario Administrador --servidor-añada-contraseña contraseña |
Deberías verlo:
|
1 2 3 4 5 6 |
INFO: reequilibrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ÉXITO: reequilibrado grupo cerrar fallido en archivo objeto destructor: Error en sys.excepthook: Original excepción fue: |
Si ve ÉXITOEntonces funcionó. (No estoy seguro de por qué se produce el error "close failed in file ..", pero hasta ahora parece que se puede ignorar con seguridad).
Iniciar sesión en la interfaz web
Abra su navegador a $container_1_ip:8091 y debería ver la pantalla de inicio de sesión de Coucbase:

Inicia sesión con:
- Nombre de usuario: Administrador
- Contraseña: contraseña
Y deberías ver los nodos Couchbase:

¡Enhorabuena! Ya tienes un cluster de Couchbase Server funcionando en Joyent Triton.
Desmontaje
Para detener y eliminar los contenedores del servidor Couchbase, ejecute:
|
1 2 |
$ docker stop $contenedor_1 $contenedor_2 $contenedor_3 $ docker rm $contenedor_1 $contenedor_2 $contenedor_3 |
Para volver a comprobar que ya no tiene ningún contenedor en ejecución o en estado detenido, ejecute docker ps -a y debería ver una lista vacía.
Instalación de las herramientas de la COSUDE (opcional)
La instalación de las herramientas Joyent Smart Data Center (SDC) le permitirá obtener una mayor visibilidad de su clúster de contenedores - por ejemplo, ser capaz de ver la IP interna de cada contenedor.
A continuación se explica cómo instalar la suite sdc-tools.
Instalar smartdc
Primero instala NodeJS + NPM
Instala smartdc:
|
1 2 |
npm instale -g smartdc |
Configurar variables de entorno
|
1 2 3 |
$ exportar SDC_URL=https://us-east-3b.api.joyent.com $ exportar SDC_ACCOUNT= $ exportar SDC_KEY_ID=$(ssh-keygen -l -f $INICIO/.ssh/id_rsa.pub | awk '{print $2}') |
Sustituya los valores de la siguiente manera:
- CUENTAPuedes conseguirlo iniciando sesión en la interfaz web de Joyent y accediendo al menú Cuenta desde el desplegable de la esquina superior derecha. Busca la opción Nombre de usuario y utilizar ese campo
Lista de máquinas
Ejecutar sdc-listmachines para listar todos los contenedores ejecutándose bajo tu cuenta Joyent. El resultado debería ser algo parecido a esto:
|
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 |
$ sdc-listmachines [ { "id": "0c6f8ca2-9514-48e4-97d7-e12026dcae4a", "nombre": "couchbase-server-3", "tipo": "smartmachine", "estado": "corriendo", "imagen": "335a8046-0749-1174-5666-6f084472b5ef", "ips": [ "192.168.128.32", "165.225.185.13" ], "memoria": 1024, "disco": 25600, "metadatos": {}, "Etiquetas: {}, "creado": "2015-03-26T14:50:31.196Z", "actualizado": "2015-03-26T14:50:45.000Z", "redes": [ "7cfe29d4-e313-4c3b-a967-a28ea34342e9", "178967cb-8d11-4f53-8434-9c91ff819a0d" ], "conjunto de datos": "335a8046-0749-1174-5666-6f084472b5ef", "primaryIp": "165.225.185.13", "firewall_enabled": falso, "nodo_de_computación": "44454c4c-4400-1046-8050-b5c04f383432", "paquete": "t4-standard-1G" }, ] |
Encontrar la IP privada de una máquina individual
|
1 |
$ sdc-getmachine | json -aH ips | json -aH | egrep "10.|192." |
Referencias
- API nativa de Docker vs API Triton de Joyent
- https://www.joyent.com/blog/container-service-preview
- https://www.joyent.com/blog/docker-bake-off-aws-vs-joyent
- https://github.com/joyent/sdc-docker
- https://github.com/joyent/sdc-docker/blob/master/docs/divergence.md