• # Heroku et Docker

    Posté par (site web personnel) . En réponse au journal Déployer une application web C++ sur Heroku avec Docker et Nix. Évalué à 7.

    Si les PaaS comme Heroku permettent facilement de déployer des applications dans les « langages web classiques », il est également souvent possible de déployer des images Docker, et donc des applications C++.

    Avec tout de même un bémol dont il faut être conscient: Heroku n'execute pas d'images docker. Les layers sont extraits et ça tourne sous LXC.

    Et ça a quelques incidences à prendre en compte.

    Expose

    De base en docker une image expose un ou plusieurs ports et ça permet de savoir quoi mapper et qui écoute. Pour Heroku ça ne fonctionne pas, il faut passer $PORT.

    CMD /root/myrepeat --docroot . --http-address 0.0.0.0 --http-port $PORT
    

    Entrypoint

    L'entrypoint des images est surchargé par /bin/sh -c s'il n'est pas définit.
    Par exemple si on utilise distroless pour faire une image Go, l'entrypoint est null et la commande est le binaire Go. Et ça fonctionne bien sous Docker. Mais sous heroku c'est /bin/sh -c <binaire> qui est executé.

    En mettant le binaire dans l'entrypoint et la commande à "" ça fonctionne.

    HealthChecks

    Les healthchecks ne sont pas supportés, le Dyno manager fait automatiquement ses propres checks.

    Pour avoir une idée des autres limites, voir Unsupported Dockerfile commands.

    Sinon j'ai jamais essayé avec Nix, mais les images multi-stage say bon mangez-en !