Instalação Completa do Docker no Ubuntu LTS
Tags: docker, ubuntu, linux, tutorial
Published: 2022-12-02 03:02:51

Nesse post quero compartilhar uma maneira de instalar o Docker no Ubuntu em 8 passos simples. Que nos dará acesso à sua interface de linha de comando (CLI).

**Vamos aos passos**

1. [Desinstale versões anteriores](#passo-1-desinstale-versões-anteriores)
2. [Instale as dependências iniciais](#passo-2-instale-as-dependências-iniciais)
3. [Adicione a chave pública do repositório Docker em sua máquina](#passo-3-adicione-a-chave-pública-do-repositório-docker-em-sua-máquina)
4. [Adicione o repositório remoto na lista do apt](#passo-4-adicione-o-repositório-remoto-na-lista-do-apt)
5. [Instale o Docker no Linux](#passo-5-instale-o-docker-no-linux)
6. [Adicione seu usuário ao grupo de usuários Docker](#passo-6-adicione-seu-usuário-ao-grupo-de-usuários-docker)
7. [Inicie o Daemon do Docker](#passo-7-inicie-o-daemon-do-docker)
8. [Valide a instalação](#passo-8-valide-a-instalação)

---

Aqui, vamos fazer a instalação do Docker por meio do comando `apt-get`, considerando uma máquina com [Ubuntu LTS](https://ubuntu.com/download/desktop) 64-bit (amd64).

> Se quiser ver as outras opções de instalação ou se estiver usando outro sistema operacional, consulte a [documentação completa](https://docs.docker.com/engine/install/).

⚠️ Se você enfrentar algum problema ou comportamento diferente em algum dos passos, consulte o [guia oficial](https://docs.docker.com/engine/install/ubuntu/).

## Passo 1: Desinstale versões anteriores

Se você já possui uma versão do Docker instalada em sua máquina e deseja refazer o processo para atualizar ou corrigir um problema, primeiro remova os pacotes da versão que está na sua máquina. 

Para fazer isso, use o seguinte comando no terminal:

```bash
sudo apt-get remove docker* containerd runc
```
Se nenhum dos pacotes estiver instalado, este comando retornará o erro `E: Impossível encontrar o <nome-do-pacote>`. Neste caso, é só prosseguir com a instalação.

## Passo 2: Instale as dependências iniciais

Para permitir que o `apt-get` busque arquivos por *HTTPS*, instale os seguintes pacotes. Precisamos deles para prosseguir com a instalação:

```bash
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
```
## Passo 3: Adicione a chave pública do repositório Docker em sua máquina

Para adicionar a chave oficial GPG* do repositório Docker, execute o seguinte comando:
```bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
```

> ⚠️ Essa etapa é necessária porque precisamos obter uma chave pública do servidor Docker Inc para garantir que todos os pacotes de dados obtidos da Internet sejam assinados com essa chave, evitando assim possíveis ataques à segurança.

Se tudo correr bem, você não terá nenhum feedback visual.

## Passo 4: Adicione o repositório remoto na lista do `apt`

Para finalmente adicionar o repositório oficial do Docker no `apt`, execute o seguinte comando:

```bash
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

> Observe que adicionamos o repositório *stable* (em `$(lsb_release -cs) stable`), isto significa que teremos somente o repositório com as versões estáveis do Docker.

Em distribuições baseadas no Ubuntu, como o Linux Mint, pode ser necessário substituir o comando `$(lsb_release -cs)` por uma versão do Ubuntu compatível com esse sistema. 
Exemplo: se você estiver usando o *Linux Mint Tessa*, altere o valor para `bionic`.

> ⚠️ Observação importante: não é garantido que o Docker seja executado em sistemas que não atendam aos [requisitos do sistema operacional](https://docs.docker.com/engine/install/ubuntu/#os-requirements).

## Passo 5: Instale o Docker no Linux

Agora, sim, vamos à instalação do Docker!

- Primeiro, vamos garantir que os índices dos pacotes do `apt` estão atualizados, já que adicionamos um novo repositório:

```bash
sudo apt-get update
```

- Entao vamos instalar a última versão estável do *Docker Engine - Community*, que é uma versão mantida pela própria comunidade, já que o Docker é *open source*. Para isso, execute no terminal:

```bash
sudo apt-get install docker-ce docker-ce-cli containerd.io
```

## Passo 6: Adicione seu usuário ao grupo de usuários Docker

Para evitar o uso de `sudo` em todos os comandos Docker que formos executar, vamos dar as devidas permissões ao nosso usuário.

- Primeiro crie um grupo chamado `docker`:
```bash
sudo groupadd docker
```

> Caso apareça uma mensagem: `groupadd: grupo 'docker' já existe`, é só prosseguir.

- Em seguida, adicione seu usuário a este novo grupo com o seguinte comando:

```bash
sudo usermod -aG docker $USER
```

> ⚠️ Atenção execute o comando exatamente como acima, com distinção entre maiúsculas e minúsculas.

- Para ativar as alterações no grupo, você pode sair e fazer login novamente em sua sessão ou executar o seguinte comando no terminal:

```bash
newgrp docker
```

> ⚠️ Se você encontrar algum problema após executar este comando, reinicie seu dispositivo. Prossiga para a próxima etapa após reiniciar


## Passo 7: Inicie o Daemon do Docker

O **Daemon** é um serviço que fica no *background*, ou seja, é um serviço que sempre está em execução e aguarda por comandos feitos por meio do CLI. Entretanto, para que este serviço fique sempre disponível, precisamos **ativá-lo**, até mesmo após reiniciarmos nosso computador.

- Para consultar o `status` atual do **daemon** do Docker, execute o seguinte comando:

```bash
sudo systemctl status docker
```

- O comando acima deve retornar um pequeno relatório sobre o serviço, incluindo seu *status* de execução:

```bash
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Thu 2022-11-23 19:35:27 -03; 2s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
    Process: 2034 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=0>
   Main PID: 2034 (code=exited, status=0/SUCCESS
```

- Caso o parâmetro *Active* esteja como `stop/waiting` ou, no nosso caso, como `inactive`, rode o comando `start` para iniciá-lo:

```bash
sudo systemctl start docker
```

Quando o `status` for consultado novamente, o processo deve estar como `start/running/active`.

- Agora, vamos habilitar o daemon do Docker para iniciar durante o *boot*:

```bash
sudo systemctl enable docker
```

## Passo 8: Valide a instalação

Para validar se tudo ocorreu como deveria na instalação, vamos executar o `hello world` do Docker:

```bash
docker run hello-world
```

O terminal deve retornar uma mensagem conforme o *gif* a seguir:

![Hello from Docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n9cm3sbzc93z35clo7v4.gif)

Tudo certo, temos o Docker instalado para utilizarmos! 🐋


### Referências:
- https://docs.docker.com/engine/install/
- https://docs.docker.com/engine/install/ubuntu/
- https://docs.docker.com/engine/install/ubuntu/#os-requirements
- https://blog.betrybe.com/tecnologia/docker/