DanLevy.net

Configuration du serveur Docker

Démarrer les serveurs de base de données avec une seule commande

Hero image for Configuration du serveur Docker

Configuration du serveur Docker

Note historique : il s’agit d’une référence de développement local de 2015. Elle est utile pour comprendre l’ancien flux de travail, mais ne traitez pas ces extraits comme des conseils de production actuels. Les fichiers Docker Compose modernes, les réseaux personnalisés, les versions d’image figées, l’authentification, les secrets, la gestion des mises à jour sont aujourd’hui des paramètres plus sûrs.

À qui s’adresse ce guide ?

Ne laissez jamais ces raisons vous bloquer !

Liens rapides vers les commandes en une ligne

Cet article propose des commandes d’une ligne pour lancer les bases de données les plus populaires, dont :

PostgreSQL icon Postgres

MongoDB icon MongoDB

MySQL icon MySQL

Elastic icon ElasticSearch

Note : Ces commandes sont conçues comme des raccourcis pour le développement local. Si vous les adaptez à la production, ajoutez d’abord l’authentification, la gestion des secrets, les sauvegardes, les politiques réseau, des images figées et un plan de mise à jour.

Utilisateurs Docker avancés : Si vous maîtrisez docker-compose, vous pouvez convertir les commandes shell ci‑dessous en entrées de votre fichier docker-compose.yml.

Serveur Postgres

Démarrez un conteneur en le nommant pg-localhost

Terminal window
# Stockez les fichiers de la base de données sur un chemin local, en dehors du conteneur
mkdir -p $HOME/.postgres-data
docker run \
--name pg-localhost \
-p 127.0.0.1:5432:5432 \
-e POSTGRES_PASSWORD=password \
--restart unless-stopped \
-it \
--shm-size=256mb \
postgres:16-alpine \
postgres -c 'listen_addresses=*' \
-c 'password_encryption=scram-sha-256' \
-c 'shared_memory_type=sysv' \
-c 'shared_buffers=256MB' \
-c 'max_connections=200'

Ajustez les options de ligne de commande selon vos besoins. (Les arguments du démon postgres commencent après le nom de l’image Docker postgres:16-alpine. Voir postgres -c 'listen_addresses=*'...)

Accédez à l’invite psql en tant qu’utilisateur postgres

Terminal window
docker exec --user postgres -it pg-localhost psql

Accédez au shell du conteneur en tant que root

Terminal window
docker exec -it pg-localhost bash

Note : La commande ci‑dessus utilise les images de base officielles Alpine Linux. Ce n’est pas votre environnement Debian habituel.

Pour utiliser l’image de base debian/ubuntu, remplacez postgres:12-alpine par postgres:12.

Serveur MongoDB

Terminal window
mkdir -p $HOME/.mongodb/data
docker run -d \
--name mongodb \
--restart on-failure:5 \
-p 127.0.0.1:27017:27017 \
-v $HOME/.mongodb:/data \
mongo:7 \
bash -c 'mongod --bind_ip 0.0.0.0'

Une fois votre serveur configuré, vérifiez que vos données se trouvent dans $HOME/.mongodb avec :

Terminal window
ls -lach $HOME/.mongodb

Connectons‑nous au serveur avec l’outil CLI mongosh. (Si vous ne l’avez pas installé, voir ci‑dessous.)

Terminal window
#> Using default arguments:
mongosh

Et vous devriez voir quelque chose comme :

Preview of mongo shell output

Installation des outils CLI Mongo

Avec brew & macOS
Terminal window
brew tap mongodb/brew
brew install mongodb-community-shell

Serveur MySQL

AVERTISSEMENT : MODIFIEZ LE MOT DE PASSE DANS MYSQL_ROOT_PASSWORD CI‑DESSOUS.

Terminal window
mkdir -p $HOME/.mysql
docker run -d \
-v $HOME/.mysql:/var/lib/mysql \
-p 127.0.0.1:3306:3306 \
--name mysql-$USER \
-e MYSQL_DATABASE=$USER \
-e MYSQL_ROOT_HOST='172.*.*.*' \
-e MYSQL_ROOT_PASSWORD='p@ssw0rd' \
mysql/mysql-server:8

Serveur ElasticSearch

Terminal window
mkdir -p $HOME/.elastic
docker run -d \
--name elastic \
-p 127.0.0.1:9200:9200 \
-p 127.0.0.1:9300:9300 \
-v $HOME/.elastic:/data \
docker.elastic.co/elasticsearch/elasticsearch:8.15.5 bash -c 'elasticsearch --cluster.name elastic_cluster --node.name elastic01 --path.data /data/elastic-data --path.logs /data/elastic-logs '
Notes de sécurité

NOTE : l’option de port de type -p 127.0.0.1:27017:27017 empêche tout accès à votre instance sauf depuis le réseau localhost du serveur Docker.
Pour « publier » les ports exposés, retirez le préfixe d’adresse IP locale afin de permettre l’accès externe : -p 27017:27017. Assurez‑vous d’avoir pris les précautions de sécurité nécessaires.

Recommandé : utilisez toujours un outil de scan de ports (comme nmap ou masscan) pour vérifier votre configuration réseau (depuis un système distinct sur un autre réseau).

Maintenant que vous avez les commandes pour démarrer vos serveurs de bases de données, l’étape suivante consiste à empaqueter votre application en image Docker. La partie 2 se poursuit ci‑dessous :

Empaquetage d’une application Web NodeJS

  1. Ajoutez un fichier vide nommé Dockerfile à la racine de votre projet.
  2. (Optionnel, recommandé) Ajoutez un fichier .dockerignore en vous basant sur les règles de .gitignore afin d’exclure les chemins volumineux et non essentiels. Par défaut, tous les fichiers du projet sont inclus.

Créez un Dockerfile à la racine de votre application

# Exemple pour NodeJS
FROM node:22
EXPOSE 3000
COPY . /app/
WORKDIR /app
RUN apt-get update && apt-get dist-upgrade -yqq
RUN ["npm", "install"]
# Commande sur‑définissable
CMD ["npm", "start"]

Il est plus simple de montrer comment démarrer avec le Dockerfile et de démontrer le résultat via la console (voir les commandes ci‑dessous).

Dans le terminal, cd dans le dossier de votre projet et exécutez la commande build suivante à chaque fois que vous déployez des modifications — ou que vous souhaitez changer/mettre à jour le système d’exploitation ou la configuration d’environnement)

Terminal window
docker build -t app-name-here .

Référence des commandes Docker essentielles

Construire une image Docker

Terminal window
docker build -t app-name-here .

Créer/Exécuter l’application Web avec des liens vers les serveurs DB

Terminal window
docker network create app-local
docker network connect app-local mongodb
docker network connect app-local elastic
docker run -d --name webapp01 --network app-local -p 3000:3000 app-name-here

Exécution interactive (non‑daemon, dans le terminal)

Terminal window
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bash

Suppression d’une instance de conteneur ou d’une image

Important : toute donnée qui n’est pas stockée sur un volume monté sera perdue !!

Terminal window
# Supprimer l’image
docker rmi -f app-name-here
docker rm -f webapp01
# maintenant relancez votre `docker run...` depuis ^^^
# Par exemple, pour arrêter vos instances de bases de données ci‑dessus, exécutez : (départ avec quelque chose comme `docker stop {mongo,elastic}` )
docker rm -f mongo elastic