Docker – Fundamentos, conceito e arquitetura

Docker o que é e para que server?

dockerlogo

Você provavelmente já ouviu falar alguma coisa sobre o Docker. Quase todos os dias surgem notícias sobre ele, seja por menções nas redes sociais ou em eventos promovidos por diversas empresas do segmento de tecnologia. Muitas dessas notícias falam sobre as constantes evoluções que o Docker vem passando.

Puxa, mas como posso acompanhar toda essa evolução tecnologica do Docker, sem saber o que realmente é e onde devo utilizá-lo?

Se fazermos uma breve pesquisa sobre o Docker, veremos que é um tanto quanto confuso todo o seu conceito, suas constantes versões, a maneira como podemos implementarmos e muito mais…

Mas enfim, vamos lá, tentarei ser o mais simplista possível para explicar o pouco que aprendi sobre ele.

O início.

dot

O Docker nasceu na empresa dotCloud. A empresa dotCloud na época era um empresa de hospedagem, e basicamente utilizava Containers Linux em quase todo seu ambiente.

Você deve estar se perguntando:
Ops… Pera lá, muita calma nessa hora, afinal o que é Container Linux?

LXC.

lxc

Container Linux (LXC) é um tipo de virtualização em nível de sistema operacional que proporciona a execução de múltiplas instâncias isoladas de um determinado sistema operacional dentro de um único hospedeiro. O conceito é simples e antigo, sendo o comando chroot seu precursor mais famoso. Com o chroot é possível segregar os acessos de diretórios e evitar que o usuário possa ter acesso à estrutura raiz (“/” ou root).

Ufa!

Com o passar do tempo, a dotCloud percebeu tudo quanto tinha feito, e eis que era muito bom, e então em 2013 eles resolveram disponibilizar todas as suas ferramentas.
Com a disponibilização dessas ferramentas, diversas empresas resolveram apostar no projeto, tornando então um dos maiores projetos da atualidade chamado Docker.

O conceito.

devops-container

O conceito nada mais é do que um isolar os recursos e as suas aplicações através de uma imagem (template), otimizando deploy, performance, agilidade, entrega e principalmente a forma de como é possível compartilhar todos os recursos sejam eles físicos ou lógicos.

Aquitetura do Docker.

docker-arquitetura

O back-end do Docker é feito com base no LXC. O Docker é como um Container em um navio, que pode conter vários serviços como já comentado acima. Sua arquitetura é composta por um hospedeiro (host físico ou virtual). Ele trabalha com um sistema de arquivo chamado aufs, que permite que os passos para configuração do Container funcionem de forma incremental. Além de utilizar e compartilha as bibliotecas e os binários do Sistema Operacional hospedeiro. Com o Docker não é necessário instalar um Sistema Operacional em cima de outro Sistema Operacional, basta apenas instalar o Docker e pronto.

Como funciona o Docker?

lxc-container

A parte mais legal dos Containers Docker é que eles não precisam de um sistema operacional completo rodando. Basta baixar as imagens de um repositório, que geralmente são imagens bem enxutas e em seguida utilizá-las em diversos tipos de aplicações. As partes principais que compõe o Docker são:

docker daemon: Gerencia os Containers.
docker CLI: Gerenciar a comunicação com o Docker Daemon.
docker image index: Gerencia o repositório (público ou privado).


Imagens Docker.

As imagens Docker nada mais é que um template de um determinado Sistema Operacional, contendo ou não um software específico. Geralmente faz uso do UFS (Sistema de Arquivos Unix), e podem serem criadas através do arquivo de configuração Dockerfile.
Com o Docker É possível controlar os recursos de CPU, Memória e Disco através dos parâmetros de configuração, que são passados no Start do Container, ou durante a execução do Container.
Um Container não pode ser iniciado sem que aja uma imagem. Através de uma imagem iniciada por um Container é possível gerar novas imagens, bastando apenas aplicar um commit a cada mudança realizada.
Agora se houver uma mudança na imagem em execução (Container), e por algum motivo for encerrado (exit) sem que tenha sido aplicado o commit, todas as alterações serão perdidas. Fui claro?

Exemplo:

