# cd /home/jovyan/work/examples/github/ebpro/notebook-containers-intro-sample-java-restjpa
docker compose --progress=quiet up -d --quiet-pullWARN[0000] No services to build
Principes de base de l’Orchestration de conteneurs, application avec Docker Compose.
2026-01-28
Jupyter Kernel: bash
🖥️ Env Ubuntu 24.04.3 LTS / x86_64 • 🐳 Docker Client 29.1.5 / Server 29.1.5 • 🌿 Git Branch @ 7b914bd
Ce support a été généré par Quarto : les cellules sont exécutées par le noyau indiqué lors du rendu.
Certaines parties ont été rédigées avec l’assistance d’un modèle de langage ; le contenu a été relu et validé par l’auteur.
L’orchestration consiste à coordonner plusieurs conteneurs au sein d’une même application. Si kubernetes de Google est l’outil de référence pour les déploiements complexes, docker compose offre une alternative plus simple pour les architectures modestes.
Docker compose, disponible comme plugin de Docker, permet de décrire une architecture multi-conteneurs dans un fichier YAML (docker-compose.yml). Il gère les services, volumes et réseaux avec la même syntaxe que Docker, simplifiant ainsi le déploiement d’applications conteneurisées.
PROVIDER="github" && \
REPO="ebpro/notebook-containers-intro-sample-java-helloworld" && \
BRANCH="develop" && \
gitpull.sh --provider github --quiet \
--branch ${BRANCH} ${REPO} \
--message "Les exemples suivants sont accessibles dans le dépôt :" && \
source get_src_dir.sh ${PROVIDER} ${REPO}
PROVIDER="github" && \
REPO="ebpro/notebook-containers-intro-sample-java-restjpa" && \
BRANCH="develop" && \
gitpull.sh --provider github \
--branch ${BRANCH} ${REPO} \
--message "Les exemples suivants sont accessibles dans le dépôt :" && \
source get_src_dir.sh ${PROVIDER} ${REPO}
cd ${SRC_DIR}✅ Updated existing repository: ebpro/notebook-containers-intro-sample-java-helloworld
[2026-01-28 14:36:47] Updating existing repository in /home/jovyan/work/examples/github/ebpro/notebook-containers-intro-sample-java-restjpa ✅ Updated existing repository: ebpro/notebook-containers-intro-sample-java-restjpa
docker-compose.yml
services:
# Database service
db:
image: 'postgres:15.2-alpine'
environment:
- POSTGRES_USER=dba
- POSTGRES_PASSWORD=secret # Consider using .env file for secrets
- POSTGRES_DB=demo-db
volumes:
- restjpa-pg-data:/var/lib/postgresql/data
networks:
- backend
healthcheck: # Adding healthcheck for better orchestration
test: ["CMD-SHELL", "pg_isready -U dba -d demo-db"]
interval: 10s
timeout: 5s
retries: 5
# Application service
app:
image: 'restjpa:latest'
build:
context: .
dockerfile: Dockerfile
depends_on:
db:
condition: service_healthy # Wait for db to be healthy before starting
environment:
- DATASOURCE_URL=jdbc:postgresql://db:5432/demo-db
- DATASOURCE_USERNAME=dba
- DATASOURCE_PASSWORD=secret # Consider using .env file for secrets
ports:
- "8088:8080"
networks:
- frontend
- backend
restart: unless-stopped # Adding restart policy for better reliability
# Named volumes for persistent data
volumes:
restjpa-pg-data:
name: restjpa-pg-data # Explicit naming for better management
# Network configuration
networks:
frontend:
name: restjpa-frontend
backend:
name: restjpa-backendPour démarrer une application multi-conteneurs, utilisez la commande docker compose up dans le répertoire contenant le fichier docker-compose.yml. L’option -d (detach) permet d’exécuter les conteneurs en arrière-plan :
WARN[0000] No services to build
La commande docker compose ls fournit une vue d’ensemble de tous les projets Docker Compose en cours d’exécution, affichant pour chacun son nom, le répertoire source, l’état des services et le nombre de conteneurs actifs.
NAME STATUS CONFIG FILES
notebook-containers-intro-sample-java-restjpa running(2) /home/jovyan/work/examples/github/ebpro/notebook-containers-intro-sample-java-restjpa/docker-compose.yml
La commande docker compose ps affiche les conteneurs du projet en cours, avec leurs noms générés automatiquement selon le format <projet>-<service>-<numéro>. Cette convention de nommage permet d’exécuter plusieurs instances du même projet dans différents répertoires ou de dupliquer des services sans conflits, à condition d’éviter les liaisons de volumes (bind mounts) et les mappages de ports fixes vers l’hôte.
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
notebook-containers-intro-sample-java-restjpa-app-1 restjpa:latest "java -jar app.jar" app 11 seconds ago Up Less than a second (health: starting) 0.0.0.0:8088->8080/tcp, [::]:8088->8080/tcp
notebook-containers-intro-sample-java-restjpa-db-1 postgres:15.2-alpine "docker-entrypoint.s…" db 12 seconds ago Up 11 seconds (healthy) 5432/tcp
Docker Compose gère automatiquement les réseaux et volumes en les préfixant avec le nom du projet (par défaut, le nom du répertoire parent), permettant ainsi d’isoler les ressources entre différents projets et d’éviter les conflits de nommage, tout en facilitant leur identification et leur gestion avec des commandes comme docker compose down -v pour le nettoyage complet.
NETWORK ID NAME DRIVER SCOPE
300ffa5a1b7c bridge bridge local
70f1a98a168f host host local
6d2a2ceb1d58 none null local
1a745a4417d7 restjpa-backend bridge local
a6feae8af022 restjpa-frontend bridge local
DRIVER VOLUME NAME
local restjpa-pg-data
La commande docker compose logs permet de visualiser les journaux d’un ou plusieurs services, avec des options utiles comme -f pour suivre les logs en temps réel, --tail pour limiter le nombre de lignes affichées, et --since pour filtrer par date, facilitant ainsi le diagnostic et la surveillance des applications multi-conteneurs.
db-1 | 2026-01-28 14:36:51.526 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" db-1 | 2026-01-28 14:36:51.537 UTC [24] LOG: database system was shut down at 2026-01-28 14:36:49 UTC db-1 | 2026-01-28 14:36:51.544 UTC [1] LOG: database system is ready to accept connections db-1 | 2026-01-28 14:37:03.332 UTC [36] ERROR: relation "person" does not exist at character 15 db-1 | 2026-01-28 14:37:03.332 UTC [36] STATEMENT: SELECT 1 FROM PERSON app-1 | [EL Fine]: sql: 2026-01-28 14:37:03.353--ServerSession(1050768030)--Connection(24057252)--INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0) app-1 | [EL Fine]: sql: 2026-01-28 14:37:03.36--ServerSession(1050768030)--Connection(24057252)--INSERT INTO public.person (id, email, firstname, lastname) VALUES (1, 'a.b@ici.fr', 'a', 'b'); app-1 | [EL Fine]: sql: 2026-01-28 14:37:03.365--ServerSession(1050768030)--Connection(24057252)--INSERT INTO public.person (id, email, firstname, lastname) VALUES (2, 'c.d@la.fr', 'c', 'd'); app-1 | [EL Fine]: sql: 2026-01-28 14:37:03.371--ServerSession(1050768030)--Connection(24057252)--INSERT INTO public.person (id, email, firstname, lastname) VALUES (3, 'e.f@encore.com', 'e', 'f'); app-1 | [EL Fine]: sql: 2026-01-28 14:37:03.376--ServerSession(1050768030)--Connection(24057252)--INSERT INTO public.person (id, email, firstname, lastname) VALUES (4, 'g.h@encore.com', 'g', 'h');
Docker Compose offre plusieurs commandes pour gérer le cycle de vie des services : stop pour arrêter les conteneurs, rm pour les supprimer, restart pour les redémarrer, et down pour tout nettoyer (conteneurs et réseaux) - avec l’option -v pour inclure également la suppression des volumes, qu’ils soient nommés ou anonymes.
La commande docker compose down -v supprime définitivement toutes les données persistées dans les volumes.
[+] down 0/1 ⠋ Container notebook-containers-intro-sample-java-restjpa-app-1 Stopping 0.1s [+] down 0/1 ⠙ Container notebook-containers-intro-sample-java-restjpa-app-1 Stopping 0.2s [+] down 0/1 ⠹ Container notebook-containers-intro-sample-java-restjpa-app-1 Stopping 0.3s [+] down 0/1 ⠸ Container notebook-containers-intro-sample-java-restjpa-app-1 Removing 0.4s [+] down 1/2 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Stopping 0.0s [+] down 1/2 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Stopping 0.1s [+] down 1/2 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Stopping 0.2s [+] down 1/2 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Stopping 0.3s [+] down 1/2 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Removing 0.4s [+] down 3/5 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Removed 0.5s ✔ Volume restjpa-pg-data Removed 0.0s ⠋ Network restjpa-frontend Removing 0.0s ⠋ Network restjpa-backend Removing 0.0s [+] down 3/5 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Removed 0.5s ✔ Volume restjpa-pg-data Removed 0.0s ⠙ Network restjpa-frontend Removing 0.1s ⠙ Network restjpa-backend Removing 0.1s [+] down 3/5 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Removed 0.5s ✔ Volume restjpa-pg-data Removed 0.0s ⠹ Network restjpa-frontend Removing 0.2s ⠹ Network restjpa-backend Removing 0.2s [+] down 4/5 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Removed 0.5s ✔ Volume restjpa-pg-data Removed 0.0s ✔ Network restjpa-frontend Removed 0.3s ⠸ Network restjpa-backend Removing 0.3s [+] down 4/5 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Removed 0.5s ✔ Volume restjpa-pg-data Removed 0.0s ✔ Network restjpa-frontend Removed 0.3s ⠼ Network restjpa-backend Removing 0.4s [+] down 5/5 ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Removed 0.5s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Removed 0.5s ✔ Volume restjpa-pg-data Removed 0.0s ✔ Network restjpa-frontend Removed 0.3s ✔ Network restjpa-backend Removed 0.5s
L’autre service app est une application JPA/REST Java dont l’image docker est produite par sample-java/restjpa/Dockerfile. L’option build dans docker-compose.yml indique qu’il faut fabriquer l’image à partir du contexte courant (image sera alors son tag). La fabrication de l’image sera automatique au démarrage au besoin elle peut être faite manuellement avec docker compose build (ou --build avec --up).
WARN[0000] No services to build [+] up 1/2 ✔ Network restjpa-frontend Created 0.0s ⠋ Network restjpa-backend Creating 0.0s [+] up 3/4 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Creating 0.1s [+] up 3/4 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Creating 0.2s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Created 0.2s ⠋ Container notebook-containers-intro-sample-java-restjpa-app-1 Creating 0.1s [+] up 5/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Created 0.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 5/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Created 0.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 0.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 0.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 0.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 0.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 1.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 2.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 3.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 4.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 5.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 6.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 7.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 8.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 9.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠧ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠇ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠏ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.6s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.7s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.8s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠴ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 10.9s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 4/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ⠦ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 11.0s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 5/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Healthy 11.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 5/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Healthy 11.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 5/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Healthy 11.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 5/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Healthy 11.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s [+] up 5/5 ✔ Network restjpa-frontend Created 0.0s ✔ Network restjpa-backend Created 0.0s ✔ Volume restjpa-pg-data Created 0.0s ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Healthy 11.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Created 0.1s
La directive depends_on dans Docker Compose permet de gérer les dépendances entre services, mais va au-delà du simple ordre de démarrage grâce à la condition service_healthy qui, combinée avec des HEALTHCHECK (cf. Dockerfile), assure qu’un service est réellement opérationnel avant le démarrage des services qui en dépendent - par exemple, vérifier qu’une base de données accepte effectivement les connexions avant de lancer l’application qui l’utilise.
#| echo: true
#| output: true
#cd /home/jovyan/work/examples/github/ebpro/notebook-containers-intro-sample-java-restjpa
docker run --network notebook-containers-intro-sample-java-restjpa_frontend \
--rm --quiet curlimages/curl:7.88.1 \
curl --verbose --silent \
-H "Accept: application/json" \
http://notebook-containers-intro-sample-java-restjpa-app-1:8080/restjpa/personsL’exemple ci-dessous présente un exemple un peu plus avancé en ajoutant un reverse proxy (https://traefik.io) pour gérer les points d’entrées de l’application (sécurité, répartition de charges, …).
docker-compose.yml
services:
# Application service with Traefik integration
app:
labels:
- traefik.enable=true # Enable Traefik for this service
- traefik.http.routers.app.rule=PathPrefix(`/restjpa) # Route all /restjpa/* requests
- traefik.http.services.app.loadbalancer.server.port=80
image: 'restjpa:latest'
build:
context: .
depends_on:
db:
condition: service_healthy # Ensures database is ready before starting
environment:
- DATASOURCE_URL=jdbc:postgresql://db:5432/demo-db
- DATASOURCE_USERNAME=dba
- DATASOURCE_PASSWORD=secret # Should use .env file for secrets
networks:
- frontend # For Traefik communication
- backend # For database communication
restart: unless-stopped # Add restart policy for reliability
# PostgreSQL Database service
db:
image: 'postgres:15.2-alpine'
ports:
- "5432:5432" # Consider removing if external access isn't needed
environment:
- POSTGRES_USER=dba
- POSTGRES_PASSWORD=secret # Should use .env file for secrets
- POSTGRES_DB=demo-db
volumes:
- restjpa-pg-data:/var/lib/postgresql/data # Persistent storage
networks:
- backend
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dba -d demo-db"] # Improved healthcheck
interval: 10s
timeout: 5s
retries: 5
# Traefik reverse proxy service
traefik:
image: 'traefik:v3.3'
ports:
- '10080:80' # HTTP entrypoint
- '10443:443' # HTTPS entrypoint
- '18080:8080' # Traefik dashboard
networks:
- frontend
restart: unless-stopped
command:
- --api.dashboard=true
- --log.level=INFO
#- --log.filepath=/var/log/traefik.log
- --accesslog=true
#- --accesslog.filepath=/var/log/traefik-access.log
- --providers.docker.network=frontend
- --providers.docker.exposedByDefault=false
- --entrypoints.web.address=:80
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entryPoints.web.http.redirections.entrypoint.scheme=https
#- --entrypoints.websecure.address=:443
# - --entrypoints.websecure.asDefault=true
#- --entrypoints.websecure.http.tls.certresolver=myresolver
#- --certificatesresolvers.myresolver.acme.email=mail@example.com
#- --certificatesresolvers.myresolver.acme.tlschallenge=true
#- --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
labels:
- traefik.enable=true
- traefik.http.routers.mydashboard.rule=Host(`traefik.example.com`)
- traefik.http.routers.mydashboard.service=api@internal
#- traefik.http.routers.mydashboard.middlewares=myauth
#- traefik.http.middlewares.myauth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/
depends_on:
- db
- app
volumes:
- '/var/run/docker.sock:/var/run/docker.sock:ro' # Docker socket for auto-discovery
volumes:
restjpa-pg-data:
certifactes:
networks:
frontend:
backend:WARN[0000] No services to build [+] up 1/2 ⠋ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 0.1s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Running 0.0s [+] up 1/2 ⠙ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 0.2s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Running 0.0s [+] up 1/2 ⠹ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 0.3s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Running 0.0s [+] up 1/2 ⠸ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 0.4s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Running 0.0s [+] up 1/2 ⠼ Container notebook-containers-intro-sample-java-restjpa-db-1 Waiting 0.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Running 0.0s [+] up 2/2 ✔ Container notebook-containers-intro-sample-java-restjpa-db-1 Healthy 0.5s ✔ Container notebook-containers-intro-sample-java-restjpa-app-1 Running 0.0s