Doc Docker
Si votre serveur dédié est destiné à recevoir des applications que vous développez, vous pouvez utiliser Docker pour les déployer.
Installation
Docker n’est pas installé par défaut, nous l’installerons si vous en avez besoin.
Pour nous le demander, vous pouvez nous ouvrir un ticket en nous indiquant quels sont les utilisateurs Unix qui doivent avoir les droits d’admin.
Note : attention, votre serveur dédié doit être en Debian 11 ou supérieur.
Vérifications
Vous pouvez vérifier que Docker est bien installé en faisant la commande :
$ docker -v
Vous pouvez vérifier que vous êtes bien dans le groupe Unix docker
vous permettant d’avoir les droits d’admin sur Docker via :
$ groups
Vous pouvez vérifier que vous avez effectivement les droits d’admin avec la commande :
$ docker ps
Si vous n’avez pas les droits d’admin, vous risquez d’avoir une erreur du type :
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.48/containers/json": dial unix /var/run/docker.sock: connect: permission denied
Utilisation
Une image Docker contient un système minimal avec un ou plusieurs services. Un conteneur quant à lui est une instance (créée à partir d’une image) en cours d’exécution.
Voici un concentré des commandes les plus utiles :
# docker images
# docker ps -a
# docker logs <ID ou nom du conteneur> -f
# docker inspect <ID ou nom du conteneur> | less
# docker network ls
Pour instancier un nouveau conteneur :
$ docker run <image> [commande]
Si une commande spécifiée, celle-ci remplacera celle du CMD
de l’image.
Options utiles :
--name NOM : donner un nom au conteneur
-p port_hôte:port_conteneur : rendre un port accessible depuis l'hôte
-d : lancer le conteneur en mode 'détaché'
-it : lancer le conteneur en mode intéractif avec tty
--network NOM : lancer le conterneur sur un réseau docker spécifique existant
--user nom_user|uid : lancer le process du conteneur avec l'utilisateur/uid spécifié
Par exemple, on peut lancer ainsi un conteneur contenant Debian pour faire des tests :
$ docker run -it --rm debian /bin/bash
root@916438fc1bd0:/# apt update && apt install telnet netcat-openbsd -y
root@916438fc1bd0:/# exit
Le conteneur est supprimé automatiquement lorsqu’on exit
.
Pour démarrer un conteneur existant (précédemment instancié avec docker run
) :
$ docker start <ID ou nom du conteneur>
Pour éteindre ou tuer un conteneur :
$ docker stop|kill <ID ou nom du conteneur>
Pour supprimer un conteneur :
$ docker rm <ID ou nom du conteneur>
Pour s’assurer qu’un conteneur démarre ou non au démarrage du démon Docker, il existe un paramètre RestartPolicy :
$ docker inspect -f "{{ .HostConfig.RestartPolicy.Name }}" <ID ou nom du conteneur>
Pour voir les journaux d’un conteneur :
$ docker logs <ID ou nom du conteneur>
Il s’agit en fait de la sortie standard et la sortie d’erreur du processus lancé à l’intérieur du conteneur.
Pour affichier les informations d’un conteneur :
$ docker inspect <ID ou nom du conteneur>
Monitoring
Si vous souhaitez que l’on surveille directement un conteneur, vous devez nous ouvrir un ticket. Vous devez nous préciser la façon dont on doit le surveiller, et vous assurer que les logs d’erreur seront accessible via docker log
. Vous pouvez aussi nous fournir des instructions pour agir en cas d’erreur, notamment comment relancer le conteneur en cas de problème.
Sécurité
Vous êtes responsable du code que vous publiez dans un conteneur Docker. Ainsi, ayez conscience qu’une instance Docker contient un petit système d’exploitation, et que vous devrez la mettre à jour pour toute faille de sécurité dans l’applicatif publié, mais aussi dans la libc
(bibliothèque standard C) et pas mal d’autres bibliothèques ou logiciels (libssl
, etc.).
FAQ
Comment communiquer depuis le serveur dédié vers un conteneur Docker ?
Vous devez « publier » un port qui rendra accessible le port « exposé » de votre conteneur avec l’option -p
. Par exemple si vous lancez un conteneur nginx
qui expose le port 80, vous pouvez le publier sur le port 4242 :
$ docker run -p 4242:80 -d nginx
Et vous pourrez communiquer avec le port 80 du conteneur en sollicitant l’IP 172.17.0.1
sur le port 4242.
$ telnet 172.17.0.1 4242
Comment communiquer depuis un conteneur Docker vers un service local du serveur dédié ?
Tous les services locaux du serveur dédié sont publiés sur l’IP 172.17.0.1
.
Vous pouvez ainsi atteindre un service MariaDB qui écoute sur le port TCP/3306 ainsi :
$ docker run -it --rm debian /bin/bash
root@916438fc1bd0:/# apt update && apt install telnet -y
root@916438fc1bd0:/# telnet 172.17.0.1 3306
root@916438fc1bd0:/# exit
Comment rendre accessible un conteneur Docker sur Internet ?
Nous déconseillons de rendre accessible un conteneur Docker directement sur Internet. Nous conseillons de passer par un proxy intermédiaire comme HAProxy.
Si néanmoins vous avez besoin de faire une exception, vous pouvez nous ouvrir un ticket en nous précisant quel conteneur vous voulez rendre accessible, et quel est le port publié à rendre accessible.