TP 6 : Déploiement de Docker sur serveur#
On traitera ici de l’administration d’un serveur sur Ubuntu, version 22.04.
1. Installation de Docker#
1.1. Préparation du serveur#
On commence par préparer le système d’exploitation.
Ainsi, on va créer un utilisateur (ici ubuntu) pour ne pas utiliser
directement le compte root. Pour ce faire, utiliser la commande :
adduser ubuntu
Entrez un mot de passer et remplissez le formulaire, puis validez.
On ajoutera ce compte au groupe sudo pour qu’il puisse exécuter des
commandes privilégiées :
adduser ubuntu sudo
# OU
usermod -aG sudo ubuntu
Déconnectez-vous du compte root et connectez-vous à votre compte
utilisateur.
Enfin, on met à jour les paquets du serveur :
sudo apt update
sudo apt upgrade -y
1.2. Installation de Docker#
On installe les dépendances de docker :
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
On ajoute ensuite la clé GPG de Docker :
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Et on ajoute le dépôt Docker aux sources aptitude :
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
On peut ensuite installer le Docker engine et la Docker cli :
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Et finir par donner à notre utilisateur les droits pour utiliser Docker :
sudo usermod -aG docker $(whoami)
Déconnectez-vous et reconnectez-vous pour que les modifications soient suivies d’effet, puis vérifiez que tout fonctionne correctement :
docker ps
2. Préparation du système#
2.1. Configurer OpenSSH pour la production#
Danger
Ne jamais autoriser la connexion par mot de passe dans un contexte de production. Dans la mesure du possible, il faut également éviter de conserver le port SSH par défaut.
Editer le fichier /etc/ssh/sshd_config et appliquer les paramètres suivants :
Port 22022
PermitRootLogin phohibit-password
PasswordAuthentication no
Pour faciliter la connexion, côté client, on peut créer un fichier .ssh/config et y ajouter le contenu suivant :
Host docker-learn
User ubuntu
HostName <your-ip>
Port 22022
IdentityFile ~/.ssh/id_rsa
Vous pourrez désormais vous connecter en tapant simplement la commande :
ssh docker-learn
2.2. Configurer le firewall#
Rassurez-vous, pas de règles iptables ici. Nous allons utiliser le firewall UFW (Uncomplicated FireWall), qui est normalement déjà installé sur votre serveur. Pour le vérifier, tapez :
sudo ufw status
Ce à quoi le système devrait vous répondre : Status: inactive. Si ce n’est pas le cas, installez UFW ainsi :
sudo apt update
sudo apt install ufw
Indication
Quelques commandes UFW :
sudo ufw status # Afficher le statut de ufw et les règles actives
sudo ufw status numbered # Idem, mais en attribuant un numéro à chaque règle
sudo ufw enable # Activer ufw
sudo ufw disable # Désactiver ufw
sudo ufw default <cmpt> # Définir le comportement par défaut du firewall
sudo ufw logging <on,off> # Activer / désactiver la journalisation
sudo ufw allow <rule> # Définir une règle permissive
sudo ufw deny <rule> # Définir une règle restrictive
sudo ufw delete <rule-nbr> # Supprimer une règle à l'aide de son numéro
Voir aussi
Une documentation simplifiée de UFW est disponible sur Ubuntu-fr.
Pour l’instant, nous n’avons qu’un service SSH tournant sur le port 22022.
Il nous faut créer une règle autorisant cette communication.
Si nous n’avions pas changé le port SSH à la section précédente, nous aurions pu utiliser la commande sudo ufw allow OpenSSH
pour que le port 22 soit automatiquement autorisé. Cependant, comme nous avons changé le port, la commande est un peu différente :
sudo ufw allow 22022
Nous souhaitons également installer des services HTTP (qui utilise le port 80) sur notre machine. Pour cela, exécutez la commande suivante :
sudo ufw allow 80
Activez ensuite le firewall avec la commande :
sudo ufw enable
Et c’est bon ! Le firewall est opérationnel et bloquera toutes les connexions à l’exception des paquets HTTP et SSH.
Avertissement
Le Docker Engine crée et supprime automatiquement et directement des règles iptables. Il est donc possible que vos configurations Docker arrivent à passer au travers de votre firewall. Ce problème se règle avec une configuration additionnelle de ufw.
Nous allons faire sans dans le cours actuel et partir du principe que le firewall fonctionne correctement, mais il est important de garder cet état de fait à l’esprit, et de se pencher sur cette problématique dans un contexte de production.