Saudações.
Hoje vou ensinar como enlatei o Coder dentro de um container Docker com vários agentes de IA.
Pré-requisitos:
- Servidor, VPS ou VM com Linux;
- Docker;
1 – Sobre o Coder
O Coder é uma IDE de desenvolvimento que funciona no navegador.
Ele é inspirado e compatível com o VSCode.
Depois de um tempo tendo que lidar com gestão de projetos usando o método tradicional de instalar tudo no notebook e as vezes sincronizar com o Git, me veio uma ideia: E se a IDE, o projeto, a compilação, testes, agentes de IA pudessem ficar enlatados no Docker?
Com isso eu poderia programar em qualquer computador, smartphone, tablet, delegar tarefas aos agentes, sem precisar manter nenhum deles ligados.
Links:
- Projeto no GitHub: https://github.com/coder/code-server;
- Site: https://coder.com/
- Documentação: https://coder.com/docs
- Releases: https://github.com/coder/code-server/releases
2 – Guia rápido
Para quem tem pressa!
Crie a rede Docker:
Bash
# Rede de containers docker network create network_public \ -d bridge \ -o com.docker.network.bridge.name=br-net-public \ -o com.docker.network.driver.mtu=1500 \ -o com.docker.network.bridge.gateway_mode_ipv4=nat-unprotected \ --subnet 10.249.0.0/16 \ --gateway 10.249.255.254;Criar volume e configuração inicial com senha tulipa_coder (mude para a sua):
Bash
# Diretorio do volume # Pasta no HOST mkdir -p /storage/coder-ide; # Pasta do projeto para mapear em /project do container mkdir -p /storage/coder-ide/project; # Raiz do sistema mkdir -p /storage/coder-ide/.config/code-server; # Config inicial #( # echo; # echo 'bind-addr: 127.0.0.1:8080'; # echo 'auth: password'; # echo 'password: tulipa_coder'; # echo 'cert: false'; # echo; #) > /storage/coder-ide/.config/code-server/config.yaml; # Ajustar permissoes, login 'coder' uid 1000 chown -R 1000:1000 /storage/coder-ide;Container do Coder:
Bash
# Senha de acesso PASSWORD="tulipa_coder"; # Atualizar imagem docker pull codercom/code-server:latest; # Renovar/rodar: # - Parar atual docker container stop coder-ide 2>/dev/null; docker container rm coder-ide 2>/dev/null; # - Rodar com imagem renovada docker container run \ -d \ --user root \ --restart always \ --name coder-ide \ --hostname coder-ide.intranet.br \ \ --cpus 2.0 \ --cpu-shares 1024 \ --memory 2g \ --memory-swap 2g \ --memory-reservation 1g \ --shm-size 1g \ \ --network network_public \ --ip 10.249.111.201 \ \ -p 7280:8080 \ \ -v /storage/coder-ide:/root \ -v /storage/coder-ide:/home/coder \ -v /storage/coder-ide/project:/project \ \ -v /var/run/docker.sock:/var/run/docker.sock \ \ -e DEFAULT_WORKSPACE=/project \ -e DOCKER_USER=root \ -e PASSWORD=$PASSWORD \ \ codercom/code-server:latest \ --auth password \ /project; # entrypoint: /usr/bin/entrypoint.sh # cmd.......: --bind-addr 0.0.0.0:8080Versão Docker Compose:
YAML – docker-compose.yml
services: coder-ide: image: codercom/code-server:latest container_name: coder-ide hostname: coder-ide.intranet.br user: root restart: always networks: network_public: ipv4_address: 10.249.111.201 ports: - "7280:8080" volumes: - /storage/coder-ide:/root - /storage/coder-ide:/home/coder - /storage/coder-ide/project:/project - /var/run/docker.sock:/var/run/docker.sock environment: DEFAULT_WORKSPACE: /project DOCKER_USER: root PASSWORD: tulipa_coder command: - --auth - password - /project cpus: 2.0 cpu_shares: 1024 mem_limit: 2g memswap_limit: 2g mem_reservation: 1g shm_size: 1g networks: network_public: name: network_public driver: bridge driver_opts: com.docker.network.bridge.name: br-net-public com.docker.network.driver.mtu: 1500 com.docker.network.bridge.gateway_mode_ipv4: nat-unprotected ipam: config: - subnet: 10.249.0.0/16 gateway: 10.249.255.2543 – Guia manual
Nesse capítulo vou mostrar como eu fiz para criar um bundle de desenvolvimento no container.
3.1 – Rede Docker
Criando a rede para containers (network_public):
Bash
# Rede de containers docker network create network_public \ -d bridge \ -o com.docker.network.bridge.name=br-net-public \ -o com.docker.network.driver.mtu=1500 \ -o com.docker.network.bridge.gateway_mode_ipv4=nat-unprotected \ --subnet 10.249.0.0/16 \ --gateway 10.249.255.254;3.3 – Containers do Coder
Criando o container do Coder para instalar manualmente os agentes. Mais tarde vamos transformar esses comandos em Dockerfile.
Opcionalmente mapeie o volume para o socket do Docker para que você possa fazer testes em containers durante o desenvolvimento.
Bash
# Diretorio do volume # Pasta no HOST mkdir -p /storage/coder-ide; # Pasta do projeto para mapear em /project do container mkdir -p /storage/coder-ide/project; # Raiz do sistema mkdir -p /storage/coder-ide/.config/code-server; # Ajustar permissoes, login 'coder' uid 1000 chown -R 1000:1000 /storage/coder-ide; # Renovar/rodar: # - Parar atual docker container stop coder-ide 2>/dev/null; docker container rm coder-ide 2>/dev/null; # - Rodar com imagem renovada docker container run \ -d \ --user root \ --restart always \ --name coder-ide \ --hostname coder-ide.intranet.br \ \ --cpus 2.0 \ --cpu-shares 1024 \ --memory 2g \ --memory-swap 2g \ --memory-reservation 1g \ --shm-size 1g \ \ --network network_public \ --ip 10.249.111.201 \ \ -p 7280:8080 \ \ -v /storage/coder-ide:/root \ -v /storage/coder-ide:/home/coder \ -v /storage/coder-ide/project:/project \ \ -v /var/run/docker.sock:/var/run/docker.sock \ \ -e DEFAULT_WORKSPACE=/project \ -e DOCKER_USER=root \ -e PASSWORD=$PASSWORD \ \ codercom/code-server:latest \ --auth password \ /project;Vamos preparar ambiente com ferramentas básicas, entre no container:
Bash
# Entrar no shell do container: docker exec -it --user root coder-ide bash;E instale os pacotes básicos (pacotes presentes em qualquer notebook):
Bash – Container coder-ide (Alpine)
# Atualizar apt -y update; apt -y upgrade; apt -y dist-upgrade; apt -y full-upgrade; # Pacotes nativos do Debian, mas que devem estar presentes, # rode esse comando para garantir que nao faltou nenhum pacote basico: apt -y install \ bash sudo \ openssl wget curl ca-certificates \ iproute2 htop iputils-ping \ bzip2 tar unzip gzip xz-utils zstd zip \ util-linux coreutils procps psmisc \ less logrotate lsof \ sed grep mawk \ mc nano jq git \ file findutils \ iputils-ping traceroute \ openssh-client; # SSH apt -y install rsync; apt -y install openssh-server; apt -y install openssh-sftp-server; # Instalar cliente Docker apt -y install docker-cli; apt -y install docker-compose; apt -y install docker-buildx;3.4 – Instalando agentes
Essa é a parte boa!
Existem duas formas de fazer isso:
- Agente isolado: Você roda o agente em outro container Docker com acesso ao mesmo diretório do volume do seu projeto (/project), considero isso mais limpo e objetivo. Recomendado para ambientes profissionais. O principal vantagem é não embolar dependências (alguns precisam de node 22, outros de node 24, … vira bagunça).
- Container bundle: Você instala os agentes no mesmo container. A desvantagem é que você precisará gerir bem os volumes usados pelo Coder e pelo Agente para que seu container não destrua configurações e dados ao ser recriado no futuro por ter acumulado dados em pastas dentro do container que não estavam mapeadas fora dele.
Vou fazer o bundle já que rodar isolado é matéria de outro artigo (OpenCode, Pi, …).
Instalando pacotes necessários para rodar os agentes no mesmo container:
Bash – Container coder-ide (Debian)
# Instalar nodejs e npm apt -y install nodejs npm; # Instalar Claude Code npm install -g @anthropic-ai/claude-code; # Instalar OpenCode npm install -g opencode-ai; # Instalando OpenClaude npm install -g @gitlawb/openclaude@latest; # Instalando Agent Pi (bugou comigo) # npm install -g --ignore-scripts @earendil-works/pi-coding-agent;Pronto pra usar na porta HTTP 7280.
4 – Criando o container bundle
Agora vou criar uma única imagem juntando tudo que foi feito no capítulo 3.
4.1 – Dockerfile
Dockerfile da imagem coder com aditivos:
Dockerfile – ./docker/Dockerfile
# syntax=docker/dockerfile:1.7 # Coder Server pronto, continuando FROM codercom/code-server:latest ENV \ LANG=C.UTF-8 \ LC_ALL=C.UTF-8 # Instalar aditivos RUN set -eux; \ apt -y update; \ apt -y upgrade; \ apt -y dist-upgrade; \ apt -y full-upgrade; \ \ apt -y install \ bash sudo \ openssl wget curl ca-certificates \ iproute2 htop iputils-ping \ bzip2 tar unzip gzip xz-utils zstd zip \ util-linux coreutils procps psmisc \ less logrotate lsof \ sed grep mawk \ mc nano jq git \ file findutils \ iputils-ping traceroute \ openssh-client; \ \ apt -y install docker-cli; \ apt -y install docker-compose; \ apt -y install docker-buildx; \ \ apt -y install rsync; \ apt -y install openssh-server; \ apt -y install openssh-sftp-server; \ \ apt -y install supervisor; \ \ apt -y install nodejs; \ apt -y install npm; \ \ npm install -g @anthropic-ai/claude-code; \ npm install -g opencode-ai; \ npm install -g @gitlawb/openclaude@latest; \ # Diretorio padrao inicial WORKDIR /project # Volumes anonimos (default, requer mapeamento no run) VOLUME ["/root", "/home/coder", "/project"]4.2 – Construção da imagem
Para construir a imagem, crie uma pasta para esse projeto “coder-bundle” crie os dois arquivos (conteúdo acima) nos seguintes caminhos:
- Dockerfile: ./Dockerfile
- Entrypoint: ./entrypoint.sh
Execute o build para construir a imagem:
Bash
# Constuir imagem: docker build . -f Dockerfile --no-cache -t coder-bundle:latest;Agora basta usar a imagem coder-bundle:latest para ter um super ambiente de desenvolvimento isolado, na nuvem, cheio de bots trabalhadores.
Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com
“Uma só mão não aplaude“
Provérbio Árabe
.png)
há 13 horas
3



English (US) ·
Portuguese (BR) ·