Como instalar o Docker e Docker Compose no Windows 11 sem o aplicativo Docker Desktop e no Linux Ubuntu
Compartilho todas as configurações que realizei para instalar o Docker e Docker Compose

Introdução
Docker
Docker é uma ferramenta que facilita a criação e administração de ambientes isolados possibilitando o empacotamento de uma aplicação ou ambiente dentro de um container. Os contêineres permitem que os devs empacotem um aplicativo com todas as partes necessárias, como bibliotecas e outras dependências, e envie tudo como um pacote.
Então, você consegue criar, implantar, copiar e migrar de um ambiente para outro com maior flexibilidade, pois um container do Docker abstrai todo o sistema operacional. Um jeito fácil de pensar sobre isso é imaginando que um container do Docker é a execução de uma imagem/foto pronta da sua aplicação e não importa qual o sistema operacional ou ambiente você estiver, se lá tiver o Docker instalado, ele poderá "subir" sua imagem/foto pronta e executar esse container.
Esse é um dos motivos pelo sucesso do Docker, de certa forma ele "acabou" com aquela famosa e velha frase dos devs "na minha máquina funciona, mas em produção não". Isso porque agora com o Docker independentemente do ambiente, o pacote/container do Docker contém toda a aplicação exatamente igual em qualquer lugar.
Docker Compose
O Docker simplifica o processo de gerenciamento de processos de aplicativos em contêineres. Embora os contêineres sejam semelhantes às máquinas virtuais de certas maneiras, eles são mais leves e amigáveis aos recursos. Isso permite que os desenvolvedores dividam um ambiente de aplicativo em vários serviços isolados.
Para aplicativos que dependem de vários serviços, orquestrar todos os contêineres para iniciar, comunicar e desligar juntos pode se tornar rapidamente complicado. O Docker Compose é uma ferramenta que permite executar ambientes de aplicativos de vários contêineres com base em definições inseridas em um arquivo YAML. Ele usa definições de serviço para criar ambientes totalmente personalizáveis com vários contêineres que podem compartilhar redes e volumes de dados.
Vantagens da instalação através do WSL2 ao invés do aplicativo Docker Desktop
Se você está procurando uma maneira eficiente de trabalhar com o Docker no Windows, o WSL2 pode ser a solução ideal.
Se você não sabe o que é WSL2, talvez você ache interessante ler nosso artigo que fala sobre isso antes de continuar:
Ao usar o aplicativo Docker Desktop, no background de seu computador você poderá visualizar duas distribuições do WSL2 criadas para ele:
docker-desktopdocker-desktop-data
Onde o primeiro é responsável por armazenar o código do docker daemon e sua infraestrutura ao redor, já o segundo será responsável por armazenar imagens e configurações do container. Aqui está um exemplo:
NAME STATE VERSION
* Ubuntu-20.04 Running 2
docker-desktop Running 2
docker-desktop-data Running 2
Então embora isso funcione, em um cenário que você esteja conectado na distribuição ubuntu, ao usar o docker você estará "passando" por uma camada a mais e perdendo performance, esse é o principal motivo de preferir instalar o docker diretamente na distribuição do WSL2 ao invés de usar o aplicativo Docker Desktop e evitar essas distribuições adicionais.
Além disso, a instalação do Docker e Docker Compose no WSL2 apresenta várias outras vantagens em relação ao Docker Desktop, tais como:
Desempenho superior
Uma das principais vantagens da instalação do Docker e Docker Compose no WSL2 é o desempenho superior. Como o WSL2 fornece uma camada de compatibilidade mais eficiente para a execução de programas Linux no Windows, o desempenho é significativamente melhor em comparação ao Docker Desktop. Além disso, a instalação do Docker e Docker Compose no WSL2 é mais enxuta e não inclui a interface gráfica do Docker Desktop, o que pode impactar positivamente na performance.
Maior compatibilidade
O Docker e Docker Compose no WSL2 é executado em um ambiente Linux nativo, o que significa que oferece uma maior compatibilidade com as ferramentas e bibliotecas Linux. Isso pode ser especialmente útil para desenvolvedores que trabalham com aplicações em que a compatibilidade com o Linux é essencial.
Acesso a todas as funcionalidades do Docker
O Docker e Docker Compose no WSL2 oferece acesso a todas as funcionalidades do Docker, incluindo o Docker Swarm e o Kubernetes. Além disso, a instalação do Docker e Docker Compose no WSL2 é mais simples e não depende de uma interface gráfica, o que pode ser especialmente útil para usuários avançados e para a automação de tarefas.
Melhor para Aprender
Se o seu objetivo for evoluir em uma carreira de DevOps, muito provavelmente você precisará se familiarizar com os comandos, a interface gráfica torna as coisas visivelmente mais fáceis, mas também nos torna mais preguiçosos, então usar o docker através de comandos desde o momento de sua instalação já pode ir te ajudando a se acostumar, a medida que você pratica, achará até mais fácil.
Desvantagens da instalação através do WSL2 ao invés do aplicativo Docker Desktop
Essa abordagem também oferece desvantagens, sendo a principal delas que o Docker Desktop torna os comandos docker disponíveis em qualquer ambiente ou ferramenta que você usar, por exemplo os comandos estarão disponíveis tanto no terminal, como no powershell, como no cmd, etc. Sem a necessidade de instalar um a um.
Por mais que eu não perceba grande utilidade nisso, pois na maioria das vezes executo os comandos docker apenas no meu terminal e não tenho necessidade de fazer o mesmo no powershell ou no cmd, posso imaginar que para alguns cenários isso seja importante, então neste caso você talvez considere a instalação através do aplicativo Docker Desktop bom.
Se você preferir uma interface gráfica ao invés de comandos, com certeza usar o aplicativo docker desktop para você será mais adequado.
Instalação
1- Abra seu terminal ssh

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
Em versões:
Ubuntu 20.04 Focal Fossa
Ubuntu 22.04 Jammy Jellyfish
Em arquiteturas:
amd64
arm64
# Detect architecture
ARCH=$(dpkg --print-architecture) && \
# Update package index
sudo apt update -y && \
# Get latest Docker version
DOCKER_VERSION=$(curl -s https://api.github.com/repos/docker/docker-ce/releases/latest \
| grep 'tag_name' \
| cut -d'"' -f4) && \
# Get latest Docker Compose version
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest \
| grep 'tag_name' \
| cut -d'"' -f4) && \
# Install packages necessary to add repositories over HTTPS
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release && \
# Add Docker's GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg \
--dearmor \
--yes \
--output /etc/apt/trusted.gpg.d/docker.gpg && \
# Add Docker repository
sudo add-apt-repository -y \
"deb [arch=$ARCH] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" && \
# Update package index again
sudo apt update -y && \
# Install latest Docker, Docker Compose, and containerd
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io && \
# 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 && \
# Checks if you are on WSL 2
if grep -qE "(Microsoft|WSL)" /proc/version; then
# Configure Docker to start on WSL boot
if ! grep -q "service docker start" /etc/wsl.conf; then
echo "[boot] command = service docker start" \
| sudo tee -a /etc/wsl.conf > /dev/null
fi
fi && \
# Show Docker and Docker Compose versions
echo "============================================" && \
echo "Docker and Docker Compose Versions Installed" && \
docker --version && \
docker-compose --version && \
echo "============================================" && \
# Restart shell to apply settings
if [ -n "$BASH" ]; then
exec bash
elif [ -n "$ZSH_VERSION" ]; then
exec zsh
fi
Mas se você estiver curioso em descobrir o que cada etapa do comando está fazendo, continue aqui...
Explicando o comando
Para um melhor entendimento, vamos quebrar o comando acima em várias partes e ir explicando passo a passo:
# Detect architecture
ARCH=$(dpkg --print-architecture) && \
Detecta se seu dispositivo possui arquitetura amd64 ou arm64.
# Update package index
sudo apt update -y && \
Atualiza o índice de pacotes disponíveis no sistema.
# Get latest Docker version
DOCKER_VERSION=$(curl -s https://api.github.com/repos/docker/docker-ce/releases/latest \
| grep 'tag_name' \
| cut -d'"' -f4) && \
Obtém a versão mais recente do Docker disponível no repositório do GitHub, analisando a resposta JSON para obter a versão mais recente.
# 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 JSON para obter a versão mais recente.
# Install packages necessary to add repositories over HTTPS
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release && \
Instala os pacotes necessários para adicionar repositórios através do protocolo HTTPS. Isso é importante para garantir que o software seja instalado a partir de fontes confiáveis. Os pacotes instalados incluem apt-transport-https, ca-certificates, curl, gnupg e lsb-release.
# Add Docker's GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg \
--dearmor \
--yes \
--output /etc/apt/trusted.gpg.d/docker.gpg && \
Adiciona a chave pública GPG (GNU Privacy Guard) do Docker, que é usada para verificar a integridade e autenticidade do software. A chave é baixada da URL especificada e adicionada ao sistema.
# Add Docker repository
sudo add-apt-repository -y \
"deb [arch=$ARCH] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" && \
Adiciona o repositório oficial do Docker à lista de repositórios do sistema operacional. A arquitetura do sistema é definida através da variável de ambiente ARCH sendo amd64 ou arm64 . E a versão do Ubuntu é obtida a partir do comando lsb_release -cs.
# Update package index again
sudo apt update -y && \
Atualiza o índice de pacotes do sistema novamente para garantir que as informações do repositório Docker estejam disponíveis para o sistema operacional.
# Install latest Docker, Docker Compose, and containerd
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io && \
Instala as últimas versões do Docker, Docker Compose e containerd. O pacote containerd.io é um contêiner runtime.
# 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-a no diretório /usr/local/bin/
# Make Docker Compose executable
sudo chmod +x /usr/local/bin/docker-compose && \
Torna o arquivo docker-compose baixado executável.
# 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.
# Checks if you are on WSL 2
if grep -qE "(Microsoft|WSL)" /proc/version; then
# Configure Docker to start on WSL boot
if ! grep -q "service docker start" /etc/wsl.conf; then
echo "[boot] command = service docker start" \
| sudo tee -a /etc/wsl.conf > /dev/null
fi
fi && \
Verifica se está em um ambiente WSL2 (Windows Subsystem for Linux) e adiciona uma linha de comando ao arquivo /etc/wsl.conf, que configura o Docker para iniciar automaticamente quando o WSL2 (Windows Subsystem for Linux) é iniciado.
# 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.
# Restart shell to apply settings
if [ -n "$BASH" ]; then
exec bash
elif [ -n "$ZSH_VERSION" ]; then
exec zsh
fi
Reinicia o shell do usuário, a ideia é que, ao instalar o Docker, algumas configurações do ambiente precisam ser atualizadas, e isso pode não ser feito automaticamente pelo sistema. Portanto, o script verifica se o shell em uso é o Bash ou o Zsh e executa o comando exec para reiniciar o shell e aplicar as novas configurações.
O comando exec é usado para substituir o processo atual pelo processo especificado, neste caso, o shell. Isso faz com que as novas configurações sejam aplicadas sem a necessidade de reiniciar a sessão do usuário ou reiniciar o computador.
Conclusão
Neste artigo descobrimos como podemos instalar as versões mais atuais do Docker e Docker Compose no Windows 11 sem a necessidade de usar o aplicativo Docker Desktop e também no Linux Ubuntu, vimos também algumas vantagens nessa instalação através do WSL2, disponibilizamos um único comando que faz tudo e ainda explicamos cada etapa para um melhor entendimento.






