A Joyent anunciou recentemente seu novo serviço de hospedagem de contêineres Triton Docker. Há várias vantagens em executar contêineres Docker no Triton em vez de em uma plataforma de hospedagem em nuvem mais tradicional:
- Melhor desempenho, pois não há sobrecarga de virtualização em nível de hardware. Seus contêineres são executados em bare metal.
- Rede simplificada entre contêineres. Cada contêiner recebe seu próprio endereço IP privado (e, opcionalmente, público).
- Os hosts são abstraídos - basta implementar na "nuvem de contêineres" e não importa em qual host o contêiner está sendo executado.
Para obter mais detalhes, confira a palestra de Bryan Cantrill sobre o Docker e o futuro dos contêineres na produção.
Vamos dar uma olhada com um contêiner "hello world" e, em seguida, com um cluster de servidores Couchbase.
Registre-se em uma conta Joyent
Siga as instruções de registro no site Joyent site.
Você também precisará adicionar sua chave SSH à sua conta.
Atualize o cliente Docker para a versão 1.4.1 ou posterior
Verifique sua versão do Docker com:
1 2 |
$ doca --versão Docker versão 1.0.1, construir 990021a |
Se você estiver em uma versão anterior à 1.4.1 (como eu estava), poderá atualizar o Docker por meio do comando instaladores do boot2docker.
Joyent + configuração do Docker
Obtenha o repositório sdc-docker (sdc == Smart Data Center):
1 |
$ git clone https://github.com/joyent/sdc-docker.git |
Realizar a configuração via:
1 2 |
$ cd sdc-doca $ ./ferramentas/sdc-doca-configuração.sh -k 165.225.168.22 $CONTA ~/.ssh/$PRIVATE_KEY_FILE |
Substitua os valores da seguinte forma:
- $ACCOUNTPara obter isso, faça login na interface do usuário da Web da Joyent e acesse o menu Account (Conta) no menu suspenso no canto superior direito. Encontre a seção Nome de usuário e usar esse campo
- $PRIVATE_KEY_FILE: o nome do arquivo em que sua chave privada está armazenada, normalmente será
id_rsa
Execute o comando e você verá o seguinte resultado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Configuração para cima Docker cliente para SDC usando: CloudAPI: https://165.225.168.22 Conta: Chave: /casa/ubuntu/.ssh/id_rsa [..snip..] Escreveu certificado arquivos para /casa/ubuntu/.sdc/doca/ Docker serviço ponto final é: tcp://:2376 * * * Sucesso. Conjunto seu ambiente como segue: exportação CAMINHO_DOCUMENTO_CERTIFICADO=/casa/ubuntu/.sdc/doca/ exportação DOCKER_HOST=tcp://:2376 pseudônimo doca="docker --tls" Então você deve ser capaz para executar 'docker info' e ver seu conta nome 'SDCAccount: ' em o saída. |
Exportar variáveis de ambiente
Como a saída acima sugere, copie e cole os comandos da saída. Aqui está um exemplo de como isso será (mas você deve copiar e colar a partir da saída do comando, não do trecho abaixo):
1 2 3 |
$ exportação CAMINHO_DOCUMENTO_CERTIFICADO=/casa/ubuntu/.sdc/doca/ $ exportação DOCKER_HOST=tcp://:2376 $ pseudônimo doca="docker --tls" |
Docker Hello World
Vamos criar uma imagem do docker do Ubuntu que diz hello world.
Lembre-se de que você está executando o cliente Docker em sua estação de trabalho, não na nuvem. Aqui está uma visão geral do que vai acontecer:
Para iniciar o contêiner do docker::
1 |
$ doca executar --rm ubuntu:14.04 eco "Olá, mundo do Docker, da Joyent" |
Você deverá ver o seguinte resultado:
1 2 3 4 |
Não é possível para encontrar imagem 'ubuntu:14.04' localmente Puxar repositório biblioteca/ubuntu ... Olá Docker Mundo, de Joyent |
Além disso, como o --rm
foi passado, o contêiner terá sido removido após a saída. Você pode verificar isso executando docker ps -a
. Isso é importante porque contêineres parados incorrem em cobranças no Joyent.
Parabéns! Você conseguiu um contêiner Docker "hello world" em execução na Joyent.
Executar contêineres do Couchbase Server
Agora é hora de executar o Couchbase Server.
Para iniciar três contêineres do Couchbase Server, execute:
1 2 3 4 |
$ para i em `seq 1 3`; fazer eco "Iniciando o contêiner $i"; exportação contêiner_$i=$(doca executar --nome couchbase-servidor-$i -d -P couchbase/servidor); feito |
Para confirmar que os contêineres estão ativos, execute:
1 |
$ doca ps |
e você verá:
1 2 3 4 |
CONTAINER ID IMAGEM COMANDO CRIADO STATUS PORTOS NOMES 5bea8901814c couchbase/servidor "couchbase-start" 3 minutos atrás Para cima 2 minutos couchbase-servidor-1 bef1f2f32726 couchbase/servidor "couchbase-start" 2 minutos atrás Para cima 2 minutos couchbase-servidor-2 6f4e2a1e8e63 couchbase/servidor "couchbase-start" 2 minutos atrás Para cima Sobre a minuto couchbase-servidor-3 |
Nesse ponto, você terá variáveis de ambiente definidas com os IDs de cada contêiner. Você pode verificar isso executando:
1 2 3 4 |
$ eco $contêiner_1 &lificador;&lificador; eco $contêiner_2 &lificador;&lificador; eco $contêiner_3 21264e44d66b4004b4828b7ae408979e7f71924aadab435aa9de662024a37b0e ff9fb4db7b304e769f694802e6a072656825aa2059604ba4ab4d579bd2e5d18d 0c6f8ca2951448e497d7e12026dcae4aeaf990ec51e047cf9d8b2cbdd9bd7668 |
Obter endereços IP públicos dos contêineres
Cada contêiner terá dois endereços IP atribuídos:
- Um IP público, acessível de qualquer lugar
- Um IP privado, acessível apenas a partir de contêineres/máquinas da sua conta Joyent
Para obter o IP público, podemos usar o cliente Docker. (para obter o IP privado, você precisa usar as ferramentas Joyent SmartDataCenter, descritas abaixo)
1 2 3 |
$ contêiner_1_ip=`doca inspecionar $contêiner_1 | grep -i Endereço IPA | awk -F: '{print $2}' | grep -oE "b([0-9]{1,3}.){3}[0-9]{1,3}b"` $ container_2_ip=`doca inspecionar $contêiner_2 | grep -i Endereço IPA | awk -F: '{print $2}' | grep -oE "b([0-9]{1,3}.){3}[0-9]{1,3}b"` $ container_3_ip=`doca inspecionar $contêiner_3 | grep -i Endereço IPA | awk -F: '{print $2}' | grep -oE "b([0-9]{1,3}.){3}[0-9]{1,3}b"` |
Agora você terá os endereços IP públicos de cada contêiner definidos nas variáveis de ambiente. Você pode verificar se funcionou via:
1 2 3 4 |
$ eco $contêiner_1_ip &lificador;&lificador; eco $container_2_ip &lificador;&lificador; eco $contêiner_3_ip 165.225.185.11 165.225.185.12 165.225.185.13 |
Conectar-se à interface do usuário da Web do Couchbase
Abra o navegador em $container_1_ip:8091 e você verá a tela de boas-vindas do Couchbase:
Neste ponto, é possível configurar o cluster acessando a interface do usuário da Web de cada nó do Couchbase e seguindo o assistente de configuração. No entanto, caso você queira automatizar isso no futuro, vamos fazer isso pela linha de comando.
Configurar o primeiro nó do Couchbase
Vamos escolher arbitrariamente contêiner_1 como o primeiro nó do cluster. Esse nó é especial no sentido de que outros nós se juntarão a ele.
O comando a seguir executa essas operações:
- Define o nome de usuário e a senha do administrador como Administrator / password (você deve alterar isso)
- Define o tamanho da RAM do cluster como 600 MB
Observação: o -u admin -p password
deve ser deixado como está, uma vez que ele está apenas passando o nome e a senha padrão do administrador para fins de autenticação.
1 2 3 4 5 6 |
$ doca executar --rm --ponto de entrada=/optar/couchbase/caixa/couchbase-cli couchbase/servidor agrupamento-inicial -c $contêiner_1_ip --agrupamento-inicial-nome de usuário=Administrador --agrupamento-inicial-senha=senha --agrupamento-inicial-tamanho de rams=600 -u administrador -p senha |
Você deverá ver uma resposta como:
1 |
SUCESSO: inicial 165.225.185.11 |
Criar um bucket padrão
Um bucket é equivalente a um banco de dados em sistemas RDMS típicos.
1 2 3 4 5 6 7 8 |
$ doca executar --rm --ponto de entrada=/optar/couchbase/caixa/couchbase-cli couchbase/servidor balde-criar -c $contêiner_1_ip:8091 --balde=padrão --balde-tipo=couchbase --balde-porto=11211 --balde-tamanho de rams=600 --balde-réplica=1 -u Administrador -p senha |
Você deveria ver:
1 |
SUCESSO: balde-criar |
Adicionar o segundo nó do Couchbase
Adicione o segundo nó do Couchbase com este comando
1 2 3 4 5 6 |
$ doca executar --rm --ponto de entrada=/optar/couchbase/caixa/couchbase-cli couchbase/servidor servidor-adicionar -c $contêiner_1_ip -u Administrador -p senha --servidor-adicionar $container_2_ip --servidor-adicionar-nome de usuário Administrador --servidor-adicionar-senha senha |
Você deveria ver:
1 2 |
SUCESSO: servidor-adicionar 165.225.185.12:8091 |
Para verificar se ele foi adicionado, execute:
1 2 3 |
$ doca executar --rm --ponto de entrada=/optar/couchbase/caixa/couchbase-cli couchbase/servidor servidor-lista -c $contêiner_1_ip -u Administrador -p senha |
que deve retornar a lista de nós do Couchbase Server que agora fazem parte do cluster:
1 2 |
ns_1@165.225.185.11 165.225.185.11:8091 saudável ativo ns_1@165.225.185.12 165.225.185.12:8091 saudável inactiveAdded |
Adicionar o terceiro nó do Couchbase e rebalancear
Nesta etapa, faremos o seguinte:
- Adicionar o terceiro nó do Couchbase
- Acionar um "rebalanceamento", que distribui os dados do bucket (vazio) pelo cluster
1 2 3 4 5 6 |
$ doca executar --rm --ponto de entrada=/optar/couchbase/caixa/couchbase-cli couchbase/servidor reequilíbrio -c $contêiner_1_ip -u Administrador -p senha --servidor-adicionar $container_3_ip --servidor-adicionar-nome de usuário Administrador --servidor-adicionar-senha senha |
Você deveria ver:
1 2 3 4 5 6 |
INFORMAÇÕES: reequilíbrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SUCESSO: reequilibrado agrupamento próximo falhou em arquivo objeto Destruidor: Erro em sistema.exceção: Original exceção foi: |
Se você vir SUCESSOe depois funcionou. (Não sei ao certo por que o erro "close failed in file ..." está ocorrendo, mas até agora parece que ele pode ser ignorado com segurança).
Faça login na interface do usuário da Web
Abra seu navegador em $container_1_ip:8091 e você verá a tela de login do Coucbase:
Faça login com:
- Nome de usuário: Administrador
- Senha: senha
E você verá os nós do Couchbase:
Parabéns! Você tem um cluster do Couchbase Server instalado e em execução no Joyent Triton.
Desmontagem
Para parar e remover os contêineres do servidor Couchbase, execute:
1 2 |
$ doca parar $contêiner_1 $contêiner_2 $contêiner_3 $ doca rm $contêiner_1 $contêiner_2 $contêiner_3 |
Para verificar se não há mais contêineres em execução ou no estado parado, execute docker ps -a
e você verá uma lista vazia.
Instalação das ferramentas do SDC (opcional)
A instalação das ferramentas do Joyent Smart Data Center (SDC) permitirá que você obtenha mais visibilidade do seu cluster de contêineres, por exemplo, a possibilidade de visualizar o IP interno de cada contêiner.
Veja como instalar o pacote sdc-tools.
Instalar o smartdc
Primeiro, instale o NodeJS + NPM
Instale o smartdc:
1 2 |
npm instalar -g smartdc |
Configurar variáveis de ambiente
1 2 3 |
$ exportação SDC_URL=https://us-east-3b.api.joyent.com $ exportação SDC_ACCOUNT= $ exportação SDC_KEY_ID=$(ssh-keygen -l -f $INÍCIO/.ssh/id_rsa.pub | awk '{print $2}') |
Substitua os valores da seguinte forma:
- CONTAPara obter isso, faça login na interface do usuário da Web da Joyent e acesse o menu Account (Conta) no menu suspenso no canto superior direito. Encontre a seção Nome de usuário e usar esse campo
Lista de máquinas
Executar máquinas da lista sdc
para listar todos os contêineres em execução na sua conta Joyent. Seu resultado deve ser algo parecido com isto:
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-máquinas de listagem [ { "id": "0c6f8ca2-9514-48e4-97d7-e12026dcae4a", "name" (nome): "couchbase-server-3", "tipo": "smartmachine", "estado": "em execução", "imagem": "335a8046-0749-1174-5666-6f084472b5ef", "ips": [ "192.168.128.32", "165.225.185.13" ], "memória": 1024, "disco": 25600, "metadata": {}, "tags": {}, "criado": "2015-03-26T14:50:31.196Z", "atualizado": "2015-03-26T14:50:45.000Z", "redes": [ "7cfe29d4-e313-4c3b-a967-a28ea34342e9", "178967cb-8d11-4f53-8434-9c91ff819a0d" ], "conjunto de dados": "335a8046-0749-1174-5666-6f084472b5ef", "primaryIp": "165.225.185.13", "firewall_enabled": falso, "compute_node" (nó de computação): "44454c4c-4400-1046-8050-b5c04f383432", "pacote": "t4-standard-1G" }, ] |
Localizar o IP privado de uma máquina individual
1 |
$ sdc-getmachine | json -aH ips | json -aH | egrep "10.|192." |
Referências
- API nativa do Docker versus API Joyent Triton
- 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