====== 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 ===== {{:sistemas:suap:docker-vm-container.png|}} ===== 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: {{ :sistemas:suap:docker-compose.png?600 |}} ----------- Última revisão: ~~LASTMOD~~ ---------------- [[sistemas:suap:acessodgti|Voltar à página Principal do SUAP (Acesso DGTI)]]