Mainframe Self-Hosted com Docker

Rodando MVS 3.8j em Docker para aprender COBOL e JCL de verdade

Mainframe Self-Hosted com Docker

Durante anos, mainframe foi tratado como algo distante, caro e inacessível — quase um “dinossauro” da computação. A realidade é outra: o mainframe continua extremamente relevante, e hoje é possível estudar MVS, COBOL e JCL em casa, com custo zero, usando Docker.

Neste artigo, vou mostrar como montei um ambiente de mainframe no meu homelab, os erros que cometi no caminho (importantes!) e a arquitetura que realmente funciona para aprender MVS 3.8j (TK4-) de forma séria.

⚠️ Este não é um artigo “nostálgico”.
É um guia técnico, baseado em tentativa, erro e aprendizado real.

Por que estudar mainframe hoje?

Antes da parte técnica, a pergunta inevitável: por quê?

Alguns motivos objetivos:

  • COBOL ainda processa trilhões de dólares por dia (bancos, seguros, governos)
  • Sistemas core críticos continuam rodando em mainframe
  • Há escassez de profissionais
  • O modelo mental de batch, JCL e datasets forma engenheiros mais disciplinados

Aprender mainframe não é sobre o passado, é sobre entender a base da computação corporativa.

O objetivo do ambiente

O que eu queria desde o início:

  • Rodar um mainframe realista
  • Usar MVS 3.8j
  • Programar COBOL
  • Escrever JCL
  • Ter persistência de dados
  • Evitar “simuladores simplificados”

A solução acabou sendo:

  • Hercules (emulador de mainframe)
  • TK4- (MVS 3.8j Turnkey System)
  • Docker
  • Cliente 3270 no host (Mac)
  • A arquitetura correta (e o erro que quase me desviou)

O erro: tentar usar noVNC / browser

Em um primeiro momento, tentei algo “moderno”:

  • noVNC
  • X11
  • VNC
  • x3270 dentro de container
  • browser como frontend

Isso foi um erro arquitetural.

Por quê?

Porque 3270 não é gráfico.
Mainframe não trabalha com pixels, trabalha com buffers de tela e campos.

Ao usar VNC, eu criei camadas desnecessárias:

Resultado:

  • problemas de DISPLAY
  • teclas PF quebradas
  • timing errado
  • complexidade inútil

A solução correta

Separar responsabilidades:

Simples. Estável. Funcional.

Docker Compose: apenas o essencial

Este é o docker-compose final, limpo e funcional:

version: "3.8"

services:
  tk4:
    image: skunklabz/tk4-hercules:latest
    container_name: tk4
    restart: unless-stopped
    tty: true
    stdin_open: true
    ports:
      - "13270:3270"
      - "18038:8038"
    volumes:
      - tk4-conf:/tk4-/conf
      - tk4-local_conf:/tk4-/local_conf
      - tk4-local_scripts:/tk4-/local_scripts
      - tk4-prt:/tk4-/prt
      - tk4-dasd:/tk4-/dasd
      - tk4-pch:/tk4-/pch
      - tk4-jcl:/tk4-/jcl
      - tk4-log:/tk4-/log

volumes:
  tk4-conf:
  tk4-local_conf:
  tk4-local_scripts:
  tk4-prt:
  tk4-dasd:
  tk4-pch:
  tk4-jcl:
  tk4-log:

Esse setup garante:

  • persistência de DASD
  • persistência de JCL
  • logs
  • ambiente reutilizável

Para construir um mainframe self-hosted com Docker, utilizei a imagem skunklabz/tk4-hercules, disponível no Docker Hub, que reúne o Hercules Mainframe Emulator e o TK4- (MVS 3.8j Turnkey System) em um único container pronto para uso. Essa imagem Docker simplifica drasticamente o processo de rodar MVS 3.8j em ambiente local, eliminando a necessidade de instalações complexas e permitindo que desenvolvedores estudem COBOL, JCL, TSO e ISPF em um homelab moderno. Ao executar o mainframe dentro de um container Docker, é possível obter isolamento, reprodutibilidade e persistência de dados, tornando o ambiente ideal tanto para aprendizado quanto para experimentação técnica com tecnologias clássicas de mainframe integradas a práticas modernas de infraestrutura.

Conectando ao mainframe

No Mac, instalei o cliente 3270:

brew install x3270

No meu caso, uso c3270 (modo texto):

c3270 HOST:13270

Login padrão do TK4-:

USERID:   HERC01
PASSWORD: CUL8TR

E pronto: TSO/E READY.

O papel do Web Console (porta 8038)

A porta 8038 não é para trabalhar, mas é extremamente útil:

  • acompanhar boot do sistema
  • ver mensagens do Hercules
  • confirmar conexões 3270
  • troubleshooting

Acessando:

http://HOST:18038

Trabalhando no MVS: a experiência real

Depois do login, tudo acontece via ISPF:

  • datasets em vez de arquivos
  • JCL em vez de scripts
  • batch como cidadão de primeira classe

Fluxo típico:

  1. Criar dataset de fonte COBOL
  2. Criar dataset de JCL
  3. Escrever programa
  4. Submeter JOB
  5. Ler JOBLOG
  6. Iterar

Nada é mágico. Tudo é explícito.

O que eu aprendi com essa experiência

Algumas lições importantes:

  • Mainframe exige disciplina
  • Erros sempre têm mensagem (se você souber ler)
  • Menos abstração = mais clareza
  • Docker é excelente para infra, não para terminal
  • Nem tudo precisa ir para o browser

E talvez a principal:

Mainframe te obriga a pensar antes de executar.

Isso muda completamente a forma de programar.

Para quem esse ambiente faz sentido?

✔ Desenvolvedores curiosos
✔ Estudantes de COBOL
✔ Profissionais migrando para área de alta plataforma bancária
✔ Quem quer entender computação “raiz”

Conclusão

Rodar um mainframe no homelab hoje é:

  • tecnicamente viável
  • barato
  • extremamente educativo

Mais do que aprender COBOL ou JCL, essa experiência ensina:

  • organização
  • leitura de logs
  • execução controlada
  • respeito à infraestrutura

Se você trabalha com sistemas distribuídos modernos, estudar mainframe te torna um engenheiro melhor.

El primer paso consiste en precisar la conveniencia de una prenda para regalo o uso propio. Para interpretar correctamente la información, conviene consultar las instrucciones de lavado y conservación. Consultar «» ayuda a confirmar los detalles esenciales antes de tomar una decisión. Antes de confirmar la compra, conviene revisar que la descripción coincida con las fotografías.

衣装の候補を絞る場合は、サイズ、素材、装飾、付属品を同じ基準で見比べることが大切です。商品仕様や選び方を比べたい場合は、コスプレ衣装 即日発送から関連情報を確認できます。商品が届いたら付属品とサイズを早めに確認し、必要な調整を本番前に済ませましょう。

El primer paso consiste en precisar la conveniencia de una prenda para regalo o uso propio. Para interpretar correctamente la información, conviene consultar las instrucciones de lavado y conservación. Consultar «camiseta versión jugador de la selección de Colombia» ayuda a confirmar los detalles esenciales antes de tomar una decisión. Antes de confirmar la compra, conviene revisar que la descripción coincida con las fotografías.