Introdução aos contêineres e ao DockerIntroduction to Containers and Docker

O uso de contêineres é uma abordagem de desenvolvimento de software na qual um aplicativo ou serviço, suas dependências e sua configuração (abstraídos como arquivos de manifesto de implantação) são empacotados juntos como uma imagem de contêiner.Containerization is an approach to software development in which an application or service, its dependencies, and its configuration (abstracted as deployment manifest files) are packaged together as a container image. O aplicativo em contêineres pode ser testado como uma unidade e implantado como uma instância de imagem de contêiner no SO (sistema operacional) do host.The containerized application can be tested as a unit and deployed as a container image instance to the host operating system (OS).

Assim como os contêineres de remessa permitem que as mercadorias sejam transportadas por navio, trem ou caminhão, independentemente da carga que contenham, os contêineres de implantação de software agem como uma unidade de software padrão que pode conter diferentes dependências e códigos.Just as shipping containers allow goods to be transported by ship, train, or truck regardless of the cargo inside, software containers act as a standard unit of software deployment that can contain different code and dependencies. Inserir o software em contêineres dessa maneira permite que desenvolvedores e profissionais de TI os implantem em diferentes ambientes com pouca ou sem nenhuma modificação.Containerizing software this way enables developers and IT professionals to deploy them across environments with little or no modification.

Os contêineres também isolam os aplicativos uns dos outros em um sistema operacional compartilhado.Containers also isolate applications from each other on a shared OS. Os aplicativos em contêineres são executados com base em um host do contêiner que por sua vez é executado no sistema operacional (Linux ou Windows).Containerized applications run on top of a container host that in turn runs on the OS (Linux or Windows). Os contêineres, portanto, ocupam um espaço significativamente menor do que as imagens de VM (máquina virtual).Containers therefore have a significantly smaller footprint than virtual machine (VM) images.

Cada contêiner pode executar um aplicativo Web ou um serviço inteiro, conforme é mostrado na Figura 2-1.Each container can run a whole web application or a service, as shown in Figure 2-1. Neste exemplo, o host do Docker é um host de contêiner e App1, App2, Svc 1 e Svc 2 são aplicativos ou serviços em contêineres.In this example, Docker host is a container host, and App1, App2, Svc 1, and Svc 2 are containerized applications or services.

Dois aplicativos e dois serviços em execução no sistema operacional em uma VM ou em um servidor físico

Figura 2-1.Figure 2-1. Vários contêineres em execução em um host de contêinerMultiple containers running on a container host

Outro benefício do uso de contêineres é a escalabilidade.Another benefit of containerization is scalability. Você pode aumentar rapidamente, criando novos contêineres para tarefas de curto prazo.You can scale out quickly by creating new containers for short-term tasks. Do ponto de vista do aplicativo, criar uma instância de uma imagem (criar um contêiner) é semelhante a criar uma instância de um processo, como um serviço ou aplicativo Web.From an application point of view, instantiating an image (creating a container) is similar to instantiating a process like a service or web app. No entanto, para assegurar a confiabilidade, ao executar várias instâncias da mesma imagem em vários servidores host, geralmente é melhor que cada contêiner (instância da imagem) seja executado em um servidor host ou em uma VM diferente em domínios de falha diferentes.For reliability, however, when you run multiple instances of the same image across multiple host servers, you typically want each container (image instance) to run in a different host server or VM in different fault domains.

Resumindo, os contêineres oferecem os benefícios de portabilidade, agilidade, escalabilidade, controle e isolamento em todo o fluxo de trabalho do ciclo de vida do aplicativo.In short, containers offer the benefits of isolation, portability, agility, scalability, and control across the whole application lifecycle workflow. O benefício mais importante é o isolamento de ambiente fornecido entre Desenvolvimento e Operações.The most important benefit is the environment's isolation provided between Dev and Ops.