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.