table des matières
  1. Sitographie
  2. Terminologie
  3. Commandes docker principales
    1. Run
    2. Pull
    3. Lister images et containers
    4. Supprimer des containers
    5. Quelques flags courants
    6. Port d’écoute du container
  4. Création d’une nouvelle image
    1. Dockerfile

Sitographie

Un tutoriel d’introduction à Docker et une explication pas à pas des principales commandes. A la fin du tutoriel, une nouvelle image est poussé sur AWS. Docker tutorial for beginner

Une collection (exhaustive ?) de ressources sur Docker. Awesone Docker

Des tutorials et des labs en ligne pour s’entraîner avec Docker. Nécessite un compte Docker (gratuit) Play with Docker

Terminologie

Image : fichier compilé de votre container (Un peu comme une image iso)
Container : Instance de votre image en cours d’exécution

Commandes docker principales

Run

  • Exécuter un container
    docker run nom_du_container
    #Exemple
    docker run hello-world
    
  • Exécuter un container en mode interactif (et avoir un shell)
    docker run -it busybox bash
    

Pull

  • Récupérer une image
    docker pull nom_du_container
    #Exemple
    docker  pull busybox
    

Lister images et containers

  • Lister les images
    docker images
    #Sortie
    REPOSITORY                                      TAG         IMAGE ID       CREATED         SIZE
    ubuntu                                          18.04       251b86c83674   8 days ago      63.1MB
    python                                          3.8         a45b78fe1e8e   9 days ago      913MB
    
  • Lister les containers en cours d’exécution
    docker ps
    CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                           NAMES
    295761962f7c   jekyll/jekyll   "/usr/jekyll/bin/ent…"   33 minutes ago   Up 33 minutes   ::1:4000->4000/tcp, 35729/tcp   lucid_shtern
    
  • Lister les containers qui se sont exécutés
    docker ps -a
    

Supprimer des containers

  • En connaissant l’ID
    docker rm 305297d7a235 ff0a5c3750b9
    
  • Qui ont le status exited
    docker rm $(docker ps -a -q -f status=exited)
    #ou avec les versions récentes de docker
    docker container prune
    
  • Supprimer une image
    docker rmi nom_ou-id-de-l-image
    

Quelques flags courants

  • Quelques flags pour run

--rm : détruit le container si il existe
-it : mode interactif

docker run --rm -it prakhar1989/static-site

-d : détache le container du terminal (on récupère la main sur le prompt)
--name : nom de notre container

docker run -d -P --name static-site prakhar1989/static-site

Port d’écoute du container

  • Connaître les ports d’écoute
    docker port nom_container
    #Exemple
    docker port lucid_shtern
    4000/tcp -> ::1:4000
    

Le site sera disponible en http://localhost:4000

  • Spécifier un port

-P : numéro de port personnalisé

docker run -p 8888:80 prakhar1989/static-site
#Pour ce site
 docker run -it --rm \
    --volume="$PWD:/srv/jekyll" \
    -p 4000:4000 jekyll/jekyll \
    jekyll serve
  • Arrêter un container détaché (Il faut donner l’id ou le nom)
docker stop static-site

Création d’une nouvelle image

Lorsqu’on exécute un container docker, les modifications effectuées ne sont pas intégrées à l’image de celui-ci.
Si l’on veut intégrer des modifications, il faut construire une nouvelle image.

Objectif :

  • Créer une nouvelle image docker avec notre site et la sauvegarder sur Docker Hub

Dockerfile

Un Dockerfile est une suite de commande utilisé par docker pour construire une image.

  • Dockerfile

Il faut créer le Dockerfile à la racine de notre site. Ici, je récupère la dernière version de jekyll(FROM), je précise le répertoire de travail (WORKDIR), je copie le contenu de notre répertoire (COPY), J’expose le port 4000 (EXPOSE) et je lance le serveur (CMD)

FROM jekyll/jekyll:latest

# set a directory for the app
WORKDIR /srv/jekyll

# copy all the files to the container
COPY . .

EXPOSE 4000
CMD jekyll serve
  • Compiler l’image

Utiliser son login sur le docker hub pour ensuite pouvoir la sauvegarder

docker build -t sepro2/docker-jekyll-site .
  • Lister l’image
    docker images
    REPOSITORY                                      TAG         IMAGE ID       CREATED          SIZE
    sepro2/docker-jekyll-site                       latest      7bd79fe9d33e   6 minutes ago    831MB
    
  • Lancer cette image

J’ai choisi de lancer l’image sur un autre port que le 4000 (4001)

docker run -p 4001:4000 sepro2/docker-jekyll-site

L’image ainsi lancée est la copie de notre site à un instant t. Le contenu n’est pas modifiable sans recompilation.

  • Sauvegarder sur dockerHub
docker login
docker push sepro2/docker-jekyll-site
  • Run image Maintenant que l’image est en ligne, n’importe quel utilisateur de docker peut l’exécuter.
docker run -p 4001:4000 sepro2/docker-jekyll-site