Aller au contenu principal

Dockerfile

· 3 minutes de lecture

Bonjour, cet article explique comment créer un fichier Docker pour un conteneur Ruby qui a déjà MDL d'installé). Veuillez consulter mon précédent post pour mieux comprendre Docker.

Qu'est-ce que c'est ?

Un Dockerfile est un document texte qui contient toutes les commandes qu'un utilisateur pourrait appeler sur la ligne de commande pour assembler une image. À l'aide de docker build, les utilisateurs peuvent créer une construction automatisée qui exécute successivement plusieurs instructions en ligne de commande.

Tout comme Vagrant qui utilise un fichier vagrant pour créer et personnaliser une machine virtuelle selon vos besoins, Docker utilise un fichier docker pour créer et personnaliser un conteneur ! Ils peuvent se ressembler mais ils sont très différents ! (vous pouvez apprendre comment utiliser Vagrant pour créer une machine virtuelle Windows Server ici)

Comme mentionné précédemment, pour cet exemple, nous allons créer un conteneur ruby avec mdl installé. Nous devons donc lancer notre fichier docker :

FROM ruby:latest

FROM crée une couche à partir de l'image Docker ruby latest.

FROM ruby:latest

WORDIR /mdl

L'instruction WORDIR définit le répertoire de travail pour toutes les instructions RUN, CMD, ENTRYPOINT, COPY et ADD qui la suivent dans le Dockerfile. Si le répertoire WORKDIR n'existe pas, il sera créé même s'il n'est pas utilisé dans une instruction Dockerfile ultérieure.

FROM ruby:latest

WORDIR /mdl
RUN gem install mdl

RUN a 2 formes :

  • Commande RUN (forme shell, la commande est exécutée dans un shell, qui par défaut est /bin/sh -c sous Linux ou cmd /S /C sous Windows)
  • RUN ["executable", "param1", "param2"] (forme exec)

Dans notre exemple, RUN exécute une commande qui installe MDL directement dans le conteneur ruby

FROM ruby:latest

WORDIR /mdl
RUN gem install mdl

ENTRYPOINT [ "/bin/bash" ]

ENTRYPOINT, comme RUN, a 2 formes ! La forme Shell ou la forme exec.

La forme exec, qui est la forme préférée :

ENTRYPOINT ["exécutable", "param1", "param2"]

La forme shell :

ENTRYPOINT commande param1 param2

Dans notre cas, nous l'utilisons sous la forme exec pour pouvoir exécuter notre bash. Cela laissera notre conteneur ouvert car bash s'exécute en arrière-plan.

Donc, maintenant que nous avons notre fichier docker, nous devons construire notre conteneur afin de l'exécuter !

docker build --tag user/mdl

La commande ---tag nomme l'image du conteneur en question. Et maintenant que le conteneur est construit, nous pouvons l'exécuter !

Pour cela, nous utiliserons la commande suivante :

docker run -tid --name mdl -v /home/vagrant:/mdlfiles user/mdl

Pour être sûr que votre conteneur fonctionne correctement, faites un simple "docker ps -a" juste pour avoir une confirmation. Cette opération vous montrera tous les détails et le statut de votre conteneur.

Après avoir confirmé que le conteneur est opérationnel, nous voulons exécuter mdl pour vérifier notre fichier markdown. Pour ce faire, nous devons exécuter la commande mdl dans un bash qui récupérera le fichier .md dans le dossier que nous avons partagé et nommé "mdlfiles".

docker exec mdl bash -c "mdl /mdfile/myfile.md"

Si vous avez quelques incohérences par rapport aux règles de l'outil mdl, vous obtiendrez un résultat comme celui-ci :

/mdfile/docker.md:5: MD009 Trailing spaces
/mdfile/docker.md:77: MD009 Trailing spaces
/mdfile/docker.md:25: MD012 Multiple consecutive blank lines
/mdfile/docker.md:51: MD012 Multiple consecutive blank lines
/mdfile/docker.md:13: MD013 Line length
/mdfile/docker.md:52: MD013 Line length
/mdfile/docker.md:54: MD013 Line length
/mdfile/docker.md:89: MD024 Multiple headers with the same content
/mdfile/docker.md:19: MD026 Trailing punctuation in header
/mdfile/docker.md:26: MD026 Trailing punctuation in header

Après les avoir tous corrigés, vous ne devriez plus avoir de retour après votre commande ! :)