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 :
package main
import "fmt"
func main() {
fmt.Println("Hello world")
}
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 Gola 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 :
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"
$ /root/binaries/hello_world
Hello world