Qual é a diferença entre imagens e contêineres do Docker?

Imagens e contêineres do Docker são tecnologias de implantação de aplicações. Tradicionalmente, para executar qualquer aplicação, era necessário instalar a versão que correspondesse ao sistema operacional da sua máquina. No entanto, agora você pode criar um único pacote de software, ou contêiner, que é executado em todos os tipos de dispositivos e sistemas operacionais. O Docker é uma plataforma de software que empacota software em contêineres. Imagens do Docker são modelos somente leitura que contêm instruções para criar um contêiner. Uma imagem do Docker é um snapshot ou modelo das bibliotecas e dependências necessárias dentro de um contêiner para que uma aplicação seja executada.

Leia sobre o Docker »

Por que imagens e contêineres do Docker são usados?

Os contêineres permitem que os desenvolvedores empacotem software para execução em qualquer sistema de destino. Anteriormente, era necessário empacotar software especificamente para diferentes sistemas de destino. Por exemplo, se você quisesse que uma aplicação fosse executada no macOS e no Windows, precisava alterar o design da aplicação e empacotá-la para os diferentes sistemas.

A estruturação em contêiner permite que uma aplicação de software seja executada como microsserviços em arquiteturas de hardware distribuídas e multiplataformas. Como os contêineres são altamente portáteis, essas aplicações de software são executadas em praticamente qualquer máquina com implantação rápida. Por exemplo, uma aplicação corporativa pode ter centenas de microsserviços. Estes poderiam ser executados como contêineres em várias máquinas e máquinas virtuais (VMs) em um datacenter dedicado e na nuvem.

Como funcionam: imagens do Docker vs. contêineres do Docker

O Docker é uma plataforma de estruturação em contêiner que você pode usar para empacotar software em contêineres e executá-los nas máquinas de destino. Os contêineres do Docker são executados em qualquer máquina ou máquina virtual em que o mecanismo do Docker esteja instalado. E eles são executados sem o conhecimento da arquitetura subjacente do sistema. O mecanismo Docker só funciona no sistema operacional Linux. Um contêiner do Docker é um contêiner feito usando a plataforma de estruturação em contêiner Docker; há também outras plataformas de estruturação em contêiner menos populares.

Leia sobre conteinerização »

Como funcionam os contêineres do Docker

Um contêiner do Docker é um ambiente de runtime com todos os componentes necessários, como código, dependências e bibliotecas, necessários para executar o código da aplicação sem usar dependências da máquina host. Esse runtime de contêiner é executado no mecanismo em um servidor, máquina ou instância de nuvem. O mecanismo opera vários contêineres, dependendo dos atributos subjacentes disponíveis. 

Para implantar e escalar um conjunto de contêineres para se comunicar de forma eficaz em diferentes máquinas ou máquinas virtuais, você precisa de uma plataforma de orquestração de contêineres como o Kubernetes. Isso é útil não importa se as suas máquinas estejam on-premises ou na nuvem. O Kubernetes gerencia várias máquinas, conhecidas como cluster, dentro do contexto das operações de contêineres.

Leia sobre o Kubernetes »

Como as imagens do Docker funcionam

Uma imagem do Docker, ou imagem de contêiner, é um arquivo executável independente usado para criar um contêiner. Essa imagem de contêiner contém todas as bibliotecas, dependências e arquivos de que o contêiner precisa para ser executado. Uma imagem do Docker é compartilhável e portátil, então você pode implantar a mesma imagem em vários locais ao mesmo tempo, da mesma forma que um arquivo binário de software. 

Você pode armazenar imagens em registros para acompanhar arquiteturas de software complexas, projetos, segmentos de negócios e acesso a grupos de usuários. Por exemplo, o registro público do Docker Hub contém imagens como sistemas operacionais, estruturas de linguagem de programação, bancos de dados e editores de código. 

Comandos principais: imagens do Docker vs. contêineres do Docker

Você usa comandos com parâmetros para manipular contêineres do Docker. O formato de comando padrão é docker [opções] [comando] [argumentos].

Comandos de contêiner

A tabela a seguir contém comandos de contêiner usados com frequência. Há vários outros listados na documentação do Docker.

Comando

Explicação

docker ps -a

Lista todos os contêineres. O sinalizador -a mostra contêineres em execução e não em execução. Para exibir somente contêineres em execução, esse sinalizador pode ser omitido.

docker rename [contêiner] [novo_nome]

Renomeia o contêiner fornecido como novo_nome.

docker start [contêiner]

Executa o contêiner fornecido.

docker stop [contêiner]

Interrompe o contêiner fornecido.

docker wait [contêiner]

Faz com que o contêiner especificado espere até que outros contêineres em execução sejam interrompidos.

Comandos de imagem

Há menos comandos de imagem em comparação aos comandos de contêiner.

Docker build -t image_name .

Cria uma imagem do Docker com a tag image_name a partir dos arquivos no diretório atual.

docker create [imagem]

Cria um contêiner não executado a partir da imagem fornecida.

docker run [imagem] 

Cria e executa um contêiner com base na imagem fornecida.

Criação de contêineres do Docker a partir de imagens do Docker

Para criar um contêiner a partir de uma imagem específica do Docker, inicie o mecanismo em uma máquina. Em seguida, use o comando básico de execução do Docker.

Aqui está um exemplo de comando:

docker run -it MyImage bash

Esse comando cria um contêiner a partir de um arquivo de imagem chamado MyImage. O sinalizador -it cria um pseudo-terminal dentro do contêiner em execução. E, ao especificar bash como um comando, um terminal bash é aberto dentro do contêiner.

Principais diferenças: imagens do Docker vs. contêineres do Docker

Um contêiner do Docker é uma aplicação ou um serviço de software independente e executável. Por outro lado, uma imagem do Docker é o modelo carregado no contêiner para executá-lo, como um conjunto de instruções.

Você armazena imagens para compartilhamento e reutilização, mas cria e destrói contêineres durante o ciclo de vida de uma aplicação. A seguir, apresentaremos mais diferenças.

Fonte

Você cria uma imagem do Docker a partir de um Dockerfile, um arquivo de texto legível por humanos semelhante a um arquivo de configuração. O Dockerfile contém todas as instruções para criar a imagem. Você precisa colocar o Dockerfile junto com todas as bibliotecas e dependências associadas em uma pasta para criar a imagem.

Por outro lado, você cria contêineres do Docker diretamente do arquivo de imagem do Docker. 

Composição

O arquivo de imagem do Docker é composto por camadas de imagem para manter o tamanho do arquivo pequeno.  Cada camada representa uma alteração feita na imagem. As camadas são somente para leitura e podem ser compartilhadas entre vários contêineres.

O contêiner do Docker, sendo uma instância de imagem, também contém camadas. No entanto, ele tem uma camada adicional gravável no topo, conhecida como camada de contêiner. A camada de contêiner permite acesso para leitura e gravação. Ela também permite que qualquer alteração feita no contêiner seja isolada de outros contêineres com base na mesma imagem.

Mutabilidade

As imagens do Docker são imutáveis, o que significa que não podem ser modificadas depois de criadas. Se for necessário fazer alterações em uma imagem, você deverá criar uma nova imagem com as modificações desejadas.

Por outro lado, contêineres são mutáveis e permitem modificações durante o runtime. As alterações feitas em um contêiner são isoladas desse contêiner específico e não afetam a imagem associada. Alguns exemplos de alterações são quando você grava novos arquivos, instala softwares ou modifica configurações.

Quando usar: imagens do Docker vs. contêineres do Docker

Você pode usar imagens e contêineres do Docker em combinação uns com os outros ao criar e implantar softwares.

Você usa contêineres para criar aplicações uma vez e executá-las em qualquer lugar. Você pode iniciar, parar e reiniciar contêineres rapidamente conforme necessário. Portanto, é fácil aumentar ou diminuir a escala verticalmente com base na demanda da aplicação.

Dito isso, o gerenciamento é mais fácil quando você usa imagens e contêineres ao mesmo tempo. Por exemplo, veja como você pode usá-los juntos:

  • Ajuste a escala da sua aplicação horizontalmente executando várias instâncias de contêineres com base na mesma imagem.
  • Automatize os pipelines de integração e implantação contínuas (CI/CD) usando imagens diferentes para ambientes de desenvolvimento, teste e produção.
  • Marque e gerencie diferentes versões das suas imagens. Isso ajuda você a reverter ou implantar versões específicas conforme necessário.

Resumo das diferenças: imagens do Docker vs. contêineres do Docker

 

Imagem do Docker

Contêiner do Docker

O que é isso?

Um arquivo reutilizável e compartilhável usado para criar contêineres.

Uma instância de runtime; um software independente.

Criado a partir de

Código de software, dependências, bibliotecas e um Dockerfile.

Uma imagem.

Composição

Camadas somente leitura.

Camadas somente leitura com uma camada adicional de leitura e gravação na parte superior.

Mutabilidade

Imutável. Se houver alterações, você precisará criar um novo arquivo.

Mutável; você pode alterá-la em runtime, conforme necessário.

Quando usar

Para armazenar detalhes da configuração da aplicação como um modelo. 

Para executar a aplicação.

Como a AWS pode ajudar com seus requisitos de contêiner e imagem?

A Amazon Web Services (AWS) tem muitas ofertas que fornecem um local seguro para armazenar e gerenciar suas imagens de contêiner.

Oferecemos orquestração que gerencia quando e onde seus contêineres são executados e mecanismos de computação flexíveis que os alimentam. A AWS pode ajudar a gerenciar os contêineres e as implantações deles para que você não precise se preocupar com a infraestrutura subjacente. Para obter mais informações, acesse Contêineres na AWS.

O Amazon Elastic Container Registry (Amazon ECR) é um registro de contêiner totalmente gerenciado que oferece hospedagem de alta performance. Assim, você pode implantar de forma confiável imagens e artefatos de aplicações em qualquer lugar. Os desenvolvedores que criam aplicações baseadas em contêineres agora podem descobrir e baixar imagens oficiais do Docker diretamente do Amazon ECR Public.

O Amazon Elastic Container Service (Amazon ECS) é um serviço totalmente gerenciado de orquestração de contêineres. Ele simplifica a implantação, o gerenciamento e o ajuste de escala de aplicações em contêineres. O Amazon ECS usa imagens do Docker em definições de tarefas para lançar contêineres.

Comece a usar o Docker na AWS criando uma conta hoje mesmo.

Próximas etapas com a AWS