Docker est une plateforme permettant de lancer certaines applications dans des conteneurs logiciels.
Docker est une plateforme permettant de lancer certaines applications dans des conteneurs logiciels.
docker run --name webserver --publish 8080:80 --detach nginx
--name : nom du container qui sera créé
--detach : permet d'avoir la main sur le terminal par la suite
--publish 8080:80 : assossier le port 80 du container au port 8080 de la machine physique
nginx : nom de l'image pour le container
docker container exec -it nom_du_container bash
docker run -it nom_du_container
ex : docker run -i -t nom_du_container /bin/bash ou docker exec -i nom_du_container /bin/bash
docker ps (l'options -a permet d'afficher les containers éteintes)
docker container stats
docker container inspect nom_du_container
docker container inspect -f '{{.NetworkSettings.IPAddress}}' nom_du_container
docker container stop $(docker container ls -aq)
docker container rm $(docker container ls -aq)
docker container port nom_du_container
docker network ls
Docker network create nom_carte_reseau
ex : docker network create --driver=bridge --subnet=192.168.1.0/24 networkpriv
docker container run --network nom_carte_reseau --name nom_du_container image_du_contenaire
ex : docker run -it --name ubuntu1 --network networkpriv -d ubuntu /bin/bash
docker network connect nom_carte_reseau nom_container
docker network disconnect nom_carte_reseau nom_container
docker image ls
docker image history nom_image/ID
docker image inspect nom_image/ID
docker image prune
docker login
docker logout
Permet de créer une image docker personnalisé via un fichier texte.
FROM : Définit l'image de base qui sera utilisée par les instructions suivantes.
LABEL : Ajoute des métadonnées à l'image avec un système de clés-valeurs, permet par exemple d'indiquer à l'utilisateur l'auteur du Dockerfile.
ARG : Variables temporaires qu'on peut utiliser dans un Dockerfile.
ENV : Variables d'environnements utilisables dans votre Dockerfile et conteneur.
RUN : Exécute des commandes Linux ou Windows lors de la création de l'image. Chaque instruction RUN va créer une couche en cache qui sera réutilisée dans le cas de modification ultérieure du Dockerfile.
COPY : Permet de copier des fichiers depuis notre machine locale vers le conteneur Docker.
ADD : Même chose que COPY mais prend en charge des liens ou des archives (si le format est reconnu, alors il sera décompressé à la volée).
ENTRYPOINT : comme son nom l'indique, c'est le point d'entrée de votre conteneur, en d'autres termes, c'est la commande qui sera toujours exécutée au démarrage du conteneur. Il prend la forme de tableau JSON (ex : CMD ["cmd1","cmd1"]) ou de texte.
CMD : Spécifie les arguments qui seront envoyés au ENTRYPOINT, (on peut aussi l'utiliser pour lancer des commandes par défaut lors du démarrage d'un conteneur). Si il est utilisé pour fournir des arguments par défaut pour l'instruction ENTRYPOINT, alors les instructions CMD et ENTRYPOINT doivent être spécifiées au format de tableau JSON.
WORKDIR : Définit le répertoire de travail qui sera utilisé pour le lancement des commandes CMD et/ou ENTRYPOINT et ça sera aussi le dossier courant lors du démarrage du conteneur.
EXPOSE : Expose un port.
VOLUMES : Crée un point de montage qui permettra de persister les données.
USER : Désigne quel est l'utilisateur qui lancera les prochaines instructions RUN, CMD ou ENTRYPOINT (par défaut c'est l'utilisateur root).
ex de Dokerfile:
FROM ubuntu:20.04 #on démarre sur une image Ubuntu 20.04
RUN apt-get update && apt-get install nginx curl -y #on met à jour les dépôts et installe nginx et curl
EXPOSE 80 #on expose le port 80. Il faudra aussi, lors du lancement du contenaire, d'utiliser l'option publish, ex : publish 80:80
WORKDIR /var/www/html # spécifie le dossier de travail, équivaut à un cd
COPY test.html index.html #copie le fichier test.html en index.html
CMD ["nginx", "-g", "daemon off;"] #permet de lancer la commande nginx -g daemon off
Permet de créer sa propre image via Dockerfile
docker image build -t nom_de_l_image:tag dossier_du_dockerfile
ex : docker image build -t mywebserver . # le . indique que le Dockerfile est dans le dossier où est lancé la commande docker image
docker login
Saisir adresse mail
Puis mdp ou token
Permet d'envoyer l'image sur le dockerhub
Il faut récupérer l'ID de l'image (précédemment builder : docker image build -t nom_de_l_image:tag dossier_du_dockerfile)
docker image
Puis taguer l'image avec la version
docker tag ID nom_du_rep/nom_de_limage
ex :
docker tag 705ea992be79 tonytdj/appli:1.0
Envoyer l'image
docker push nom-de-limage
ex : docker push tonytdj/appli:1.0
docker volume create --name nom_du_volume
ex : docker volume create --name vol
Les volumes sont stocker dans la machine Docker (pas le contenaire) dans /var/lib/docker/volumes
docker run -it --name nom_contenaire -d nom_image
ex : docker run -it --name ubuntu1 -v vol:/tmp -d ubuntu /bin/bash
La commande permet d'affecter /tmp du contenaire au volume vol
docker volume inspect nom_du_volume
Affecter un dossier à un contenaire
docker run --name nom_contenaire -d -v /chemin_du_srv/:/chemin_du_contenaire/ nom_image
ex : docker run --name webserver -p 80:80 -d -v ${PWD}/static-website-example/:/usr/local/apache2/htdocs/ httpd
ex pour windows : docker run --name webserver -p 80:80 -d -v //c/Users/tony/Documents/static-website-example/:/usr/local/apache2/htdocs/ httpd
# Commandes Get avec un affichage basique
kubectl get services # Liste tous les services d'un namespace
kubectl get pods --all-namespaces # Liste tous les Pods de tous les namespaces
kubectl get pods -o wide # Liste tous les Pods du namespace courant, avec plus de détails
kubectl get deployment my-dep # Liste un déploiement particulier
kubectl get pods # Liste tous les Pods dans un namespace
kubectl get pod my-pod -o yaml # Affiche le YAML du Pod
# Commandes Describe avec un affichage verbeux
kubectl describe nodes my-node
kubectl describe pods my-pod