PHP et Unikernel. Et si Docker était de l’histoire ancienne ?

Petit rappel historique

  • Docker utilise Linux (oui, j’en suis désolé) tout en étant plus lent que ce dernier.
  • Docker agit comme un wrapper autour d’un système d’exploitation.
  • Docker empaquète votre application mais crée un “vendor lock-in” de par son format de fichier, son architecture, etc.

Schématisons le problème

https://nanos.org/thebook#architecture

Et si ?

  • Le hardware qui représente votre machine locale ou distante (Cloud par exemple)
  • Un superviseur qui va gérer votre processus
  • Une application qui sert d’OS (oui oui)
https://nanos.org/thebook#security
https://nanos.org/thebook#performance

En pratique, c’est bien

Package, Instance et Image

  • Image
  • Package
  • Instance

Docker, un compagnon de route

  • ops pkg
  • from-docker php:7.4-cli
  • -f php -n php_74-cli
ops pkg from-docker php:7.4-cli -f php -n php_74-cli
ops pkg list — local

Et Symfony fit son entrée

config.json
  • Dirs: Cette clé permet d’indiquer quel dossiers seront inclus dans le package.
  • Args: Cette clé permet d’indiquer au programme (PHP dans notre cas) quel fichier / commande doit être lancé(e) lors de l’exécution du package.
  • Env: Ici, nous pouvons spécifier une liste de variable d’environnement, pour éviter que des informations de debug soient affichées, je décide de passer l’environnement à prod.
  • BaseVolumeSz: Cette clé est liée au volume créé pour le package, chaque package / image peut obtenir un volume spécifique et par conséquent, une taille allouée, ici (et après de nombreux tests), 150 megabytes semblent suffirent pour une application Symfony, selon vos besoins, n’hésitez pas à allouer quelques megabytes de plus.
  • RunConfig: Cette clé permet d’indiquer à Ops la configuration utilisée durant l’exécution du package, plusieurs clés existent notamment pour la gestion des instances, ici, je me contente d’indiquer le nombre de CPU alloués.
  • RebootOnExit: Cette clé est plus spécifique à une application telle que Symfony, en effet, avec l’arrivée récente du composant Runtime, Symfony a découplé son état d’exécution de l’état global d’exécution, ce composant permet d’exécuter plus facilement nos applications selon différents environnements (containers, VM, unikernel ?).
    Dans le cas d’Ops, cela mène à une erreur 1 en sortie de la console, ce qui bloque l’usage de cette dernière, pour éviter ce problème, cette clé permet de redémarrer correctement l’application si une erreur survient.
  • ops pkg load
  • — local php_74-cli
  • — config config.json
ops pkg load — local php_74-cli — config config.json
config.json (lint:container)
ops pkg load — local php_74-cli — config config.json

Imager et déployer

De l’art de créer

  • ops image create
  • — local — package php_74-cli
  • — imagename sf_console

Rendre disponible sans craintes

  • ops instance create
  • — instance-name sf
  • sf_console
ops instance list
ops instance logs sf

--

--

--

PHP developer @SensioLabs, Symfony addict (3, 4, 5 & 6 certified!)

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Guillaume Loulier

Guillaume Loulier

PHP developer @SensioLabs, Symfony addict (3, 4, 5 & 6 certified!)

More from Medium

Send Logged-In Email Alerts Using Auth0 Actions

Deploy WordPress on Kubernetes

Install and Configure Prometheus On a Linux Server and Securing Prometheus API and UI Endpoints…