Pular para conteúdo

Docker

Docker é uma plataforma de software que permite a criação, o envio e a execução de aplicações em contêineres. Os contêineres são unidades leves e portáteis que podem ser executadas em qualquer ambiente que tenha o Docker instalado, garantindo que a aplicação funcione da mesma forma, independentemente do sistema operacional subjacente.

Um contêiner é uma unidade leve e portátil que encapsula uma aplicação e todas as suas dependências, incluindo bibliotecas e configurações, permitindo que a aplicação seja executada de maneira consistente em qualquer ambiente, seja em um servidor local, em um data center ou na nuvem. Ao contrário das máquinas virtuais, que virtualizam o hardware, os contêineres compartilham o mesmo núcleo do sistema operacional, o que os torna mais eficientes em termos de recursos e mais rápidos para iniciar. Os contêineres são isolados uns dos outros, garantindo que cada aplicação tenha seu próprio ambiente, o que minimiza conflitos de dependências e facilita a escalabilidade e a portabilidade das aplicações. Tecnologias como Docker popularizaram o uso de contêineres, proporcionando ferramentas que simplificam a criação, gerenciamento e orquestração de contêineres em ambientes de produção.

mmd

Conceitos Fundamentais

1. Contêineres

  • Definição: Um contêiner é uma instância de uma imagem Docker em execução. Ele encapsula tudo o que uma aplicação precisa para rodar: código, bibliotecas, dependências e configurações.
  • Isolamento: Contêineres compartilham o mesmo núcleo do sistema operacional, mas são isolados entre si e do host, permitindo que várias aplicações sejam executadas de forma segura e eficaz no mesmo sistema.

2. Imagens

  • Definição: Uma imagem Docker é uma construção estática que contém todos os arquivos necessários para executar uma aplicação. Ela é composta de camadas, onde cada camada representa uma alteração em relação à camada anterior.
  • Criação: As imagens são geralmente criadas através de um arquivo chamado Dockerfile, que contém instruções sobre como construir a imagem.

3. Dockerfile

  • Definição: Um Dockerfile é um script de texto que contém uma série de comandos que o Docker utiliza para construir uma imagem.
  • Exemplo de Comandos:
  • FROM: Define a imagem base.
  • RUN: Executa comandos durante a construção da imagem.
  • COPY: Copia arquivos do sistema de arquivos do host para a imagem.
  • CMD: Define o comando padrão a ser executado quando um contêiner é iniciado a partir da imagem.

4. Docker Hub

  • Definição: O Docker Hub é um repositório público onde os usuários podem armazenar e compartilhar imagens Docker.
  • Uso: As imagens podem ser baixadas do Docker Hub ou de repositórios privados, permitindo fácil acesso a imagens pré-construídas e compartilhamento de suas próprias imagens.

Expondo portas no docker

O comando docker run é utilizado para criar e iniciar um novo contêiner a partir de uma imagem Docker, especificando o comando a ser executado dentro desse contêiner através do parâmetro CMD (ou ENTRYPOINT), que define o que deve ser executado quando o contêiner é iniciado. Por outro lado, o comando docker exec é utilizado para executar um novo comando em um contêiner que já está em execução, permitindo que você interaja com o contêiner sem precisar reiniciá-lo ou criar uma nova instância. Enquanto docker run inicializa um novo ambiente isolado com suas próprias configurações e processos, docker exec permite a execução de comandos adicionais dentro do contexto de um contêiner existente, ideal para tarefas administrativas, como acessar um shell ou executar scripts, mantendo a natureza persistente do contêiner já ativo. Essa distinção entre os dois comandos é crucial para a gestão eficiente de contêineres em ambientes de desenvolvimento e produção.

A exposição de portas no Docker é um mecanismo que permite que os serviços em contêineres se comuniquem com o mundo externo, facilitando o acesso a aplicações em execução dentro desses contêineres. Ao criar um contêiner, você pode utilizar a opção -p (ou --publish) para mapear uma porta do contêiner para uma porta do host, permitindo que tráfego que chega a essa porta no host seja redirecionado para a porta correspondente no contêiner. Por exemplo, ao executar docker run -p 8080:80, você está mapeando a porta 80 do contêiner (onde uma aplicação web pode estar escutando) para a porta 8080 do host, permitindo que usuários acessem a aplicação através da URL http://localhost:8080. Além disso, ao expor portas, você pode definir quais serviços estão acessíveis externamente, melhorando a segurança e o controle sobre o tráfego de rede. Essa funcionalidade é essencial para a implementação de aplicações em contêineres que precisam interagir com usuários ou outros serviços fora do ambiente isolado do contêiner.

Vantagens do Docker

1. Portabilidade

  • As aplicações em contêineres podem ser executadas em qualquer lugar que suporte Docker, eliminando problemas de "funciona na minha máquina".

2. Eficiência

  • Os contêineres são mais leves que máquinas virtuais, pois compartilham o núcleo do sistema operacional. Isso resulta em menor consumo de recursos e tempos de inicialização mais rápidos.

3. Isolamento

  • Cada contêiner é isolado, o que significa que as aplicações podem operar em ambientes diferentes sem conflitos de dependências ou configurações.

4. Escalabilidade

  • Docker facilita a escalabilidade horizontal, permitindo que múltiplas instâncias de um contêiner sejam executadas em paralelo para atender a picos de demanda.

5. DevOps e CI/CD

  • Docker se integra bem com práticas de DevOps e pipelines de integração contínua/entrega contínua (CI/CD), permitindo que desenvolvedores e operadores trabalhem juntos de maneira mais eficaz.

Casos de Uso Comuns

  1. Desenvolvimento Local: Desenvolvedores podem usar Docker para criar ambientes de desenvolvimento consistentes e replicáveis.
  2. Microservices: Docker é frequentemente usado em arquiteturas de microservices, onde cada serviço pode ser executado em seu próprio contêiner.
  3. Testes Automatizados: É possível configurar ambientes de testes que podem ser criados e destruídos rapidamente, garantindo que os testes sejam executados em condições controladas.
  4. Implantação em Nuvem: Docker facilita a implantação de aplicações em ambientes de nuvem, como AWS, Google Cloud e Azure, onde contêineres podem ser gerenciados e orquestrados de forma eficaz.

Orquestração de Contêineres

Para gerenciar múltiplos contêineres, ferramentas de orquestração como Kubernetes e Docker Swarm são frequentemente utilizadas. Essas ferramentas permitem a automação do deployment, escalabilidade e gerenciamento de contêineres em larga escala.