table des matières
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