Você pode procurar por sobre container distroless (isso mesmo como se fosse sem uma distro, vem apenas as libs basicas sem nenhum utilitário), mas isso é uma faca de dois gumes, pois ao mesmo tempo que impede alguém mal intencionando, vai impedir alguém bem intencionado você dificilmente conseguiria depurar um problema ou ataque em produção.
Sobre javascript existe minificação/obfuscação, ainda é possivel com IA entender o funcionamento projeto em alguns casos, porém o trabalho de deixar legivel para humanos novamente é muito custoso e demorado.
Sobre python, você pode transformar 100% do projeto em bytecode e apagar o source com o comando python -m compileall, mas tome cuidado existe a maneira certa de fazer isso.
-
errado (single stage)
FROM python:3.11-slim
WORKDIR /app
COPY src/ /app/src/
RUN python -m compileall src && rm -rf src
WORKDIR /app/src/__pycache__
CMD ["python", "script.cpython-311.pyc"]
- correto (multi stage)
FROM python:3.11-slim AS builder
WORKDIR /build
COPY src/ /build/src/
RUN python -m compileall src
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /build/src/__pycache__/ /app/
CMD ["python", "script.cpython-311.pyc"]
Porque usar multi stage? o processo de build do docker funciona como um git, a cada linha ele comita um estado do container imutavel, ou seja assim como existe git reset --hard aaaaaa para voltar commits atrás, é possivel também ir para um estado possivel de um container, no qual por exemplo estaria a copia de todo código fonte. caso você fazer isso em 2 estagios, o de build sera descartado e a unica imagem visivel tem apenas a copia do bytecode.