[英]Dockerfile , docker-compose.yml and application.properties confusion
我正在開發一個 Spring 啟動應用程序,並希望將數據庫保存在一個 Docker 容器中。 然而,在進行搜索並嘗試安裝數據庫並連接之后,我真的很困惑docker-compose.yml
, Dockerfile
和application.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.properties
和docker-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))
實際上, docker-compose.yml
文件僅供docker-compose up
等docker-compose
命令使用。 普通docker
命令和非 Docker java
命令根本不看。
當您運行Dockerfile
docker-compose build
或docker-compose up --build
或docker build
時,將讀取 Dockerfile。 還有 Maven 和 Gradle 擴展來構建 Docker 圖像。 它需要先運行,然后才能運行容器,例如用於手動或集成測試。 請注意, docker-compose.yml
文件中的大多數設置在 Dockerfile 中是不可見的,鏡像構建無法訪問其他容器。
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.