# Conceitos

#### docker

O Docker é uma plataforma de código aberto que facilita a criação de ambientes isolados durante o desenvolvimento de software. Isso é importante para a gestão da infraestrutura da aplicação, desde a criação até a modificação dos serviços.

Na prática, o Docker age como uma `máquina virtual` que roda software dentro de outro sistema operacional. O conceito de `container Linux` é anterior à tecnologia do docker ([Leia mais - O que é um container Linux](https://www.redhat.com/pt-br/topics/containers/whats-a-linux-container)).

Vantagens:

- rodar seus contêineres com menor gasto de recursos;
- funcionalidades de segurança que tornaram a tecnologia bem popular nos dias atuais;
- evitar o problema do [inferno das dependências](https://www.alura.com.br/artigos/o-que-e-inferno-de-dependencias-como-utilizar-dependabot);
- garantir que as mesmas versões e dependências utilizadas no ambiente de desenvolvimento e testes seja utilizada no ambiente de produção.

#### docker x virtualização

Os contêineres do Docker têm seu próprio sistema de arquivos, estrutura de dependências, processos e recursos de rede. A aplicação tem tudo o que precisa dentro do contêiner e pode ser executada em qualquer lugar. A tecnologia de contêiner do Docker usa **diretamente** os recursos subjacentes do kernel do sistema operacional host.

As máquinas virtuais (VMs) fornecem a virtualização de uma **máquina inteira** (servidor). Uma máquina virtual emula os componentes de hardware de uma máquina física, como CPU, memória, placa de interface de rede, controladores USB e placas de som. Você pode executar um sistema operacional convidado e várias aplicações no ambiente virtual.

[![Container-VM-Comparison.png](https://documentacao.ufvjm.edu.br/uploads/images/gallery/2024-07/scaled-1680-/uJp0Z0wuzPLtPEya-container-vm-comparison.png)](https://documentacao.ufvjm.edu.br/uploads/images/gallery/2024-07/uJp0Z0wuzPLtPEya-container-vm-comparison.png)

**Comparação de docker e máquinas virtuais**

#### container

O que é construído pelo Docker. É uma aplicação encapsulada, construída com as bibliotecas e dependências necessárias, e que pode ser executada em qualquer lugar que o Docker esteja instalado.

#### host

É a máquina que possui o Docker instalado e que executará os contêineres (no nosso caso, a máquina local).

#### porta

O mapeamento de portas é utilizado para acessar o serviço que roda dentro do contêiner. Nós abrimos uma porta no host para nos dar acesso à porta correspondente dentro do contêiner docker. Dessa forma, todas as requisições que são feitas no host podem ser direcionadas para dentro do contêiner docker.

#### volume

O sistema de arquivos do contêiner é volátil, quando o contêiner é destruído, todos os arquivos se perdem. O volume são diretórios externos ao contêiner, que são montados diretamente nele e, desse forma, não seguem esse padrão de volatilidade padrão dos demais arquivos, portanto os volumes são persistidos.

#### image

Uma imagem é como uma versão *congelada* de um contêiner. As imagens são criadas através de um arquivo chamado `Dockerfile` ou de um contêiner em execução.

#### tag

A tág é uma versão específica de uma imagem docker. Geralmente ela é associada da uma determinada versão do serviço principal que é oferecido em um determinado contêiner. Por convenção, a versão mais recente de uma imagem é disponibilizada na tag `latest`.

#### workdir

É a pasta padrão de trabalho do contêiner. Quando você entra dentro do contêiner, ou executa um comando nele, caso não seja fornecido o caminho completo, será executado por padrão a partir desta pasta.

#### docker compose

Uma ferramenta para definição e execução de múltiplos containers Docker. Com ela é possível configurar todos os parâmetros necessários para executar cada container a partir de um arquivo de definição.

#### hub

É um local (repositório docker) onde são armazenadas as imagens docker. Pode ter acesso público ou restrito.

#### Referências

[Docker (software)](https://pt.wikipedia.org/wiki/Docker_(software))

[O que é Docker, principais vantagens e quando utilizá-lo no desenvolvimento de software?](https://logap.com.br/blog/o-que-e-docker/)

[Docker: tudo o que você precisa saber](https://www.zup.com.br/blog/o-que-e-docker-e-conteiner)

[O que é Docker: Um Guia Completo](https://kinsta.com/pt/base-de-conhecimento/que-e-docker/)

[Qual é a diferença entre o Docker e uma VM?](https://aws.amazon.com/pt/compare/the-difference-between-docker-vm/)