Système de fichiers

L'objectif de cet exercice sera de compiler un script basique (un Hello World) dans le langage de programmation Go, avec Docker. Il n'est absolument pas nécessaire de connaître le langage Go, il faut simplement savoir que c'est un langage compilé.

Nous avons le script suivant, qui affiche simplement "Hello World", à l'emplacement /root/scripts/hello.go sur notre hôte :

1
package main
2
3
import "fmt"
4
5
func main() {
6
  fmt.Println("Hello world")
7
}

Le but est de pouvoir exécuter ce script sur notre machine hôte, après avoir compilé le script, sans avoir à installer un compilateur Go sur la machine. Sachant que :

  • une image golang existe sur le Docker Hub et embarque les utilitaires pour compiler du Go

  • la commande go build -o mon_binaire mon_source.go permet de compiler le script mon_source.go en un binaire mon_binaire

Question

Donnez la commande Docker qui permet de générer un binaire, à partir du script ci-dessus, à l'emplacement /root/binaries/hello_world sur la machine hôte.

Solution

On utilisera la commande suivante :

1
docker run -v /root/scripts:/code -v /root/binaries:/dist golang go build -o /dist/hello_world /code/hello_world.go

La commande va lancer un conteneur basé sur l'image golang. Dans le conteneur, 2 dossiers du système hôte sont montés : /root/scripts est monté dans /code (pour récupérer le fichier source) et /root/binaries est monté dans /dist (pour récupérer le fichier compilé). Dans le conteneur on lance la commande go build -o /dist/hello_world /code/hello_world.go qui permet de compiler notre fichier source et de déposer le binaire dans le dossier partagé.

Si l'exercice est réussi il est désormais possible, depuis la machine hôte, de lancer le binaire /root/binaries/hello_world qui affiche un "Hello World"

1
$ /root/binaries/hello_world
2
Hello world