簡體   English   中英

Dockerfile、docker-compose.yml和application.properties混淆

[英]Dockerfile , docker-compose.yml and application.properties confusion

我正在開發一個 Spring 啟動應用程序,並希望將數據庫保存在一個 Docker 容器中。 然而,在進行搜索並嘗試安裝數據庫並連接之后,我真的很困惑docker-compose.ymlDockerfileapplication.properties中的 application.properties 。 能否請您盡快澄清以下幾點?

1.據我所知, docker-compose.yml用於創建 Docker 容器,例如在 Docker 上創建數據庫容器。如果我們不通過docker-compose up -d運行它, docker-compose.yml不會在我們運行 docker-compose.yml 時運行 docker-compose.yml . 真的嗎?

2、Dockerfile什么Dockerfile執行? 由於它用於為我們的應用程序構建必要的圖像,我認為它用於發布階段。 真的嗎?

3.據我所知,我們在application.properties (或 yml 版本)中使用數據庫連接字符串,當我們運行應用程序時,它會被使用。 application.propertiesdocker-compose.yml的區別,前者在app運行時執行,后者只在我們執行時使用。 真的嗎?

我有以下內容,但盡管在運行應用程序后在控制台上可以看到表創建字符串,但它無法創建表(我的應用程序中的相關實體有 @Entity 和 @Repository 注釋)。 那么,問題是什么?

spring.datasource.url=jdbc:postgresql://localhost:5432/product_db
spring.datasource.username=postgres
spring.datasource.password=********

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQL92Dialect
spring.jpa.properties.hibernate.default_schema = public
spring.jpa.hibernate.ddl-auto = create
spring.jpa.show-sql = true

更新:這是控制台上的日志消息,指示正在創建產品表等。

Hibernate:如果存在 public.product 級聯則刪除表
Hibernate:創建表 public.product(id bigserial 不是 null,名稱 varchar(255),代碼 varchar(255),主鍵(id))

  1. 實際上, docker-compose.yml文件僅供docker-compose updocker-compose命令使用。 普通docker命令和非 Docker java命令根本不看。

  2. 當您運行Dockerfile docker-compose builddocker-compose up --builddocker build時,將讀取 Dockerfile。 還有 Maven 和 Gradle 擴展來構建 Docker 圖像。 它需要先運行,然后才能運行容器,例如用於手動或集成測試。 請注意, docker-compose.yml文件中的大多數設置在 Dockerfile 中是不可見的,鏡像構建無法訪問其他容器。

  3. Spring有幾種設置屬性的方法。 請注意,像數據庫 URL 這樣的東西在容器中運行與直接在主機上運行是不同的,並且在雲環境中可能再次不同; 這使得它不適合在 jar 文件中內置的application.properties文件中設置。 您可以在docker-compose.yml中設置$SPRING_DATASOURCE_URL環境變量。

因此,您上面顯示的內容的典型 Compose 設置可能類似於:

version: '3.8'
services:
  application:
    build: .             # `docker-compose up --build` will read the Dockerfile
    ports: ['8080:8080'] # host:container port
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db/product_db
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=********
  db:
    image: postgres:14   # from Docker Hub, not built locally
    ports: ['5432:5432'] # optional
    volumes:             # persist database data across restarts
      - dbdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=product_db 
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=********
volumes:
  dbdata:                # no particular settings for this volume

SPRING_DATASOURCE_*環境變量設置相應的spring.datasource.*屬性並覆蓋application.properties文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM