我對 Docker 世界很陌生,所以我有以下場景:
- Spring Boot 應用程式依賴于..
- PostgreSQL
和前端向他們請求資料。
Spring Boot 應用程式中的 Dockerfile 是:
EXPOSE 8080
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
docker-compose.yaml 的內容是:
version: '3'
services:
app:
image: <user>/<repo>
build: .
ports:
- "8080:8080"
container_name: app_test
depends_on:
- db
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/test
- SPRING_DATASOURCE_USERNAME=test
- SPRING_DATASOURCE_PASSWORD=test
db:
image: 'postgres:13.1-alpine'
restart: always
expose:
- 5432
ports:
- "5433:5432"
container_name: db_test
environment:
- POSTGRES_DB=test
- POSTGRES_USER=test
- POSTGRES_PASSWORD=test
volumes:
- db:/var/lib/postgresql/data
- ./create-tables.sql:/docker-entrypoint-initdb.d/create-tables.sql
- ./fill_tables.sql:/docker-entrypoint-initdb.d/fill_tables.sql
volumes:
db:
driver: local
據我了解,為了運行整個事情,只需鍵入docker-compose up和瞧,它就可以作業。它從 docker-hub 存盤庫中提取應用程式的影像,對資料庫的影像也是如此。
事情來了。我正在和另一個人(前端)一起作業,他的目標是向這個 API 發出請求。那么他只需復制粘貼這個 docker-compose.yaml 檔案并撰寫 docker-compose up 就足夠了,還是還有其他事情要做?
在團隊合作中應該如何使用 docker-compose?
提前謝謝,如果我必須說得更清楚,請發表評論!
uj5u.com熱心網友回復:
您的同事將需要:
- 檔案
docker-compose.yml本身 volumes:系結掛載左側命名的任何本地檔案或目錄- 如果影像未推送到注冊表,則以
build:(或)行命名的任何目錄build: { context: } - 未自動重新創建的命名卷中包含的任何資料內容
如果他們有docker-compose.yml檔案,他們可以docker-compose pull在那里命名影像,Docker 不會嘗試重建它們。
命名卷難以在系統之間傳輸;請參閱有關保存和恢復卷的 Docker 檔案。系結掛載的主機目錄更容易傳輸,但在非 Linux 主機上要慢得多。避免對部分應用程式代碼使用卷,包括 Node 庫目錄或靜態資產。
特別是對于這個設定,我可能考慮做的一個改變是使用postgresimage的環境變數來創建資料庫,然后使用應用程式的資料庫遷移系統來創建表和種子資料。這將避免需要這兩個.sql檔案。除此之外,他們唯一需要的就是docker-compose.yml檔案。
uj5u.com熱心網友回復:
由于build: .你的 docker-compose in apiservice 中的關鍵字,運行docker-compose up會搜索后端 Dockerfile 并構建鏡像。因此,您的隊友需要獲取您撰寫的所有檔案。
另一種在我看來更好的解決方案是由您構建映像并將其推送到 docker.hub,這樣您的隊友就可以從那里拉取映像并在他/她的系統上運行它。對于此解決方案,這可能很有用。
如果您不熟悉 docker hub,請閱讀此快速入門
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/438358.html
下一篇:Docker構建命令無法運行
