Docker Image vs Container

Docker Image vs Container

Compreender o processo que o Docker usa para armazenar dados por meio de imagens e contêineres ajudará você a projetar melhor seus aplicativos do Docker. As imagens do Docker são como modelos, enquanto os contêineres do Docker são as instâncias de execução criadas a partir desses modelos. Docker usa uma abordagem em camadas para armazenar imagens e recipientes.

Imagens e camadas

Uma imagem do docker é criada a partir de várias camadas. Se tomarmos um exemplo de Dockerfile, todas as instruções são convertidas em uma camada. Aqui está um Dockerfile simples:

Do nó: 6.9.2
Cópia do servidor.JS .
CMD Node Server.JS

Cada linha no Dockerfile acima criará uma camada. A declaração de From procurará o nó: 6.9.2 imagem no registro local. Se não o encontrar lá, será baixá -lo no Hub do Docker. Em seguida, o Docker criará a primeira camada. A próxima declaração de cópia adiciona o servidor.arquivo js para a imagem como segunda camada. A última camada executa um nó.Aplicação JS. Todas essas camadas estão empilhadas umas sobre as outras. Cada camada adicional é adicionada como uma diferença da camada antes dela.


Recipientes e camadas

Recipientes são criados a partir de imagens. Quando um recipiente é criado a partir de uma imagem, uma fina camada de leitura/gravação é colocada em cima da imagem (observe que as camadas de imagem são imutáveis, as camadas de contêiner não são). Quaisquer alterações feitas no contêiner são colocadas nesta camada de leitura/gravação durante a vida útil do contêiner. Quando um recipiente é excluído, a camada de leitura/gravação fina associada é removida. Isso significa que vários contêineres podem compartilhar a mesma imagem. Cada camada de contêiner manterá seus próprios dados com segurança em cima da imagem do Docker.


Imagens e recipientes

Vamos tentar um exemplo simples. Você pode usar o comando Docker Images para encontrar todas as imagens:

$ Docker Images
ID da imagem da tag repositório Tamanho criado

E o comando PS Docker para encontrar contêineres:

$ docker ps
Comando de imagem de identificação de contêiner nomes de portas de status criados

Esta é uma instalação fresca do Docker. Portanto, não há imagem ou recipiente presente. Você pode executar o Docker Run -Node: 6.9.2 comando para iniciar um contêiner.

$ Docker Run -Nó: 6.9.2
Incapaz de encontrar a imagem 'Nó: 6.9.2 'localmente
6.9.2: puxando da biblioteca/nó
75A822CD7888: Pull completo
57DE64C72267: Puxe completo
4306BE1E8943: Puxe completo
871436AB7225: Puxe completo
0110C26A367A: Pull completo
1F04FE713F1B: Pull completo
AC7C0B5FB553: Pull completo
Digest: SHA256: 2E95BE60FAF429D6C97D928C762CB36F1940F4456CE4BD33FBDC34DE94A5E043
STATUS: Baixada Imagem mais recente para o nó: 6.9.2
>

Agora, se verificarmos novamente as imagens do Docker, encontramos:

$ Docker Images
ID da imagem da tag repositório Tamanho criado
Nó 6.9.2 faaadb4aaf9b 11 meses atrás 655 MB

E se verificarmos o contêiner, encontramos:

$ docker ps
Comando de imagem de identificação de contêiner nomes de portas de status criados
8C48C7E03BC7 Nó: 6.9.2 "nó" 20 segundos atrás de 18 segundos reverent_jackson

Se iniciarmos outro contêiner da mesma imagem usando o comando:

$ Docker Run -Nó: 6.9.2

E verifique novamente, vemos:

$ Docker Images
ID da imagem da tag repositório Tamanho criado
Nó 6.9.2 faaadb4aaf9b 11 meses atrás 655 MB

E

$ docker ps
Comando de imagem de identificação de contêiner nomes de portas de status criados
96E6DB955276 Nó: 6.9.2 "nó" 24 segundos atrás, 23 segundos cocky_dijkstra
8C48C7E03BC7 Nó: 6.9.2 "nó" 4 minutos atrás, 4 minutos reverent_jackson

Os dois contêineres com ID de contêiner 96E6DB955276 e 8C48C7E03BC7 estão funcionando na parte superior da imagem do Docker com o ID da imagem FAAADB4AAF9B. As finas camadas de leitura/gravação dos recipientes do docker estão residindo em cima da camada da imagem do docker.

Dicas:

Você pode remover os contêineres do Docker com o comando Docker RM [ID do contêiner] e remover imagens do Docker com o comando Docker RMI [ID da imagem].

O nó da imagem: 6.9.2 Download do Docker Hub também é criado combinando várias camadas. Você pode verificar as camadas de imagens usando o histórico do Docker [ID da imagem].

$ Docker History Faaadb4aaf9b
Imagem criada por tamanho
faaadb4aaf9b 11 meses atrás /bin /sh -c #(nop) cmd ["nó"] 0b
11 meses atrás/bin/sh -c Curl -slo "https: // nodejs.org/d 42.5 MB
11 meses atrás /bin /sh -c #(nop) Env node_version = 6.9.2 0b
11 meses atrás /bin /sh -c #(NOP) Env npm_config_loglevel 0b
11 meses atrás /bin /sh -c set -ex && para chave em 955 108kb
11 meses atrás /bin /sh -c Groupadd -Gid 1000 Node && u 335kb
11 meses atrás /bin /sh -c apt-get update && apt-get insta 323mb

Conclusão

Uma maneira popular de explicar imagens e contêineres é comparar uma imagem com uma classe e um contêiner com a instância dessa classe. A abordagem em camadas de imagens e recipientes do docker ajuda a manter o tamanho de imagens e recipientes pequenos.

Referências:

  • https: // docs.Docker.com/mecanismo/userguida/storagedriver/imagens eContainers/
  • Docker Image vs Container
  • https: // Stackoverflow.com/questões/23735149/docker-image-vs-container