使用容器進行 Java 開發
先決條件
按照步驟操作,將您的應用程式容器化,請參閱 將您的應用程式容器化。
概觀
在本節中,您將逐步設定您在上一節中容器化的應用程式的本地開發環境。 這包括
- 新增本地資料庫並保存資料
- 建立開發容器以連接偵錯器
- 設定 Compose 以在您編輯和儲存程式碼時自動更新正在執行的 Compose 服務
新增本地資料庫並保存資料
您可以使用容器來設定本地服務,例如資料庫。在本節中,您將更新 `docker-compose.yaml` 檔案來定義資料庫服務和保存資料的卷。此外,此特定應用程式使用系統屬性來定義資料庫類型,因此您需要更新 `Dockerfile` 以在啟動應用程式時傳入系統屬性。
在複製的儲存庫目錄中,使用 IDE 或文字編輯器開啟 `docker-compose.yaml` 檔案。您的 Compose 檔案有一個範例資料庫服務,但它需要針對您的應用程式進行一些更改。
在 `docker-compose.yaml` 檔案中,您需要執行以下操作
- 取消註釋所有資料庫指令。您現在將使用資料庫服務而不是本地儲存來儲存資料。
- 移除頂層 `secrets` 元素以及 `db` 服務內的元素。此範例使用環境變數作為密碼,而不是 secrets。
- 從 `db` 服務中移除 `user` 元素。此範例在環境變數中指定使用者。
- 更新資料庫環境變數。這些是由 Postgres 影像定義的。如需詳細資訊,請參閱 Postgres 官方 Docker 影像。
- 更新 `db` 服務的健康檢查測試並指定使用者。預設情況下,健康檢查使用 root 使用者而不是您定義的 `petclinic` 使用者。
- 在 `server` 服務中將資料庫 URL 新增為環境變數。這會覆蓋在 `spring-petclinic/src/main/resources/application-postgres.properties` 中定義的預設值。
以下是更新後的 `docker-compose.yaml` 檔案。所有註釋都已移除。
services:
server:
build:
context: .
ports:
- 8080:8080
depends_on:
db:
condition: service_healthy
environment:
- POSTGRES_URL=jdbc:postgresql://db:5432/petclinic
db:
image: postgres
restart: always
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=petclinic
- POSTGRES_USER=petclinic
- POSTGRES_PASSWORD=petclinic
ports:
- 5432:5432
healthcheck:
test: ["CMD", "pg_isready", "-U", "petclinic"]
interval: 10s
timeout: 5s
retries: 5
volumes:
db-data:
在 IDE 或文字編輯器中開啟 `Dockerfile`。在 `ENTRYPOINT` 指令中,更新指令以傳入 `spring-petclinic/src/resources/db/postgres/petclinic_db_setup_postgres.txt` 檔案中指定的系統屬性。
- ENTRYPOINT [ "java", "org.springframework.boot.loader.launch.JarLauncher" ]
+ ENTRYPOINT [ "java", "-Dspring.profiles.active=postgres", "org.springframework.boot.loader.launch.JarLauncher" ]
儲存並關閉所有檔案。
現在,執行以下 `docker compose up` 命令來啟動您的應用程式。
$ docker compose up --build
開啟瀏覽器並在 http://localhost:8080