Ich lerne Docker. Ich erstelle ein Image aus einer Docker-Datei in einer Counter-Anwendung. Und ich verwende MySQL als Datenbank. Die DockerCompose-Datei verwendet eine Datenbank und zwei Container aus demselben Anwendungsimage. Die MySQL-Datenbank verfügt über zwei verschiedene Modi. Mein Ziel ist es, separate Anwendungsdienste mit unterschiedlichen Ports (z. B. 9000 und 9001) und einem eigenen Schema zu haben. Wenn ich localhost:9000/index aufrufe, wird der erste Zähler angezeigt, und wenn ich localhost:9000/index aufrufe, wird der zweite Zähler angezeigt.
Aber das Problem ist, dass beide den ersten Modus verwenden, sodass das Ergebnis der gleiche Zähler ist. Wie isoliert man Architektur?
Ein Dokument schreiben->
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
最好为每个应用程序及其数据库提供单独的 docker compose。
如果您只想为两个应用程序使用一个 docker compose,则可以使用不同的公开架构和端口为 mysql 定义两个单独的服务,并在应用程序中引用它们中的每一个。
这与您为其定义了两个服务的应用程序相同。
此外:
您提到了同一个应用程序,您的意思似乎是:
本地主机:9000/索引
和
本地主机:9001/索引