Rancher – Painel para Docker

Olá,
O MundoDocker mostra hoje para vocês como funciona o Rancher, uma plataforma para deploy de sua infraestrutura Docker de forma fácil e controlada. O Rancher pode ser dividido em duas camadas: RancherOS, que é um sistema operacional minimalista (assim como o CoreOS) e a plataforma Rancher, vamos conhece-las mais:

RancheOS

O RancherOS, trás apenas as funções essenciais para o funcionamento do ambiente Docker, veja na imagem abaixo como é a arquitetura do RancherOS:

rancheroshowitworksFonte: http://docs.rancher.com/

O tamanho de uma imagem do RancherOS é de de 20MB, e possui tudo que é necessário para montar seu servidor para deploy de containers Docker. Como pode ser visto na imagem acima, o RancherOS é uma kernel base bem limitado, e toda a plataforma do Rancher é montada em cima de containers, sendo o init do sistema, chamado PID 1, é feito dentro de um container Docker, e os demais serviços (udev, dhcp, etc) são inicializados dentro de outros containers. Como você deve ter notado, no RancherOS o Docker faz o trabalho do sistema de inicialização (sysvinit ou systemd), comum em outros distribuições Linux.

Outro ponto interessante é que, como o RancherOS inicializa dentro de um container, o próprio serviço Docker a nível de usuário executa dentro um container Docker, ou seja, os containers de aplicação (que o usuário cria) são inicializados dentro do container de sistema, isso garante ainda mais isolamento e claro segurança, pois inclusive o sistema está encapsulado dentro de um container.

Rancher

Rancher é um software opensource que possibilita a criação de uma plataforma privada para criação de containers. Através dele é possível administrar todos os pontos de seu ambiente Docker, incluindo: orquestração, loadbalance, volumes e rede. E ainda é possível fazer a diferenciação entre usuários, ou seja, você pode criar um pool de recursos para seu desenvolvedor e ele mesmo poderá criar quantos containers quiser e puder, isso é muito útil para da liberdade e ainda assim garantir controle.

Um grande ponto positivo do Rancher, é você não ser obrigado a usar o RancherOS (claro que isso é muito recomendado), basta você subir seu servidor com Docker instalado e instalar tanto a plataforma quanto os agentes do Rancher dentro de containers.

Vamos a prática? Partimos do principio que você já tenha o Docker instalado, agora execute:

docker run -d --restart=always -p 8080:8080 rancher/server

Esse comando criará um containers com o servidor Rancher já pronto, feito isso basta acessar via web o ipdoservidor:8080, veja na imagem:

Rancher01

Veja que ele deixa em destaque a informação de que não foi configurado uma forma de acesso, para fazer isso vá até: Admin – Access Control, e habilite a forma que desejar, em nosso exemplo escolhemos Local, ou seja, utilizarei usuário criados dentro do Rancher mesmo, após isso crie seu primeiro usuário administrativo e salve, em seguida faça logout da plataforma e acesse: ipdoservidor:8080/login e acesse com os dados que você acabou de criar:

Rancher02

Depois de logado, clique em Add Host, para adicionar um host a ser manipulado pelo Rancher, lembre-se, você pode ou não adicionar o host onde está executando o servidor Rancher, se escolher adicionar ele deixe marcado a opção que vem e clique em Save, na próxima tela você pode escolher um dos provedores (Amazon, Digital Ocean, RackSpace, etc) para fazer deploy de seus hosts, como vamos adicionar o host local, clique me Custom, o Rancher lhe informará alguns dados que você deverá seguir, como por exemplo liberar porta no firewall e executar um comando para adicionar o Rancher Agent, veja:

Rancher03

Feito isso você verá que foi adicionado um host em seu dashboard. A partir de agora basta você criar os containers que desejar e claro fazer toda a definição de usuários, pool de recursos e o que mais for interessante para você.

Isso é o básico sobre o Rancher, mas o suficiente para você entender a ferramenta e dar o uso adequado a ela dentro do seu ambiente, em posts futuros falaremos mais sobre ela e traremos alguns exemplos práticos de uso do Rancher para deploy de container e automação de infraestrutura.

Esperamos ter ajudado, e nos ajude divulgando o MundoDocker. Abraço!

Sysdig para Ops

Oi Pessoal,

Queremos mostrar para vocês hoje como é possível analisar seu ambiente Docker e ver a saúde de seus containers de forma fácil e bem prática, conheça nesse post o Sysdig. O Sysdig é uma ferramenta escrita em Lua que vem como uma opção, principalmente para quem é de operações, para realizar algum troubleshooting em seu sistema. Ele trás de forma rápida e fácil todas as informações que você precisa saber, não havendo mais a necessidade de executar dois, três comandos para ter uma noção do que está acontecendo, com o Sysdig em um único comando você já terá visibilidade do que é importante você saber e do que pode estar ocorrendo em seu sistema. O Sysdig também é multiplataforma, então é possível instalar ele tanto em Windows, quanto Linux e Mac, e claro, ele suporta containers, ótimo! 😉 Veja abaixo um mini tutorial que montamos para você:

1 – Instalação:

Simples, se for em um host Linux você pode utilizar o comando abaixo:

curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash

Você ainda pode baixar os repositório e utilizar sua ferramenta para instalação (yum, apt-get e afins), que saber como? Da uma olhada aqui e veja também como instalar o Sysdi em Windows e Mac.

2 – Utilização:

Mas claro o que nos interessa é saber como mais como está o uso de recursos do meu host, e descobrir qual container está utilizando mais em relação aos outros, ou ainda ver como está a saúde do meu ambiente Docker, mas como o Sysdig faz isso? Ele fica ‘ouvindo’ as chamadas de sistema e com base nessas informações monta os reports para você, veja na imagem abaixo como ele trabalha tanto com Docker quanto com LXC puro:

Perceba que o Kernel envia para o Sysdig todas as informações que foram processadas por ele, seja de acesso a memória, disco, rede, processador, etc. e com base nisso o Sysdig consegue mapear qual processo está vinculado a qual arquivo, ou quanto de trafego está sendo gerado por um container.

Veja abaixo o exemplo de alguns comandos que pode lhe ser muito uteis (existe um lista bem grande disponível, vamos colocar aqui apenas os essenciais e extremamente úteis para fazer um troubleshooting em seu ambiente Docker):

  • Listagem dos containters existentes:
    sysdig -c lscontainers
  • Top por containers que mais utilizam CPU:
    sysdig -c topcontainers_cpu
  • Você ainda por visualizar quais processos estão consumindo mais recursos dentro de cada container, para isso:
    sysdig -pc -c topprocs_cpu

O retorno desse comando será algo parecido com este gif:

 

topproc_cpu

  • Você pode ainda filtrar a saída do comando pelo nome de seu container:
    sysdig -pc -c topprocs_cpu container.name contains wordpress
  • Quer ver quanto de rede um container está utilizando?
    sysdig -pc -c topcontainers_net
  • E qual processo dentro de cada container está utilizando mais rede?
    sysdig -pc -c topprocs_net
  • Quais portas estão trafegando mais?
    sysdig -pc -c topconns
  • Consigo filtrar por nome de container também?
    sysdig -pc -c topconns container name=wordpress
  • Eu consigo saber quais containers estão utilizando mais I/O em meu host?
    sysdig -c topcontainers_file
  • Consigo saber qual processo dentro do container está fazendo isso?
    sysdig -pc -c topprocs_file
  • E quais arquivos realmente estão sendo mais lidos ou escritos?
    sysdig -pc -c topfiles_bytes

 

