Comment partager le schéma de base de données dans les fichiers DockerCompose ?
P粉032977207
P粉032977207 2024-03-19 21:28:55
0
1
303

J'apprends Docker. Je construis une image à partir d'un Dockerfile dans une application de compteur. Et j'utilise MySQL comme base de données. Le fichier DockerCompose utilise une base de données et deux conteneurs de la même image d'application. La base de données Mysql a deux modes différents. Mon objectif est d'avoir des services d'application distincts avec des ports différents (par exemple 9000 et 9001) et ils ont leur propre schéma. Lorsque j'appelle localhost:9000/index, il affiche le premier compteur et lorsque j'appelle localhost:9000/index, il affiche le deuxième compteur.

Mais le problème est qu'ils utilisent tous les deux le premier mode, donc le résultat est le même compteur. Comment isoler l’architecture ?

Rédiger un document->

version: '3.1'

services:

  mysql:
    image: mysql
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql_data:/var/lib/mysql


  hello-docker:
    image: hello-docker:0.0.2
    restart: always
    environment:
      DB_CONNECTION_IP: mysql
      DB_SCHEMA_NAME: hello-counter
    ports:
        - "9000:9000"
    volumes:
        - mysql_data:/var/lib/mysql

  hello-docker2:
    image: hello-docker:0.0.2
    restart: always
    environment:
      DB_CONNECTION_IP: mysql
      DB_SCHEMA_NAME: hello_counter2
    ports:
      - "9001:9000"

volumes:
  mysql_data:

application.yaml->

spring:
  datasource:
    url: &connectionUrl jdbc:mysql://${DB_CONNECTION_IP:localhost}:${DB_CONNECTION_PORT:3306}/${DB_SCHEMA_NAME}?allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate.ddl-auto: validate
    generate-ddl: true
    show-sql: true
    properties.hibernate.format_sql: true


server:
  port: 9000

P粉032977207
P粉032977207

répondre à tous(1)
P粉475315142

Il est préférable d'avoir un docker composé séparé pour chaque application et sa base de données.

Si vous souhaitez utiliser un seul docker compose pour deux applications, vous pouvez définir deux services distincts pour MySQL avec des schémas et des ports exposés différents, et référencer chacun d'eux dans l'application.

Il s'agit de la même application pour laquelle vous avez défini deux services.

Aussi :

Vous avez mentionné la même application, vous semblez vouloir dire :

localhost:9000/index

et

localhost:9001/index

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal