Instalando o arsenal: Docker, Node, AWS CLI, Terraform, kubectl e Helm
Objetivos desta aula
- Entender o papel de cada ferramenta no ciclo de entrega
- Instalar as ferramentas do curso e validar cada uma com um teste real
- Fixar versões para evitar surpresas em máquina e em pipeline
- Diagnosticar os erros de instalação mais comuns
1. Cada ferramenta tem um lugar no ciclo
- Docker — empacota a aplicação com suas dependências em uma imagem que roda igual em qualquer lugar.
- Node — runtime do CloudShop; roda a aplicação e seus testes.
- AWS CLI — conversa com a nuvem pela linha de comando, de forma automatizável.
- Terraform — descreve a infraestrutura em arquivos versionados.
- kubectl — opera o cluster Kubernetes.
- Helm — empacota manifests em releases parametrizáveis.
Instalar tudo agora evita interromper o estudo no meio de um módulo.
2. Duas formas de instalar, e quando usar cada uma
Gerenciador de pacotes (apt, snap, brew) traz atualização automática e é bom para a máquina de trabalho. Gerenciador de versão (nvm para Node, tfenv para Terraform) permite ter várias versões e trocar por projeto — indispensável quando um repositório exige Terraform 1.6 e outro 1.9.
3. Docker: instalar e entender o que aconteceu
O instalador coloca no sistema o daemon (serviço que cria e gerencia containers) e o cliente docker. O cliente conversa com o daemon por um socket em /var/run/docker.sock, que pertence ao grupo docker. Por isso você adiciona seu usuário a esse grupo — e por isso precisa reabrir a sessão para o novo grupo valer.
Consciência de segurança: pertencer ao grupo docker equivale, na prática, a acesso administrativo à máquina, porque você pode montar qualquer diretório dentro de um container.
4. Validar Docker de verdade
docker --version só prova que o binário existe. A validação real é rodar um container (docker run --rm hello-world), listar imagens e conferir o serviço com docker info. Se aparecer permission denied ... /var/run/docker.sock, o problema é grupo/sessão, não instalação.
5. Node com nvm
Instale o nvm e depois a versão LTS. Com nvm install --lts e nvm use, cada projeto pode fixar sua versão em um arquivo .nvmrc. Isso evita o clássico "funciona na minha máquina": a versão do runtime passa a ser parte do repositório.
6. AWS CLI v2
A versão 2 é distribuída como pacote próprio (não via pip) e inclui recursos como login por SSO. Após instalar, valide com aws --version; a validação de credencial vem na próxima aula, com aws sts get-caller-identity.
7. Terraform, kubectl e Helm
Terraform é um binário único; prefira instalar por repositório oficial ou tfenv para controlar a versão. kubectl deve estar próximo da versão do cluster (a regra suportada é uma versão menor de diferença). Helm v3 não tem componente no cluster, é só um cliente que gera e aplica manifests.
8. Por que fixar versão é tão importante
Terraform muda comportamento entre versões menores e o arquivo de estado é sensível a isso. Em pipelines, ferramenta sem versão fixa gera build que quebra sem ninguém ter mudado código — um dos incidentes mais frustrantes que existe. A regra é: versão explícita na máquina, no arquivo do repositório e no workflow de CI.
9. Documentando o arsenal
Crie docs/ferramentas.md com a versão de cada ferramenta e a data. Esse arquivo responde em segundos a pergunta "o que mudou desde que funcionava?" e é o mesmo hábito que empresas formalizam em bill of materials.
10. Erros comuns e o que eles significam
permission denied /var/run/docker.sock→ falta grupo docker ou sessão não reaberta.command not foundapós instalar manualmente → binário fora do PATH; mova para/usr/local/bin.nvm: command not foundem novo terminal → falta carregar o nvm no~/.bashrc.- kubectl muito novo/antigo em relação ao cluster → mensagens estranhas de API; alinhe versões.
11. Cuidado com instalação por script da internet
Baixar um script e executá-lo direto no shell exige confiança total na origem. Em ambiente corporativo, use o repositório de pacotes aprovado, verifique checksum ou assinatura e prefira versões fixas em vez de "latest".
12. Checagem final da aula
Rode a bateria de validação: docker run --rm hello-world, node -v, aws --version, terraform -version, kubectl version --client, helm version. Registre a saída no diário e no docs/ferramentas.md.
Na prática
Instalação e validação
bash
# Docker Engine (Ubuntu/WSL2)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker "$USER" # reabra a sessao depois (exit e entrar de novo)
docker run --rm hello-world # "Hello from Docker!" = cliente + daemon ok
# Node via nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc && nvm install --lts && node -v && npm -v # v22.x / 10.x
# AWS CLI v2
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip
unzip -q awscliv2.zip && sudo ./aws/install && aws --version # aws-cli/2.x
# Terraform, kubectl e Helm
sudo snap install terraform --classic
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -m 0755 kubectl /usr/local/bin/kubectl
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
terraform -version && kubectl version --client && helm versionNota de segurança: Baixar script e executar direto no shell exige confiança na origem. Em ambiente corporativo, use o repositório de pacotes aprovado e verifique checksum.
Diagnóstico rápido de Docker
bash
docker info | head -8 # mostra versao do servidor, storage driver, containers ativos
# Se der: permission denied while trying to connect to the Docker daemon socket
id -nG # confira se 'docker' aparece nos seus grupos
newgrp docker # aplica o grupo na sessao atual (alternativa a reabrir o terminal)
docker run --rm alpine sh -c 'echo dentro do container; uname -r'
# dentro do container
# 5.15.167.4-microsoft-standard-WSL2 <- mesmo kernel do host: container nao e VMNota de segurança: Quem está no grupo docker pode montar / dentro de um container e ler qualquer arquivo: trate como acesso administrativo.
Fixando versões no repositório
bash
cd ~/projetos/cloudshop-app
node -v | sed 's/^v//' > .nvmrc # ex.: 22.11.0 -> quem clonar roda 'nvm use'
cat > docs/ferramentas.md <<EOF
# Ferramentas (atualizado em $(date +%F))
- docker: $(docker --version | awk '{print $3}' | tr -d ,)
- node: $(node -v)
- aws-cli: $(aws --version | awk '{print $1}')
- terraform: $(terraform -version | head -1 | awk '{print $2}')
- kubectl: $(kubectl version --client -o json | jq -r .clientVersion.gitVersion)
- helm: $(helm version --short)
EOF
cat docs/ferramentas.mdAs mesmas versões no GitHub Actions
yaml
name: ci
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc # usa a MESMA versao da sua maquina
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.9.8 # versao fixa, nunca "latest"
- run: node -v && terraform -versionPor que isso importa
Ambiente padronizado é pré-requisito de automação. Se o comando não roda igual na sua máquina e no runner, o pipeline é loteria.
Erro comum
Esquecer de reabrir a sessão após entrar no grupo docker e concluir que a instalação falhou.
Dica de produção
Registre as versões em docs/ferramentas.md e use as mesmas versões nos workflows do GitHub Actions.
Pergunta de entrevista
Por que fixar versões de ferramentas em CI e como você faria isso no GitHub Actions?
Glossário
- CLI
- Interface de linha de comando: forma automatizável de operar uma ferramenta.
- nvm
- Gerenciador de versões do Node, permitindo trocar de runtime por projeto.
- daemon
- Processo que roda em segundo plano prestando um serviço, como o motor do Docker.
- socket Unix
- Arquivo especial usado para comunicação entre processos na mesma máquina, como /var/run/docker.sock.
- PATH
- Lista de diretórios onde o shell procura os comandos que você digita.
- tfenv
- Gerenciador de versões do Terraform, útil quando cada repositório exige uma versão diferente.
- Helm
- Empacotador de manifests Kubernetes em charts com valores parametrizáveis.
- checksum
- Impressão digital de um arquivo, usada para verificar se o download não foi alterado.
Conexão com o CloudShop
Documentar as versões usadas no CloudShop para reproduzir builds no CI.
Quiz da aula
1. Qual ferramenta descreve infraestrutura de forma declarativa e versionada?
2. Por que é necessário reabrir a sessão após 'usermod -aG docker $USER'?
3. Qual é o risco de usar 'latest' para a versão do Terraform no pipeline?
4. Qual comando valida de verdade que o Docker está funcional?
Minhas anotações
Salvo automaticamente neste navegador.