Skip to main content

Partager 1 conteneur BDD avec plusieurs autres conteneur

Comment partager un conteneur de BDD avec les autres ?

Pour ce faire nous allons mettre en place un nouveau réseau (Network) et connecter les conteneurs entre eux via ce nouveau réseau. L'architecture pourra être schématisé de la manière suivante :



1/ Créer le nouveau Network

La création d'un nouveau réseau avec Docker est très simple. Il suffit d'exécuter la commande suivante : 

sudo docker network create "<new_network_name>"

Nous pouvons vérifier la création du réseau avec la commande suivante : 

sudo docker network list

Ce qui donne la sortie : 

user@servername:~$ sudo docker network list
NETWORK ID     NAME                DRIVER    SCOPE
29f7ba793880   bddnet              bridge    local
21bac3cf5868   bridge              bridge    local
035d5327faeb   host                host      local
041e2c568093   none                null      local

Nous pouvons voir que le Network bddnet existe bien. 

2/ Créer le conteneur BDD

Après avoir créé le réseau, nous allons maintenant créer le conteneur de la base de données et le connecter a ce nouveau réseau. 

Nous pouvons créer un conteneur avec la commande suivante : 

Un point important dans cet étape, c'est de donner un nom au conteneur de BDD, il sera plus facile par la suite de le lier aux autres conteneurs.

sudo docker run -d --name postgres --network bddnet -e POSTGRES_USER="postgres" 

Ou via un docker compose : 

version: '3.8'

services:
  db:
    image: postgres:14-alpine
    container_name: postgres			# Nom du conteneur de BDD
    restart: always
    networks:
      - bddnet							# On lie ce conteneur au nouveau réseau
    ports:
      - '5432:5432'
    volumes:
      - /var/lib/postgres/data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=passwordPostgres

volumes:
  postgres-data:
networks:
  bddnet:		# On précise que le réseau déclaré au dessus existe déjà
    external: true

3/ Connecter les autres conteneurs 

De la même manière que la création du conteneur de base de données nous allons créer des conteneur et les connecter sur le nouveau réseau.

sudo docker run -d --name website --network bddnet -p 80:8080 -e URL_SITE="http://exemple.com" -e DB_HOST="postgres" website

L'étape importante dans la création d'un conteneur utilisant le service d'un autre conteneur est : qu'il faut mettre le nom du conteneur de destination dans la variable d'environnement host. 

Cet étape est plus visuel dans un docker compose : 

version: '3'

services:
  web:
    image: website:latest
    container_name: website
    networks:
      - bddnet					# On lie ce conteneur au nouveau réseau
    environment:
      DB_TYPE: postgres
      DB_HOST: postgres			# Nom du conteneur de BDD
      DB_PORT: 5432
      DB_USER: user
      DB_PASS: userPwd
      DB_NAME: bddname
    restart: unless-stopped
    ports:
      - "80:80"

networks:
  bddnet:						# On précise que ce réseau existe déjà
    external: true

Il suffit de répéter cet étape a chaque fois que l'on souhaite connecter un conteneur au conteneur de BDD.