Ufa, já é um começo certo? Existem muitas outras opções disponíveis, como por exemplo agregar logs de todos os containers em uma única visualização, com o Sysdig isso é simples de se fazer, quer ver mais? Acessa a Wiki dele, ela é rica em informações: http://www.sysdig.org/wiki

Por hoje era isso, fique por dentro das novidades aqui do Blog e se você ainda não viu, montamos um fórum aqui no blog, acessa o link ai em cima e poste a sua dúvida ou dificuldade, assim tanto nós quantos outras pessoas da comunidade Docker podem te ajudar 😉 e claro nos ajude divulgando o MundoDocker, Abraço!

Docker Swarm

Oi Pessoal,

Hoje queremos trazer para vocês mais uma das ferramentas que o Docker disponibiliza em seu ecossistema, chegou a hora de conhecermos o Docker Swarm. O Docker Swarm é uma ferramenta nativa do Docker que permite a criação de clusters de Docker, ou seja, podemos fazer com que diversos hosts de Docker estejam dentro do mesmo pool de recursos, facilitando assim o deploy de containers. É possível por exemplo criar um container sem necessariamente saber em qual host ele está, pois o Swarm disponibilidade uma API de integração, onde é possível realizar grande parte das atividades administrativas de um container. Quer ver na prática?

Requisitos:

  • Estar com a versão 1.6+ do Docker
  • Abrir a API do Docker para o Swarm Manager

 

Mãos a obra:

1 – Baixando a imagem oficial:

$ docker pull swarm

2 – Criando o cluster:

$ docker run --rm swarm create 
4765653423fdecsdfe875954a6e2h78ed # 

 

O retorno desse comando será o ID do Cluster, armazena essa informação pois será importante nas próximas etapas.

3 – Adicionando nós ao cluster:

$ docker run -d swarm join --addr=<node_ip:2375> token://4765653423fdecsdfe875954a6e2h78ed

4 – Configurando o Manager:

$ docker run -d -p <porta_manager>:2375 swarm manage token://4765653423fdecsdfe875954a6e2h78ed

Lembrando que <porta_manager> será a porta que você utilizará para se comunicar com o Swarm Manager, responsável pela administração do cluster, a arquitetura ficará da forma como a imagem abaixo:

5 – Verificando o Cluster:

$ docker -H tcp://ip:porta_manager> info

O retorno será algo parecido com isso:

Containers: 0 
Nodes: 3 
agent-2: 172.31.0.1:2375 
  └ Containers: 0 
  └ Reserved CPUs: 0 / 1 
  └ Reserved Memory: 0 B / 514.5 MiB 
agent-1: 172.31.0.2:2375 
  └ Containers: 0 
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 514.5 MiB 
agent-0: 172.31.0.3:2375 
  └ Containers: 0 
  └ Reserved CPUs: 0 / 1 
  └ Reserved Memory: 0 B / 514.5 MiB

Você pode enfrentar alguma dificuldade relacionada a TLS, principalmente se estiver apenas testando, para resolver isso basta executar: unset DOCKER_TLS_VERIFY, com isso não será verificado se os hosts possuem acesso via TLS ativado.

Para administrar seu cluster (criar containers, etc) basta utilizar o IP e Porta do Swarm Manage, dessa forma:

$ docker -H tcp://<manager_ip:manager_port> info 
$ docker -H tcp://<manager_ip:manager_port> run ... 
$ docker -H tcp://<manager_ip:manager_port> ps 

Para listar os nós que fazem parte do cluster, bata utilizar o comando abaixo:

$ docker run --rm swarm list token://4765653423fdecsdfe875954a6e2h78ed
172.31.0.1:2375 
172.31.0.2:2375 
172.31.0.3:2375

 

É claro que isso é apenas o início, tendo o cluster montado é possível criar filtros de identificação por tipo de serviço, isso é muito útil para criar containers com o mesmo tipo de serviço em um mesmo local sem a necessidade de saber onde. Mas isso é história para um próximo post 😉

Fique atento as novidades do Blog, e ajude divulgando o mundodocker.com.br.

Abraço!

 

Montando Volumes no Docker

Olá!

Hoje, nós do mundodocker.com.br, vamos ver como podemos utilizar a funcionalidade de volumes no Docker. Um volume pode ser apenas o mapeamento de pasta entre o host e container, bem como o mapeamento de uma pasta entre containers.

Gerenciando volumes

Host – Container

Na imagem abaixo podemos visualizar como fica o mapeamento entre host e container:

host_containerPodemos analisar os pontos positivos e negativos dessa abordagem em:

Prós:

– Menor overhead para acesso disco, pois não há analise pela libcontainer das chamadas para esse volume mapeado;

– É possível mapear o mesmo volume para múltiplos containers, forma primitiva de replicação de dados entre containers (lembrando que neste caso não há controle de arquivos lidos e escritos ao mesmo tempo, quem deve ser responsável por isso é o filesystem do volume, não o volume em si);

– Persistência de dados, não há risco do container cair ou ser removido e os dados desaparecerem;

Contras:

– Sucessível possíveis brechas de segurança a nível de filesystem, escalonamento de privilégios, pois neste ambiente não há controle pela libcontainer.

– Não escalável, pois  atrela-se o container ao host ou pelo menos ao mapeamento.

– Dificulta administração, pois há mais uma camada de gerenciamento que deve ser muito bem estruturada.

Container – Container

Na imagem abaixo podemos visualizar como fica o mapeamento entre containers:

container_containerPodemos analisar os pontos positivos e negativos dessa abordagem em:

Prós:

– Portável, pois o volume não está mais atrelado ao host;

– É possível mapear o mesmo volume para múltiplos containers, forma primitiva de replicação de dados entre containers (lembrando que neste caso não há controle de arquivos lidos e escritos ao mesmo tempo, quem deve ser responsável por isso é o filesystem do volume, não o volume em si);

– Persistência de dados, não há risco do container cair ou ser removido e os dados desaparecerem;

Contras:

– Maior overhead para acesso disco, pois há analise pela libcontainer das chamadas para esse volume mapeado;

– Maior complexidade, pois há mais passos a serem seguidos para criação e remoção de containers;

Criando e montando volumes

Adicionando um volume de dados

Para mapear o volume do container a uma pasta no host basta executar o comando:

docker run -d --name meucontainer -v /var/app imagem

Será criado um novo diretório dentro do container chamado /var/app, caso o mesmo já exista, será sobrescrito por este novo.

Verificando volume

Você pode verificar quais volumes um container possui executando o comando:

docker inspect meucontainer

O resultado do comando será parecido com isso:

...
Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "/var/lib/docker/volumes/fac362...80535/_data",
        "Destination": "/var/app",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
]
...

Por padrão todos os volumes são montandos como leitura e escrita, você pode montar o volume como apenas leitura, basta executar:

docker run -d --name meucontainer -v /var/app:ro imagem

Note o :ro no final do /var/app, isso quer dizer que este volume é apenas leitura.

Montando um diretório do host como um volume de dados

Para mapear o volume do container a uma pasta no host basta executar o comando:

docker run -d --name meucontainer -v /var/app:/var/www/html imagem

Será criado um novo diretório dentro do container chamado /var/app, caso o mesmo já exista, será sobrescrito por este novo.

Criando e montando um container como um volume de dados

É possível você criar um container com um volume que pode ser compartilhado com demais containers, isso é uma prática comum quando deseja-se ter alguma persistência de dados e que não esteja atrelado ao host onde o container está. Para isso, crie o container conforme abaixo:

docker create -v /dados --name meucontainer imagem /bin/true

Agora, no próximo container basta você utilizar o parametro –volumes-from para que o volume criado no container acima seja mapeado para o novo container, algo como isso:

docker run -d --volumes-from dados--name meucontainer1 imagem

Você pode criar quantos containers desejar mapeando este volume, inclusive pode mapear o volume de um container, por exemplo:

docker run -d --volumes-from container1 --name meucontainer2 imagem

Com isso não é necessário mapear obrigatoriamente o container de volume, e sim algum container que já utiliza ele. Outro ponto importante a se observar nessa caso é que:

  • Quando removido o container de volume os demais containers não perdem os dados, pois continuará existindo neste container a pasta montada;
  • Para remover o volume nesse caso é necessário remover todos os containers que foram criando mapeando este container e em seguida executar o comando: docker em -v

 

Bom pessoal, espero que tenham gostado, esse assunto é muito importante dentro do Docker, espero fazer um vídeo e disponibilizar para vocês um prática usando volumes.

Não fique com dúvida, mande e-mail para: [email protected] e vamos conversando, ajude a divulgar o blog e disseminar conhecimento, abraço!

Docker e DevOps

Olá pessoal!

Hoje vamos ao post um pouco mais voltado ao conceito e ideias que fazem do Docker uma tecnologia/solução tão inovadora, eficiente e claro popular.

Precisamos entender, antes de tudo, como a vida de um profissional pode ser, primeiro temos o mundo das empresas que adotam o método tradicional de trabalho, nessa empresa o horário é fixo, as decisões demoradas, e geralmente as ideias que você pode ter estão descritas em um manual interno.

Geralmente essas empresas demoram a reagir ao mercado, ou seja, algo novo demora a ser posto em prática, e as mudanças são vistas como um problema.

Temos outro mundo, a de empresas que vêem em mudanças um forma de ganhar espaço no mercado, onde ideias novas e desafios são um requisito para se trabalhar, você é instigado a ver as coisas de uma outra perspectiva, pois deve se manter sempre a frente do que vem em seguida.

Um os grandes entraves em ambas as empresas é a diferenciação que há entre as equipes de desenvolvimento e infra-estrutura, elas não se conversam, e o que uma propõe é um problema para a outra. Isso leva apenas a um lugar: Estagnação, pois não colaboração entre elas para criar ou resolver algo que seja vital para a empresa.

blue devops_4

Felizmente essa percepção está sendo mudada, em seu lugar surgiu um novo conceito de trabalho, que serve para ambas as empresas que mencionei acima, o conceito de DevOps. Mas o que ser isso cacique?

DevOps é uma metodologia, que incentiva uma maior integração entre as diferentes áreas da empresa, ou seja, em vez de cada um fazer uma coisa, as equipes tendem a se integrar em prol de uma objetivo comum, seja um projeto ou a resolução de um problema.

Para que isso seja possível, existem diversas ferramentas que auxiliam o desenvolvimento conjunto de projetos, desde base de conhecimento até orquestração de serviços. É nesse sentido em que o Docker auxilia, tanto o pessoal de Dev, quanto o pessoal de Ops. O Docker permite que o desenvolvedor tenha todo o seu ambiente de desenvolvimento e teste totalmente agnóstico da infraestrutura.  Da mesma forma que permite ao analista de infraestrutura realizar ou configurar o ambiente de produção de uma maneira muito mais segura e eficiente, pois basta replicar o ambiente de homologação (que já foi testado pelo desenvolvedor) no ambiente de produção, e isso sem se preocupar nas diferenças nos ambiente, pois é o mesmo ambiente.

Outro beneficio que o Docker proporciona é a agilidade no deploy das aplicações, pois não é necessário subir uma instância ou instalar um servidor todo apenas para testar algo, basta criar um container e subir sua aplicação.

Nos próximos posts nós iniciaremos alguns tutoriais que explicarão melhor como podemos integrar de forma mais eficiente o Docker a outras ferramentas, permitindo criar um ecossistema completo de desenvolvimento e integra continua, tendo em vista os benefícios tanta para Dev quanto Ops.