Docker et conseils d’infrastructure de petit serveur de production

Je trouve comment configurer mon serveur de production au mieux, mais je suis un peu coincé sur la façon de le faire correctement:

Actuellement, toutes mes applications Web sont dockerifiées , j’ai:

  • Un conteneur frontal nginx, cette demande de routage vers plusieurs conteneurs backend:
    • Une application Symfony
    • Deux blog WordPress
    • Une application NodeJS
  • Un conteneur MySql pour le stockage DB
  • Un conteneur MongoDB aussi

TOUTES ces infrastructures sont démarrées avec docker-compose .

Cela fonctionne bien mais cela me semble trop “monolitique” :

  • Je ne peux pas arrêter un conteneur sans redémarrer tous les autres.
  • Je ne peux pas append d’autres applications Web sans tout redémarrer
  • Je n’ai aucun moyen de redémarrer le conteneur automatiquement après un crash …

C’est la première fois que je le fais, connaissez-vous quelques meilleures pratiques ou logiciels qui peuvent m’aider à améliorer mon serveur de production?

Merci beaucoup !

    Je ne peux pas arrêter un conteneur sans redémarrer tous les autres.

    Qu’est-ce qui vous empêche d’utiliser la commande docker stop au lieu de la commande docker-compose stop lorsque vous souhaitez arrêter un seul conteneur?

    Je ne peux pas append d’autres applications Web sans tout redémarrer

    Je suggère l’utilisation de l’excellente image de jwilder / nginx-proxy nginx docker pour agir en tant que proxy inverse devant vos autres conteneurs. Ce proxy inverse s’adaptera aux conteneurs en cours d’exécution / arrêtés. Vous pouvez append un conteneur ultérieurement et ce proxy inverse acheminera automatiquement le trafic en fonction du nom de domaine.

    Je n’ai aucun moyen de redémarrer le conteneur automatiquement après un crash …

    Regardez la directive restart: pour le fichier docker-compose.yml .

    La vue “monolithique” de docker-compose est en effet faite pour vous permettre de gérer votre stack d’applications d’une manière. Mais il faut savoir que docker-compose est un “calque” sur le docker qui (docker) vous pouvez toujours utiliser.

    Comme le dit @thomasleveil, vous pouvez toujours manipuler individuellement les conteneurs créés avec docker avec docker.

     $ docker exec project_web_1 ls -l / $ docker stop project_db_1 $ docker up -d project_nginx_1 $ ... 

    D’autre part, je suggère de s’appuyer davantage sur docker-compose, qui permet également d’agir sur des conteneurs individuels, de séparer vos différentes applications ou environnements et de connaître les dépendances entre les conteneurs (qui ne sont pas exhaustives).

     $ docker-compose exec web ls -l / $ docker-compose stop db $ docker-compose up -d nginx $ ... 

    Amorcer un nouveau service est également très facile avec docker-compose, car il peut détecter des choses basées sur votre configuration yml sans rien arrêter sinon nécessaire.

     $ docker-compose up -d project_web_1 is up-to-date project_db_1 is up-to-date Creating project_newservice_1 

    Je trouve également que l’aide d’un proxy inverse est très utile pour les installations de production. Cependant, je vous suggérerais davantage le tout nouveau Traefik, qui apporte des fonctionnalités intéressantes telles que le rechargement à chaud, la découverte de services, la certificateion SSL automatisée avec Letsencrypt et le renouvellement (sans être exhaustif).