# Como Instalar ou Atualizar o Docker e o Docker Compose

---

%[https://youtu.be/FIITx7u7XYw] 

---

## Introdução

Explorar as possibilidades da tecnologia de containers é uma jornada emocionante para desenvolvedores e profissionais de DevOps. O Docker e o Docker Compose são ferramentas importantes e suas instalações podem ser uma experiência única e empolgante, especialmente ao explorar novos caminhos para otimizar o ambiente de desenvolvimento.

Existem duas versões do Docker:

* `Docker CE (Community Edition)`: é uma versão gratuita e de código aberto do Docker, adequada para uso pessoal e em pequenas e médias empresas. O suporte é principalmente fornecido pela comunidade e pode ser mais limitado em comparação com o Docker EE.
    
* `Docker EE (Enterprise Edition)`: é uma versão paga do Docker, projetada para uso em ambientes corporativos e em grande escala. Ela oferece suporte comercial, SLAs (Service Level Agreements) e recursos adicionais voltados para segurança, conformidade e integração.
    

Neste artigo, compartilho como tenho feito a instalação ou atualização do Docker CE (Community Edition) e do Docker Compose que são gratuitos. Além disso, vou detalhar como essa instalação pode ser realizada de forma eficiente no contexto do Windows, aproveitando o WSL2 (`Windows Subsystem for Linux 2`) e dispensando a necessidade do aplicativo Docker Desktop.

---

<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">Para uma melhor compreensão do processo de instalação do Docker no Windows, é importante destacar algumas considerações específicas para esse sistema operacional. No entanto, se você já estiver familiarizado com o ambiente Linux, pode pular diretamente para as instruções de instalação. Por outro lado, se você estiver utilizando o Windows, recomendo que leia esta seção inicial para obter um contexto mais abrangente antes de prosseguir com o tutorial de instalação.</div>
</div>

---

## Para Usuários do Windows

Se você usa o Windows, não se preocupe, poderá fazer a instalação deste artigo sem problemas, mas antes de seguirmos em frente, é interessante que você saiba que há duas formas de instalar o Docker no Windows:

### Opção 1 - Aplicativo Docker Desktop

Não há muitas novidades aqui, você pode fazer essa instalação:

1- Acesse o site oficial:

* 👉 [https://www.docker.com/products/docker-desktop/](https://www.docker.com/products/docker-desktop/)
    

2- Clique em `Download for Windows`:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713207054337/47313ae9-d6d1-4f0f-8b5b-927a52c9b6e4.png align="center")

<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">Para concluir a instalação, basta seguir as etapas padrão, semelhantes a qualquer outro aplicativo no Windows, clicando em <code>Next → Next → Finish</code>.</div>
</div>

Ao final, você pode obter um resultado semelhante:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713207948885/1299ae77-9a08-4333-b101-8318b5bdb2e9.png align="center")

---

### Opção 2 (Sugerida) - WSL2

WSL2 significa (`Windows Subsystem for Linux 2`) e possibilita ter um Linux nativo dentro do Windows, então a ideia aqui é instalar o Docker diretamente no Linux nativo do Windows. Entrarei em mais detalhes sobre algumas vantagens e desvantagens sobre isso, de qualquer forma essa opção exige que seu Windows tenha um WSL2 instalado e configurado, para isso talvez você ache interessante ler este outro artigo com um passo a passo de como atingir esse requisito:

