Bien que la plupart du temps, je développe des applications Java et que j'utilise simplement Maven, mes versions doivent donc être reproductibles (du moins c'est ce que dit Maven).

Mais disons que vous compilez un programme C ++ ou quelque chose d'un peu plus compliqué, devriez-vous construire à l'intérieur de docker?
Ou utiliser idéalement vagrant ou une autre technologie pour produire des constructions reproductibles.

Comment gérez-vous la construction reproductible avec docker?

9
Snickers3192 17 janv. 2017 à 06:45

2 réponses

Meilleure réponse

Vous pouvez, mais pas dans votre image finale, car cela signifierait une image beaucoup plus grande que nécessaire: cela inclurait tout l'outil de compilation, au lieu de se limiter uniquement à ce dont vous avez besoin pour exécuter le binaire résultant.

Vous pouvez voir une alternative dans "Comment créer une image Docker pour un projet Ruby sans outils de compilation?"

  • J'utilise une image pour construire,
  • Je valide le conteneur arrêté résultant comme une nouvelle image (avec un volume incluant le binaire résultant)
  • J'utilise une image d'exécution (une qui ne contient que ce dont vous avez besoin pour exécuter) et je copie le binaire de l'autre image. Je valide à nouveau le conteneur résultant.

L'image finale comprend le binaire compilé et l'environnement d'exécution.

7
Community 23 mai 2017 à 10:29

Je voulais également publier une réponse à cela parce que pour m'appuyer sur la réponse de VonC. En fait, je viens de suivre une formation Redhat Openshift et ils utilisent un outil appelé Source to Image s2i, qui utilise docker pour créer des images docker. Et en fait, cette stratégie est idéale pour gérer un cloud privé (ou public), où votre build peut être compilé sur différentes machines, mais vous devez garder l'environnement de build cohérent.

1
Snickers3192 1 févr. 2017 à 22:43