Dans mon cas, j'ai plusieurs sites web que j'héberge sur des VPS dédiés chez OVH à faible coût (suffisant pour mon usage). Docker me permet de déployer mes sites très vite et très bien, cependant il reste une problèmatique : leur maintenance à moyen terme. En effet, Docker est un outil formidable, toutefois il faut possèder quelques compétences non négligeables pour mener à bien de tels projets :

  • du linux,
  • ...encore du linux,
  • de l'admin sys',
  • du web,
  • et pas mal de code selon le langage choisi...

Revenons surtout sur les compétences d'admin sys' qui sont certainement les plus passionnantes mais égalements les plus complexes à maitriser rapidement.

Un admin sys' c'est quoi ?##

administrateur-re-seaux-et-syste-mes

Merci de poser la question et pas d'inquiétude il ne faut pas céder aux clichés, un admin sys' ce n'est pas qu'un geek barbu qui se gave de café au fond de sa cave au milieu d'une forêt de câbles... :)

Administre et assure le fonctionnement et l'exploitation d'un ou plusieurs éléments matériels ou logiciels (outils, réseaux, bases de données, messagerie, ...) de l'entreprise ou d'une organisation. Veille à la cohérence, à l'accessibilité et à la sécurité des informations.

Mais revenons à nos moutons.

Ainsi, j'utilise Docker pour mes développements personnels en web essentiellement. Mon blog tourne sur Docker sur un VPS avec Ubuntu 16.04, mon site web idem, mon wiki également et je travaille sur pas mal d'autres projets comme vous avez pu le constater dans les récents articles. A chaque fois j'utile Docker-compose, pour moi le meilleur outil crée par Docker.

Comment l'installer ?

On lance cette commande une fois connecté à son serveur linux :

sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-
`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

et on donne les autorisations nécessaires avec :

sudo chmod +x /usr/local/bin/docker-compose

A quoi ça ressemble ?

version: '2'

services:
  redis:
    image: 'redis:3.0-alpine'
    command: redis-server --requirepass devpassword
    volumes:
      - 'redis:/data'
    ports:
      - '6379:6379'

  website:
    build: .
    command: >
      gunicorn -b 0.0.0.0:8000
        --access-logfile -
        --reload
        "snakeeyes.app:create_app()"
    environment:
      PYTHONUNBUFFERED: 'true'
    volumes:
      - '.:/snakeeyes'
    ports:
      - '8000:8000'

  celery:
    build: .
    command: celery worker -l info -A snakeeyes.blueprints.contact.tasks
    volumes:
      - '.:/snakeeyes'

volumes:
  redis:

Voilà à quoi ressemble un fichier docker-compose.yml à la racine de votre dossier projet. Ce type de fichier vous permet de renseigner toutes les actions requises pour le déploiement de votre application auprès du serveur linux. Magique.

Mettre à jour manuellement les images de votre docker-compose.yml

Placez-vous tout d’abord dans le répertoire contenant votre fichier docker-compose.yml et mettez à jour l’image associée en exécutant la commande suivante :

$ docker-compose pull

Relancez les containers :

$ docker-compose up -d --remove-orphans

Après quoi on relance en tapant :

$ docker-compose restart

Puis on vérifie l'état du travail avec :

$ docker history "nom du containeur" 

Ceci nous permet par exemple de monter de version notre containeur Wordpress ou encore notre base de données MySQL.

C'est d'une puissance incroyable et cela fonctionne très bien sans aucun risque pour la prod'.

Edit :

Autre solution trouvée qui peut s'avèrer satisfaisante même si elle relève plus du bricolage.

Scénario : vous avez un site web containeurisé sur un VPS avec Docker ; vous souhaitez pouvoir rapidement mettre à jour votre instance, déployée avec Docker-compose par exemple, le tout sans risque pour la production ? j'ai la solution à votre problème.

Dans mon cas ce blog Ghost a été déployé avec le scénario évoqué ci-dessus. Je me connecte en ssh sur mon serveur virtuel et je crée un nouveau dossier :

sudo ssh root@ipduserveur

mkdir blogtest

cd blogtest

Puis je crée un fichier docker-compose.yml à l'identique de ma prod' :

nano docker-compose.yml

Je modifie seulement dans le fichier, le port sur lequel diffusera cette deuxième instance que vous pouvez appeler comme vous le préférez, backup, test ou encore sos ;) ici je modifie le port 80 de ma prod' en port 8080.

Ainsi mon VPS diffusera à l'adresse ip du serveur, un deuxième site mais répondant à ipduserveur:8080

Ceci permettra donc de bénéficier de la même infrastructure de secours, et avec la sauvegarde régulière de la base de données, vous pourrez sans trop de difficultés la réinjecter sur la version backup pour récupérer votre site web en cas de pépin. Ghost permet d'effectuer des imports/exports de la BDD avec un fichier json, ce qui peut s'avèrer très pratique.