O projeto Docker
1. Introdução
É uma ferramenta para criar e gerenciar containers.
Responsável por armazenar vários serviços (containers) no sistema de forma isolada.
É um projeto que oferece a você um conjunto completo de ferramentas de alto nível para transportar tudo que constitui uma aplicação entre sistemas e máquinas - virtual ou física - e trás consigo grandes benefícios agregados.
Open source.
Versão atual: 1.12 (agosto/2016)
2. Como surgiu
O Docker nasceu em uma empresa de hospedagem chamada dotCloud.
Basicamente, a dotCloud usava containers internamente para executar códigos de clientes, e com o tempo, eles construíram uma monte de ferramentas úteis capazes de gerenciar muitos containers.
Em 2013, dotCloud percebeu que suas ferramentas poderiam ser úteis para outras pessoas e então lançaram como opensource, chamando de Docker.
Desde então, o projeto tornou vida própria, e tem crescido exponencialmente, além de diversas parcerias com grandes empresas como Google, RedHat, Rackspace e Canonical. (Fonte: https://www.ricardomartins.com.br/2014/09/11/docker-tutorial-mao-na-massa/)
3. O que são containers
De grosso modo, containers podem ser comparados com pequenas VMs. E eles permitem códigos e aplicações rodarem isoladamente de outros containers de forma muito rápida, compartilhando os mesmos recursos de hardware de forma segura e sem um hypervisor.(Fonte: https://www.ricardomartins.com.br/2014/09/11/docker-tutorial-mao-na-massa/)
Docker alcança sua robustez de conter a aplicação (e, portanto, de processos e recursos) via Contêineres Linux (por exemplo, namespaces e outras características do kernel). Seus novos recursos vêm de componentes e partes próprias do projeto, que extraem toda a complexidade de trabalhar com ferramentas/APIs Linux de baixo nível usadas para o sistema e para gerenciamento de aplicação, no que diz respeito a conter os processos com segurança. A seguir uma comparação do que o projeto propõe:
4. Máquinas virtuais x containers
5. Por quê usar?
a) Leve: Containers compartilham o mesmo kernel do host logo faz uso mais eficiente dos recursos do sistema dendo um overhead menor que maquina virtual e com seu sistema de “layers” reaproveita grande parte dos dados, logo deixa downloads e armazenamento bem mais eficiente
b) Seguro: Containers isolam aplicativos uns dos outros e da própria infra-estrutura fornecendo uma camada adicional de proteção
c) Agiliza processos: Com seus recursos de construção, herança, versionamento em segundos vocês realiza deploy da sua aplicações (ou aplicações) de forma inteligente e eficaz !
d) Elimina inconsistência: Como Docker empacota tudo (o sistema, libs, dependências, configuração) dentro do recipiente é possível trabalhar no ambiente de desenvolvimento, da mesma forma que o de produção, é entrega-lo exatamente como deve estar.
e) Torna suas aplicações portáveis e padronizada: Com os recursos Dockerfile, Dockerhub ou mesmo repositório git's em questão de segundos você distribuído (ou porta) sua aplicação de forma padronizada e documentada.
6. Rancher
Rancher é uma plataforma opensource 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.
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.
7. Estrutura do Docker
Estrutura | Definição |
---|---|
Docker Engine/server | É o “Docker” propriamente dito. Ele é instalado nos Hosts e efetua a criação e a execução dos Containers de aplicações. |
Docker Client/cli | É o componente onde o administrador emite os comandos que serão enviados para o Docker Engine (server). |
Docker Hub | É um repositório de imagens dos Containers. Basta criar uma conta e começar a usá-lo nos projetos. |
Docker Images | Imagens são como o template. Comparando com a programação orientada a objetos, seriam as classes, onde a partir delas são instanciados os objetos (contêineres), representam o estado no qual o conteiner a ser instanciado terá como estrutra. |
Contêineres docker | diretórios contendo tudo que constitui sua aplicação. São criados a partir de Imagens do Docker. Eles são as instâncias reais que iremos utilizar. Eles podem ser inicializados, interrompidos, deletados, etc. |
Dockerfile | O Docker permite que possamos criar imagens a partir de um arquivo de definição (Dockerfile), onde é possível realizar ou preparar todo ambiente a partir de um script de execução. |
Volumes de dados | É uma função para realizarmos a persistência de dados uma vez que containers são projetados para descarta-lo após seu uso. |
Mapeamento de Porta | Por padrão Docker não exporta suas portas para o mundo real. Mapeamento de dados é a função para expor essas portas no host. |
Link entre container | Links são a funções de um container se comunicar diretamente com outro sem a necessidade de expo-lo para a rede real. |
Docker-compose | Arquivo de definição de serviços. Com o Docker Compose, você usa um arquivo do tipo .yaml para definir como será o ambiente de sua aplicação, e usando um único comando você criará e iniciará todos os serviços definidos. Você pode utilizar ele para simular todo o ambiente de produção. Quando você executar o docker-compose up, todo esse ambiente está disponível para você. Para usar o Docker Compose, é necessário definir antes o ambiente necessário para sua aplicação utilizando um Dockerfile. |
O nosso docker compose é escrito semelhante à figura abaixo, com a diferença que usamos o framework django ao invés do flask:
Última revisão: ~~LASTMOD~~