Container Docker, é o componente do software de código aberto que automatiza a implementação de aplicativos em Containers LINUX, o famoso Docker.
Os Containers têm uma longa história na computação.
Ao contrário da virtualização de hipervisor, em que uma ou mais máquinas independentes executam virtualmente o hardware físico por meio de uma camada de intermediação.
Os Containers são executados no espaço no kernel de um sistema operacional, no kernel do LINUX para ser mais exato.
Um Container Linux é uma virtualização em nível do sistema operacional.
A tecnologia de Container permite que várias instâncias do kernel sejam executadas de forma isoladas, em um único host.
Eu acredito que você já imagina que os Containers são às vezes vistos como menos flexíveis.
Por exemplo, você pode rodar o Red Hat Enterprise Linux em um servidor Ubuntu, mas não pode rodar o Microsoft Windows em cima de um servidor Ubuntu.
Os Containers também foram vistos como menos seguros do que o isolamento total da virtualização de hipervisor.
Contra esse argumento, os Containers não têm toda a estrutura de um sistema operacional completo, sendo assim, um container tem uma menor exposição a falhas de segurança.
Apesar dessas limitações, os Containers foram implantados em vários casos de uso.
Eles são populares para implantação de micro serviços, para camadas de desenvolvimento, apesar das preocupações com sua segurança.
De fato, um dos exemplos mais comuns de um Container é um chroot jail, que cria um ambiente de diretório isolado para a execução de processos.
Tecnologias de Container mais recentes incluíram o OpenVZ, Solaris Zones e Containers Linux como o LXC.
Usando essas tecnologias mais recentes, os Containers agora podem se parecer com hosts completos, e não apenas em ambientes de execução.
No caso do Docker, você poderá ter recursos modernos de kernel do Linux, como grupos de controle e namespaces.
Isso tudo significa que os Containers podem ter um isolamento forte, sua própria rede, e armazenamento de dados.
E o melhor, você poderá gerenciar todos esses recursos em nível de serviço do seu sistema LINUX.
Os Containers são geralmente considerados uma tecnologia enxuta, porque exigem recursos limitados.
Ao contrário das tecnologias tradicionais de virtualização ou paravirtualização, elas não exigem uma camada de emulação ou uma camada de hipervisor.
Na verdade eles usam a interface do sistema operacional.
Isso reduz a carga necessária para executar Containers e permitem executar um maior número de ambiente isolado ( Container ) em um host.
Os Containers não alcançaram adoção em grande escala, ainda.
Uma grande parte disso pode ser atribuída pela sua complexidade.
Os Containers podem ser complexos, difíceis de configurar e difíceis de gerenciar e automatizar.
O Docker pretende mudar isso.
Introdução ao Container Docker
Docker é um software de código aberto que automatiza a implementação de aplicativos em Containers.
Foi escrito pela equipe da Docker Inc, e lançado com a licença Apache 2.0.
Eu sei, você pode estar se perguntando:
Por que Container Docker?
Por que um Container Docker é tão bom?
Como o Container Docker domina o mercado de Containers no Linux?
Claro, teremos resposta para todas essas dúvidas sobre o Docker, e várias outras também.
Docker é o mecanismo de implementação de aplicativos em um ambiente virtualizado em Container, chamado de container Docker.
Ele é projetado para fornecer um ambiente leve e rápido para executar seu código, bem como um fluxo de trabalho eficiente para levar esse código do seu laptop para o ambiente de teste e depois para a produção.
E o mais legal, tudo isso sem precisar mudar qualquer configuração do seu aplicativo.
O trabalhar com um container Docker é incrivelmente simples.
Na verdade, você pode começar com o Container Docker em um host mínimo que não executa nada além de um kernel Linux compatível e um binário do Docker.
Você pode “Dockerizar” seu aplicativo em minutos.
A maioria das vezes, um container Docker, leva menos de um segundo para iniciar.
Você não tem mais a camada do hypervisor, e isso também significa que um Container Docker é muito mais leve.
Sendo assim podemos executar mais Containers Docker em um mesmo host e fazer o melhor uso possível de seus recursos.
Como um Container Docker ajuda a separar seu aplicativo de outras configurações
Com o Docker, os desenvolvedores se preocupam com os aplicativos que estão sendo executados em Containers.
E o administrador de sistema Linux se preocupa com o gerenciamento dos Containers.
Lembrando, esse é o conceito base para o DEVOPS.
O Docker foi projetado para garantir que o ambiente no qual os desenvolvedores escrevem o código corresponda aos ambientes em que seus aplicativos são implantados.
Com o Docker você poderá reduzir o tempo do código sendo criado, testado, implementado e usado.
O objetivo é tornar seus aplicativos portáteis, fáceis de compilar e colaborar facilmente.
Docker também incentiva a criação de microsserviços.
O Docker recomenda que cada Container execute um único aplicativo ou processo.
Eu sei, isso parece ser estranho, mas irá ficar mais claro para você quando estiver trabalhando com microsserviços em containers Docker.
Microsserviços em Docker promove um modelo de aplicativo distribuído, em que um aplicativo ou serviço é representado por uma série de Containers interconectados.
Trabalhar com microsserviços em containers Docker facilita a distribuição, dimensionamento e depuração de seus aplicativos.
Mas é claro que você não precisa criar seus aplicativos desta forma, simplesmente execute um aplicativo de vários processos dentro de um único Container.
Componentes do Docker
Vamos examinar os principais componentes que compõem o Docker Community Edition
Servidor Docker e Cliente Docker
Docker é uma aplicação cliente-servidor.
O cliente do Docker fala com o servidor ou daemon do Docker, que, por sua vez, faz todo o trabalho.
Às vezes, você também verá o daemon do Docker ser chamado por Docker Engine.
No Linux você terá Docker com um binário, com linha de comando.
Docker também disponibiliza o acesso a uma API REST, com uma completa interação ao daemon dockerd.
Você pode executar o daemon e o cliente Docker no mesmo host ou conectar seu cliente Docker local a um daemon remoto em execução em outro host.
Você pode ver a arquitetura do Docker descrita na imagem abaixo:
Imagens do Docker
Você lança seus Containers a partir de imagens.
As imagens são a parte “build” do ciclo de vida do Docker.
Eles têm um formato em camadas, usando sistemas de arquivos UNION, e são construídos passo a passo usando uma série de instruções.
Por exemplo:
- Adicione um arquivo
- Execute um comando
- Abra uma porta.
Você pode considerar as imagens como o “código-fonte” dos seus Containers.
Eles são altamente portáteis e podem ser compartilhados, armazenados e atualizados.
Fique tranquilo que aprenderemos como usar imagens existentes e também construir nossas próprias imagens.
Eu comentei sobre o sistema de arquivos UNION ou UnionFS, são sistemas de arquivos que operam criando camadas, tornando-as muito leves e rápidas.
O Docker Engine usa o UnionFS para fornecer os blocos de construção dos contêineres.
O Docker Engine pode usar variantes do UnionFS, incluindo AUFS, btrfs, vfs e DeviceMapper.
Docker registries
Docker armazena as imagens que você cria.
Existem dois tipos de registros: públicos e privados.
A Docker, Inc., opera o registro público de imagens, chamado Docker Hub.
Você pode criar uma conta no Docker Hub e usá-la para compartilhar e armazenar suas próprias imagens.
O Docker Hub também contém, na última contagem, mais de 10.000 imagens que outras pessoas construíram e compartilharam.
Quer uma imagem do Docker para um servidor Web Nginx, um sistema PABX rodando Asterisk ou um banco de dados MySQL?
Todas estas estão disponíveis, e pode acreditar tem muito mais.
Você também pode armazenar imagens que deseja manter privadas no Docker Hub.
Essas imagens podem incluir código-fonte ou outras informações proprietárias que você deseja manter em segurança ou compartilhar apenas com outros membros de sua equipe ou organização.
Container Docker
O Docker ajuda a criar e implementar Containers dentro dos quais você pode empacotar seus aplicativos e serviços.
Como acabamos de aprender, os Containers são iniciados a partir de imagens e podem conter um ou mais processos em execução.
Você pode pensar em imagens como o componente de construção ou embalagem e os Containers como o componente de execução do Docker.
Um Container Docker é:
- Um formato de imagem.
- Um conjunto de operações padrão.
- Um ambiente de execução.
O Docker empresta o conceito de Container utilizado no transporte de cargas, que são usado para transportar mercadorias, mas, em vez de enviar mercadorias, os Containers Docker enviam software.
Cada Container contém uma imagem, que permite que um conjunto de operações seja executado.
Por exemplo, um container Docker pode ser:
- Criado.
- Iniciado.
- Interrompido.
- Reiniciado e destruído.
Como um Container utilizado por uma transportadora para envio de carga, o Docker não se importa com o conteúdo do Container ao executar essas ações.
Por exemplo:
Não importa se um Container é um servidor Web, um banco de dados ou um servidor de aplicativos.
Cada Container é carregado da mesma forma que qualquer outro Container.
O Docker também não se importa para onde você envia seu Container.
Por exemplo, você pode construir um container no seu laptop e depois temos muitas opções possíveis:
- Fazer o upload para o Docker HUB.
- Fazer download em um servidor físico ou virtual.
- Testar, implantar em um cluster de uma dúzia de hosts no Amazon EC2 e executá-lo.
Como um Container normal, aquele utilizado para transportar cargas, um container do Docker é intercambiável, empilháveis, portátil e o mais genérico possível.
Com o Docker, podemos criar rapidamente:
- Um servidor de aplicativos.
- Um sistema para envio de mensagens.
- Um utilitário de análise de dados.
- Um banco de dados.
Os possíveis casos de uso são infinitos.
Docker Compose
Além dos Containers individuais, também podemos executar Containers do Docker em pilhas e clusters
O ecossistema do Docker contém mais duas ferramentas:
Docker Compose: Permite que você execute pilhas de Containers, por exemplo, servidores da Web, servidores de aplicativos e Containers de servidor de banco de dados sendo executados juntos para atender a um aplicativo específico.
Docker Swarm: Permite criar clusters de Containers, para a execução de cargas escaláveis.
Onde você poderá usar um Container Docker?
Então, por que você deveria se preocupar com o Docker ou Containers LINUX em geral?
Nós discutimos brevemente o isolamento que os containers fornecem.
Eles criam excelentes ambientes para testes, certo?
Mas será que é só isso?
A resposta é não.
Eles também são excelentes para a construção de serviços.
Alguns exemplos em que o Docker pode ser utilizado:
- Ajudar a tornar seu desenvolvimento local e criar um fluxo de trabalho mais rápido, mais eficiente e mais leve.
- Desenvolvedores locais podem construir, executar e compartilhar Containers do Docker.
- Os Containers podem ser construídos no desenvolvimento e enviados para ambientes de teste e, e depois podem ser utilizados em produção.
É o fim da frase, “mas na minha máquina não funciona”.
Você poderá executar serviços e aplicativos independentes, em vários ambientes.
O que você acha de usar o Docker para criar instâncias isoladas, para executar testes com o Jenkins.
Também é possível criar testes de aplicativos e arquiteturas complexas em um host local antes da implantação em um ambiente de produção.
Criar ambientes de teste para ensino de tecnologias, como o shell Unix ou uma linguagem de programação.
Componentes técnicos do Docker
O Docker pode ser executado em qualquer host x64, que esteja rodando um kernel Linux moderno, recomendo a versão do kernel 3.10 para acima.
Rodar o Docker é muito leve, ele pode ser usado em servidores, desktops ou laptops.
Você pode também executar o Docker dentro de uma máquina virtual.
Falando em sistema operacional, o Docker pode rodar também no OS X e no Microsoft Windows.
O core do sistema Docker vai utilizar sempre:
- Um formato de Container nativo do Linux que o Docker chama de libcontainer.
- Namespaces de kernel do Linux, que fornecem isolamento para sistemas de arquivos, processos e redes.
- Isolamento do sistema de arquivos: cada Container é seu próprio sistema de arquivos raiz.
- Isolamento do processo: cada Container é executado em seu próprio ambiente de processo.
- Isolamento de rede: interfaces virtuais separadas e endereçamento IP entre Containers.
- Isolamento e agrupamento de recursos: recursos como CPU e memória são alocados individualmente para cada Container do Docker usando o recurso de kernel cgroups, ou grupos de controle.
- Os sistemas de arquivos são criados com “copy-on-write”, o que significa que eles estão em camadas e são rápidos e exigem uso limitado do disco.
- Shell interativo: Você pode acessar um tty para utilizar o shell interativo do seu Container.
O que você ainda precisa aprender mais sobre Container Docker
Claro você ainda precisa saber mais sobre instalação, implantação, gerenciamento e extensão do Docker.
Neste artigo, trabalhamos as noções básicas do Docker e seus componentes.
Ainda iremos começar a usar o Docker para criar Containers e serviços para executar várias tarefas nos próximos artigos, desta série.
Você vai precisar analisar o ciclo de vida do desenvolvimento do seu aplicativo, desde o teste até a produção, e ver onde o Docker se encaixa e como ele pode facilitar sua vida.
Ainda podemos utilizar o Docker para criar ambientes de teste para novos projetos.
Assim como demonstrar a integração do Docker ao fluxo de trabalho de quem vai criar serviços e plataformas de aplicativos.
Por fim, poderemos usar a API do Docker.
Nós ainda veremos, nos próximos artigos assuntos como:
- Como instalar o Docker.
- Primeiros passos com um Container Docker.
- Como criar imagens do Docker.
- Gerenciar e compartilhar imagens do Docker.
- Executar e gerenciar Containers Docker complexos, com empilhamento de Containers.
- Implantar Containers Docker como parte de seu pipeline de teste.
- Criar aplicativos e ambientes com vários Containers.
- Apresentar as noções básicas da orquestração do Docker com o Docker Compose, e o Swarm.
- Explorar a API do Docker.
É isso, tem muito assunto ainda, estamos só iniciando. Você já está utilizando o Docker em alguma ambiente?