* 👉 [WSL2 - Instalação e Configuração](https://simplescloud.io/wsl2)
    

---

### Vantagens e Desvantagens

Até agora mencionei que há duas opções de instalação do Docker no Windows, mas como você pode decidir qual é a melhor opção para você? Para responder essa pergunta, vou detalhar um pouco mais algumas coisas que aprendi para ajudar você a tomar essa decisão.

Ao instalar o aplicativo Docker Desktop no Windows, no background ele usará o WSL2, mas de uma forma um pouco diferente. Quando a instalação for concluída, será criado duas distribuições adicionais do WSL2 em seu dispositivo:

* `docker-desktop`: responsável por executar o `docker deamon` e sua infraestrutura ao redor para seu funcionamento.
    
* `docker-desktop-data`: responsável por armazenar as imagens e configurações do docker.
    

```plaintext
NAME                     STATE           VERSION
* Ubuntu-22.04           Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713209500735/37fbd5e3-caae-4f09-aadd-a176d2813a75.png align="center")

Como você pode perceber, você precisará de mais recursos como `memória`, `cpu`, `disco`, etc para executar todas as distribuições ao mesmo tempo. Então a grande **desvantagem** aqui é a performance e a lentidão.

Eu particularmente não gosto dessa abordagem, por dois motivos:

* Para aprender docker, eu prefiro executar o comandos docker ao invés de depender de uma interface gráfica
    
* Quando estou na minha `distribuição linux nativo com o WSL2` e executo um comando docker, na verdade não estou usando o docker diretamente nele, mas estou usando a outra distribuição `docker-desktop`, então eu acho que isso é uma etapa a mais desnecessária e que pode causar erros e lentidões.
    

Em contrapartida, uma grande **vantagem** é que o Docker estará compartilhado e disponível em qualquer ambiente ou ferramenta que você usar, por ele estar em uma distribuição dedicada à isso (distro `docker-desktop`), todos os comandos docker funcionarão no `windows terminal`, no `powershell`, no `cmd`, etc.

Embora eu não ache isso muito útil, pois na maioria das vezes uso apenas minha `distribuição linux nativa do WSL2`, então raramente eu preciso do docker no `powershell` ou `cmd` por exemplo. Mas entendo se este não for o seu caso.

Uma grande **desvantagem** da instalação no WSL2 é que ela é individual, ou seja, se você tiver várias distribuições, deverá instalar o docker em cada uma delas, pois diferente da instalação do Docker Desktop, os comandos não ficam compartilhados entre as distribuições, felizmente vou compartilhar um único comando rápido e fácil que ajudará essa repetição ser bem menos tediosa.

Em resumo, você pode tomar sua decisão agora baseando-se em:

* **Aplicativo Docker Desktop**: se você deseja ter uma interface gráfica ou executar comandos docker em qualquer lugar como `powershell`, `cmd` ou `windows terminal`, essa opção pode ser a mais adequada para você.
    
* **Docker no WSL2**: se você está mais interessado em aprender os comandos docker, não precisa de uma interface gráfica, precisa do docker somente na sua distribuição linux e está mais interessado em performance, essa opção pode ser a mais adequada para você.
    

---

<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">Eu prefiro a instalação do Docker diretamente no meu WSL2 ao invés do aplicativo Docker Desktop, como mencionei, essa instalação é em uma distribuição nativa do linux, então se você optou por essa abordagem também, continue para o próximo passo abaixo.</div>
</div>

---

## Instalação ou Atualização

1- Abra seu aplicativo de terminal preferido:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713210858132/f5828bdb-5d69-466b-afb6-876a8f07a122.png align="center")

2- Insira o comando:

> Embora o site oficial do Docker mencione um mínimo de 4GB de RAM necessários, na maioria das vezes 2 GB de RAM poderá ser o suficiente para muitas cargas de trabalhos, esse script funcionou bem para:
> 
> * `Mínimo de 512 MB RAM`
>     
> * `Mínimo de 2vCPU (core)`
>     
> * `Mínimo de 20 GB SSD`
>     

```bash
# Install latest Docker Version
curl -fsSL https://get.docker.com/ | sh && \

# Get latest Docker Compose version
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest \
| grep 'tag_name' \
| cut -d'"' -f4) && \

# Download latest Docker Compose
sudo curl \
-L "https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose && \

# Make Docker Compose executable
sudo chmod +x /usr/local/bin/docker-compose && \

# Add current user to "docker" group
sudo usermod -aG docker $USER && \

# Show Docker and Docker Compose versions
echo "============================================" && \
echo "Docker and Docker Compose Versions Installed" && \
docker --version && \
docker-compose --version && \
echo "============================================"
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713211366840/eb966b5e-d274-47e6-995d-e6e41f73a884.png align="center")

