Introdução ao Docker
Tags: webdev, beginners, programming, docker
Published: 2022-02-14 15:46:28


## O que é o Docker

**Docker** é uma empresa de conteinerização que permite a criação e uso de **containers Linux**.

Com o **Docker**, você pode tratar containers como máquinas virtuais modulares extremamente leves. Além de obter flexibilidade com esses containers, você pode criar, implantar, copiar e movê-los de um ambiente para outro, o que ajuda a otimizar seus aplicativos para a nuvem.

Em poucas palavras, o Docker é um programa de computador, uma ferramenta de linha de comando, uma plataforma de conteinerização, um produto e uma empresa.

## O que são Containers

Containers são uma forma de virtualização a nível de sistema operacional que permite rodar múltiplos sistema isolados em um único sistema operacional

Uma virtualização comum, como por exemplo o VMware, é muito pesada e não performática.

Container não é como uma virtualização comum, a diferença principal, é que os containers conseguem compartilhar o mesmo kernel do sistema operacional, sendo assim muito mais performático.

Outra diferença de uma virtualização comum, é que, um container não deve ser utilizado para abrigar várias aplicações, e é justamente por isso que ele ocupa muito menos espaço que uma VM. Sua tendência é de manter somente o essencial no seu conteúdo.

## O que são Imagens Docker

A imagem do Docker é aquela que vem com o código e pode ser executada em qualquer plataforma onde o Docker Engine esteja instalado.
Vamos dar um exemplo: Pense que um desenvolvedor escreve código e então ele empacota todo o código, dependências, instaláveis ​​etc em um arquivo chamado Dockerfile e cria uma imagem a partir dele. Agora esta imagem se for dada a qualquer desenvolvedor em qualquer plataforma será executada no Docker Engine como um container. As imagens do Docker são o núcleo de todo o Docker como plataforma. O Docker Image segue uma arquitetura em camadas que ajuda a imagem ser construída mais rapidamente.

Imagens podem se referir a praticamente qualquer tipo de container. Um exemplo disso é pensar o próprio sistema operacional Ubuntu, que possui [uma imagem oficial no Docker Hub](https://hub.docker.com/_/ubuntu) .

O [Docker Hub](https://hub.docker.com/) é o principal repositório de imagens *Docker* atualmente. Nele, possuímos o que é chamado de [Registro](https://docs.docker.com/registry/introduction/) *(Registry)* *, onde requisitamos essas imagens.

> * O Registry é um sistema de armazenamento e entrega, no qual podemos ter um usuário com nossas próprias imagens. Algo que lembra muito o GitHub, já que podemos dar pull nessas imagens para uso posterior.
>

## Fluxo entre Containers e Imagens

Para explicar melhor a dinâmica entre **containers e imagens**, falaremos um pouco de como funciona o fluxo padrão do *Docker* :

![Exemplo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dxvsy8pcingek6avpeer.png)

##### Fluxo padrão do Docker

- Tudo começa em um arquivo chamado `Dockerfile` . Este arquivo possui as instruções* necessárias para que possamos gerar uma imagem;

> * Aqui vão instruções de qual sistema operacional usar, tal como quais comandos devem ser executados quando a imagem for rodada em um container .
> 
- Após isso, podemos dar `push` ou `pull` *(como em um repositório do GitHub)* em uma imagem no `Registry` *;

> * Você pode dar pull na sua própria imagem (caso tenha dado `push` nela) ou em outra a sua escolha.
> 
> 
> O Registro mais comum é o `Docker Hub` , mas temos outros exemplos, como mostrado na imagem.
> 
- Por último, rodamos a imagem em um `container` , *utilizando o comando `run` .*

> * Após isso, temos que dizer pro container o que deve acontecer, se ele deve se manter ativo ou não, caso o contrário, o container é encerrado. O que faz parte de seu ciclo de vida.
> 

## Como instalar o Docker

Siga os links do tutorial direto da documentação oficial do Docker.

[**Ubuntu**](https://docs.docker.com/engine/install/ubuntu/)
[**Debian**](https://docs.docker.com/engine/install/debian/)
[**Fedora**](https://docs.docker.com/engine/install/fedora/)
[**MacOS**](https://docs.docker.com/desktop/mac/install/)
[**Windows**](https://docs.docker.com/desktop/windows/install//)