Bonjour a tous,

Je sollicite votre aide pour comprendre l'utilisation de docker et git.
Je viens de comprendre l'utillisation de docker pour exécuter une application.

Par exemple je développe une application qui fonctionne avec php, mysql, et nginx.
Et sur mon environnement local (mon pc) je développe le projet php et je versionne le code avec git sur gitlab.

Sur un serveur de test (vps), je cré un conteneur qui me permettra de déployer mon environnement avec php, mysql, et nginx.
une fois que je fais une modification de mon code localement, je push mon code.

Voici mes différentes préocupations:

  • Comment récupérer les modifications (git pull) vers le conteneur en cours d'exécution ?
  • Faut -il recréer un nouveau conteneur pour avoir la version mise à jour du code source versionné ?
  • Dans un environnement de production, doit - on utiliser docker pour exécuter l'application ? Est-ce une bonne pratique ?
  • Quelle est la meilleure approche dans l'utilisation de docker et git pour mettre à jour le projet ?

4 réponses


krysenn
Réponse acceptée

Bonjour,

Enfaite, un conteneur Docker exécute une image, cette image est crée avec l'aide d'un fichier Dockerfile et de la commande ´docker build´.
Une image docker possède un tag, car sa convention de nommage est la suivante ´nomimage:tag´.

Pour récupérer les modifications, tu peux avoir une CI/CD Gitlab (.gitlab-ci.yml) afin de la déclencher à chaque commit, merge request, à la demande etc.. A toi de voir ce que tu veux :)
Puis dans cette CI tu vas configurer afin de faire:

  • Build d'une nouvelle image ´docker build -t tag nomimage´
  • Push de l'image sur une registry (accessible sur ton serveur) en faisant ´docker push nomimage:tag´
  • Déclenchement du déploiement de ta nouvelle image sur ton serveur (à toi de voir suivant si tu utilises un orchestrateur ou non)
    Pour répondre à ta question, oui cela va recréée ou remplacer le containeur avec la nouvelle image et donc la nouvelle version ;)

C'est une très bonne pratique d'utiliser Docker, après suivant la taille du projet ou le type de projet c'est plus ou moins utilisé. Si tu l'utilises tu as différend type de déploiement, dans une entreprise de bonne taille avec une recherche de SLA très haut, on voit souvent l'utilisation d'orchestrateur de containers (comme Kubernetes, Nomad ou plus basique Swarm, ...) et souvent il te simplifie les déploiements mais c'est overkill pour juste héberger un site web

guilfred
Auteur
Réponse acceptée

Salut krysen,

Merci pour ta réponse tu as répondu à plusieurs de mes préoccupations,
si je comprends .gitlab-ci.yml qui est un fichier pour faire de l'intégration continue, test et déploiement va permettre de déployer mon projet avec une mise à jour du code.

J'ai vu aussi la même alternative avec github action.

Juste pour comprendre une dernière chose le container qui exécutait l'application sera dans ce cas arreter et/ou supprimé, avant de créer un nouveau container ?
Et tout cela sera fait ou pas en arrière plan ?

krysenn
Réponse acceptée

Salut guilfred,

Content d'avoir pu répondre à tes questions ;)
Oui tout à fait, le fichier .gitlab-ci.yml, te permet de configurer ta CI / CD pour un projet, Github actions c'est relativement la même chose mais pour Github ;)

Si tu utilises Docker tout seul, c'est à toi de faire le lifecycle, tu dois arrêter le container, déployer le nouveau contenant la nouvelle image (elle sera téléchargé automatiquement si elle est introuvable sur le serveur) puis ensuite tu peux supprimer l'ancien containeur et l'ancienne image pour libérer de l'espace sur le disque.
Dans le cas d'une configuration avec un orchestrateur, c'est de la conf pour que ça se fasse tout seul et l'orchestrateur s'occupera de remplacer en limitant le temps d'indisponibilité, mais comme je disais, c'est overkill dans le cas d'un simple déploiement d'un site à bas traffic. Si tu t'occupes de l'hébergement de pas mal de sites, cette solution est peut-être plus envisageable ;)

guilfred
Auteur
Réponse acceptée

salut krysenn, cool merci pour ton aide