<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">Você deve fechar e abrir novamente seu terminal para que as permissões sejam atualizadas e os comandos docker sem sudo funcionarem.</div>
</div>

---

Agora todos os comandos `Docker` já estarão disponíveis:

```bash
docker --help
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713370799756/a93abdee-1f14-4a89-b913-5415af7ab2c2.png align="center")

Também estará disponível os comandos `Docker Swarm`:

```bash
docker swarm --help
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713371011523/2f5032dd-51ad-4f60-8538-f97a897ffba1.png align="center")

Também os comandos `Docker Stack`:

```bash
docker stack --help
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713371086562/93bcd0d8-cfbf-4303-90b1-7379f86a1b47.png align="center")

E por fim os comandos do `Docker-Compose`:

```bash
docker-compose --help
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713371234772/7e9fcdf3-c21c-4d54-94c4-da06c75c1344.png align="center")

<div data-node-type="callout">
<div data-node-type="callout-emoji">✅</div>
<div data-node-type="callout-text">Pronto! Isso é o suficiente para a instalação ou atualização das versões mais atuais do Docker e Docker Compose!</div>
</div>

---

## Explicando o Comando

Se você estiver curioso em descobrir o que cada etapa do comando está fazendo, para um melhor entendimento, vou quebrar o comando acima em várias partes e ir explicando passo a passo:

```bash
# Install latest Docker Version
curl -fsSL https://get.docker.com/ | sh && \
```

Este comando utiliza o `curl` para baixar o script de instalação oficial do Docker a partir da URL fornecida. O pipe `|` envia o conteúdo baixado pelo `curl` para o comando `sh`, que executa o script.

Em outras palavras, estamos acessando o script oficial disponível em:

* 👉 [https://get.docker.com](https://get.docker.com/)
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713211900036/a6dca02f-0f3a-4b11-a033-21a31b08fcf1.png align="center")

E executando com o `bash` este script, que então irá verificar a arquitetura do seu dispositivo se é `x86_64` ou `arm64` por exemplo, também irá verificar a sua distribuição se é `ubuntu`, `debian`, `centos`, etc. E fará a instalação ou atualização.

---

```bash
# Get latest Docker Compose version
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest \
| grep 'tag_name' \
| cut -d'"' -f4) && \
```

Obtém a versão mais recente do Docker Compose disponível no repositório do GitHub, analisando a resposta para obter a versão mais recente e armazenando na variável de ambiente `COMPOSE_VERSION`.

---

```bash
# Download latest Docker Compose
sudo curl \
-L "https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose && \
```

Baixa a versão mais recente do Docker Compose e salva no diretório `/usr/local/bin/`

---

```bash
# Make Docker Compose executable
sudo chmod +x /usr/local/bin/docker-compose && \
```

Torna o arquivo `docker-compose` baixado executável.

---

```bash
# Add current user to "docker" group
sudo usermod -aG docker $USER && \
```

Adiciona o usuário atual ao grupo `docker` para poder executar comandos Docker sem usar `sudo` .

---

```bash
# Show Docker and Docker Compose versions
echo "============================================" && \
echo "Docker and Docker Compose Versions Installed" && \
docker --version && \
docker-compose --version && \
echo "============================================"
```

Mostra as versões do Docker e Docker Compose instaladas ou atualizadas.

---

## Bônus - Para quem usar WSL2

Você pode configurar o docker para iniciar automaticamente junto com seu WSL2:

1- Crie o arquivo em `/etc/wsl.conf`

2- Insira esse conteúdo com seu editor preferido:

```plaintext
[boot]
systemd=true
[boot] command = service docker start
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1713212743896/2d932b7a-2b1f-454d-ae91-aea4890aee8f.png align="center")

---

## Conclusão

Neste artigo, compartilhei como tenho feito a instalação ou atualização do Docker e Docker Compose, também demonstrei para usuários Windows duas opções de instalação, ainda demonstrei qual poderia ser a opção mais adequada e informei a que eu uso e os motivos para isso.

<div data-node-type="callout">
<div data-node-type="callout-emoji">✅</div>
<div data-node-type="callout-text">Espero que essas informações tenham sido úteis para você!</div>
</div>