Vamos supor que eu já tenha um imagem default do Sistema Operacional Linux Ubuntu. Quando eu iniciar o Container, será preciso informar qual a imagem que pretendo utilizá-la, neste caso a imagem default do Ubuntu. Com o Container já iniciado, vamos supor que eu precise instalar o software Nginx (Web Service), até ai normal, mas… se eu não aplicar um commit dessa alteração na imagem default Ubuntu (instalação do Nginx), tudo será perdido quando o Container for encerrado. Por isso a cada alteração será necessário aplicar um commit, gerando então o versionamento da imagem default. Complexo né?! Na prática é bem mais fácil.

Você deve estar se perguntando:
Se a cada mudança eu preciso aplicar um commit, o que faço então com os arquivos que são dinâmicos? 🙁


Volumes.

docker-volumes

No Docker existe um parâmetro muito importante, o parâmetro volumes.
Através do volumes é possível mapear uma área do Host hospedeiro para dentro do Container Docker, desta forma os arquivos dinâmicos (que precisam serem alterados), não serão afetados com o fim da execução do Container. 😉

Dockerfiles.

Dockerfiles são arquivos de compilação simples que descrevem como criar uma imagem para um Container a partir de um ponto inicial conhecido (Imagem default). As vantagens em utilizar o Dockerfiles são:

Versionamento Fácil – controle de versão;
Previsibilidade – Ajuda a remover erros humanos;
Responsabilidade – fornece o histórico dos passos utilizados para criar a imagem;
Flexibilidade – permite que substitua os padrões que a compilação interativa fornece;

Network.

dockernetwork2

Creio que seja um dos pontos mais importantes para quem deseja utilizar o Docker. Existem várias maneiras de utilizarmos a Network do Docker, porém neste artigo, não irei aprofundar muito neste assunto, devido a sua complexiadade e pelo fato de estarmos iniciando no mundo dos Containers.
Da mesma forma que utilizamos o parâmetro volumes para mapear um diretório do Host hospedeiro, também é possível mapear um porta do Host hospedeiro para dentro do Container Docker.
Podemos também utilizar os Containers Docker através de redes Bridge, None e Host.

Bridge
Cada container iniciado no docker é associado a uma rede especifica, e essa é a rede padrão para qualquer container que não foi explicitamente especificado.

None
Essa rede tem como objetivo isolar o container para comunicações externas, ou seja, ela não receberá nenhuma interface para comunicação externa. A sua única interface de rede IP será a localhost.

Host
Essa rede tem como objetivo entregar para o container todas as interfaces existentes no docker host. De certa forma isso pode agilizar a entrega dos pacotes.

Você deve estar se perguntando:
E como faço para mapear uma porta, como defino um IP para o Container…?

Essas perguntas infelizmente não poderei responder neste artigo, terei que deixar para um outro artigo devido a sua complexidade.


Não devo utilizar o Docker para:

Não trate o Container Docker como uma máquina virtual. Ele é apenas um serviço, nada mais que um processo do Host hospedeiro. O Container não pode ter uma vida longa (uptime), como ele é um processo do host hospedeiro, ele precisa ser encerrado e iniciado quando possível. Não armazene dados dentro do Container Docker, utilize sempre o parâmetro volumes para armazenar os dados dinâmicos. E por fim, assegure que o host hospedeiro possui os recursos necessários de segurança para acesso nos Containers Docker.

Onde devo utilizar o Docker.

Com certeza em ambientes de Desenvolvimento e produção.

Você deve estar se perguntando:
Como assim?

Sim, claro que podemos utilizá-lo nos ambientes de produção, afinal o seu nível de maturidade já está bem elevado. Com o Docker é possível utilizar um mesmo Container que perpassa todas as fazes do desenvolvimento chegando até a produção, passando pelos testes até o seu deploy, sem muito esforço.
Desta maneira, todo o ciclo de desenvolvimento à produção do aplicativo se dão dentro de um mesmo ambiente, evitando suas inconsistências e até o famoso “funcionava perfeitamente na minha máquina”… 😉

Escalabilidade.

dockermachine

Com o Container Docker eu posso simplesmente pegar a minha imagem e movê-la para qualquer nuvem que eu deseja usar, desde que eu tenho o Docker disponível para uso. Desta forma, é possível escalar a minha aplicação bem mais rápido do que a forma tradicional. Além de ter a possibilidade de não ficar preso em uma única Nuvem pública ou privada.
Porque usar Containers?

Velocidade;
Economia de recursos;
É possível subir vários Containers Docker ao mesmo tempo, consumindo o minimo de recursos dos hardwares físicos ou virtuais.

Por fim.

Em poucas palavras, o Docker oferece a você um conjunto completo de ferramentas de alto nível para transportar tudo que constitui uma aplicação.

Conclusão.

O Docker fornece os blocos construtivos fundamentais necessários às implantações de Containers distribuídos. Através do empacotamento dos componentes, das aplicações em seus próprios Containers e da sua escalabilidade horizontal torna-se um simples processo de lançar ou desligar múltiplas instâncias de cada componente.

Precisando de ajuda?

A Sinestec conta com um time altamente competente e preparado para suprir o crescente interesse no mercado de Containers Docker. Nossos especialistas podem remodelar seu conjunto de infraestrutura, aplicações e processos para tornar sua empresa mais ágil. Entre em contato conosco e agende um horário com nossos arquitetos.

Compartilhe nas redes sociais:

Por que Docker?

Docker 2
Dentre as startups de tecnologia, o mascote mais famoso do momento é aquela baleia azul simpática. Esse mamífero marinho não é simplesmente o hype do momento, mas sim a forma padrão que entregaremos aplicações em um futuro muito próximo.

Docker é hoje o que servidores virtuais eram há 6 anos. Daqui a pouco estaremos dizendo: “Docker is the new normal”. Logicamente que estou chamando de Docker o uso de container juntamente com a cultura DevOps e não especificamente o software da empresa Docker. Afinal, existem outros container runtimes, como o Rocket da CoreOS.

A tecnologia de container (namespaces, isolamento de processos) não é recente, porém alguns fatores contribuíram para que Docker chamasse tanto a atenção. Alguns destes fatores são:

1) Necessidade latente de prover uma infraestrutura rapidamente escalável
2) Arquitetura de aplicações como microserviços
3) Crescente adoção de metodologias ágeis de desenvolvimento de software e prática de entrega contínua
4) Empresas ganharam confiança em migrar suas aplicações para a nuvem
5) Maturidade da cultura DevOps e a infraestrutura como código
6) Grandes empresas estão usando Docker – 12 das 15 maiores lojas virtuais da América Latina usam Docker

A adoção dessa tecnologia traz consigo uma quebra de paradigma para os sysadmins, visto que os “servidores” agora serão descartáveis – Isso mesmo, descartáveis! Você sobe um container, executa o que precisa e depois o destrói. Se deu problema em um container, simplesmente jogue ele no lixo e suba outro – literalmente em segundos! Tudo isso com o avião voando e sem impacto para o usuário final.

O container é exatamente aquilo que precisa ser: O recurso computacional necessário para rodar a aplicação. Quando digo recurso computacional entenda como processamento e memória. Quanto ao disco do container, é descartável, as aplicações não devem interagir com o FileSystem do SO. Devido a isso, os desenvolvedores devem escrever suas aplicações de forma que usem tecnologias como o Object Storage.

Docker é um meio utilizado para empresas que precisam de uma infraestrutura ágil, altamente escalável e disponível. Não querem desperdiçar tempo e dinheiro na gestão tradicional de servidores. Preferem aproveitar seus recursos para focar no core business e lançar rapidamente soluções inovadores para o mercado.

Compartilhe nas redes sociais:

DevOps como estratégia para seu negócio

DevOps
A cultura de DevOps surgiu para melhorar a integração entre desenvolvedores e SysAdmins e, junto com isso, trouxe todo um novo conceito de infraestrutura ágil. Essa nova forma de entrega de infraestrutura possibilita que desenvolvedores sejam cada vez mais auto-sustentáveis e é exatamente por isso que DevOps deve ser estratégico para seu negócio.

Uma vez que simplificamos o processo de ativação da infraestrutura e damos aos desenvolvedores a liberdade de andarem com suas próprias pernas, acabamos por criar um ambiente propício para a inovação. O fluxo Desenvolvimento > Homologação > Produção é simplificado e, como consequência, novas funcionalidades do seu produto chegam ao usuário final mais rápido. Também possibilita testar sua ideia de negócio no mercado com menor custo e maior agilidade. Somente por estes dois pontos você já deveria considerar implementar DevOps em sua empresa, seja uma startup ou uma organização já consolidada.

Leia mais

Compartilhe nas redes sociais: