如何使用 docker-compose from other person?
How to use docker-compose from another person?
我对 Docker 的世界还很陌生,所以我有以下场景:
- Spring 引导应用程序依赖于..
- PostgreSQL
和前端向他们请求数据。
Spring 启动应用程序中的 Docker 文件是:
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 就够了吗?完成了吗?
docker-compose在团队合作中应该如何使用?
提前致谢,如果我必须说得更清楚,请发表评论!
由于 api
服务中 docker-compose 中的 build: .
关键字,运行ning docker-compose up
将搜索后端 Dockerfile 并构建映像.所以,你的队友需要得到你写的所有文件。
另一种解决方案,在我看来更好,是由你构建图像并将其推送到 docker.hub,这样你的队友就可以从那里拉图像并 运行 它在 [=19] =] 系统。对于此解决方案,this 可能会有用。
如果您不熟悉 docker 集线器,请阅读 this quick start
您的同事需要:
docker-compose.yml
文件本身
- 在
volumes:
绑定装载 的 left-hand 侧命名的任何本地文件或目录
- 任何在
build:
(或 build: { context: }
)行中命名的目录,如果图像没有被推送到注册表
- 未自动重新创建的命名卷中包含的任何数据内容
如果他们有 docker-compose.yml
文件,他们可以 docker-compose pull
那里命名的图像,并且 Docker 不会尝试重建它们。
命名卷很难在系统之间传输;见Docker documentation on saving and restoring volumes。 Bind-mounted 主机目录更容易传输,但在 non-Linux 主机上传输速度要慢得多。避免将卷用于部分应用程序代码,包括 Node 库目录或静态资产。
特别是对于此设置,我可能会考虑进行的一项更改是使用 postgres
image 的环境变量来创建数据库,然后使用应用程序的数据库迁移系统来创建表和种子数据。这将避免需要两个 .sql
文件。除此之外,他们唯一需要的就是 docker-compose.yml
文件。
我对 Docker 的世界还很陌生,所以我有以下场景:
- Spring 引导应用程序依赖于..
- PostgreSQL
和前端向他们请求数据。
Spring 启动应用程序中的 Docker 文件是:
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 就够了吗?完成了吗?
docker-compose在团队合作中应该如何使用?
提前致谢,如果我必须说得更清楚,请发表评论!
由于 api
服务中 docker-compose 中的 build: .
关键字,运行ning docker-compose up
将搜索后端 Dockerfile 并构建映像.所以,你的队友需要得到你写的所有文件。
另一种解决方案,在我看来更好,是由你构建图像并将其推送到 docker.hub,这样你的队友就可以从那里拉图像并 运行 它在 [=19] =] 系统。对于此解决方案,this 可能会有用。
如果您不熟悉 docker 集线器,请阅读 this quick start
您的同事需要:
docker-compose.yml
文件本身- 在
volumes:
绑定装载 的 left-hand 侧命名的任何本地文件或目录
- 任何在
build:
(或build: { context: }
)行中命名的目录,如果图像没有被推送到注册表 - 未自动重新创建的命名卷中包含的任何数据内容
如果他们有 docker-compose.yml
文件,他们可以 docker-compose pull
那里命名的图像,并且 Docker 不会尝试重建它们。
命名卷很难在系统之间传输;见Docker documentation on saving and restoring volumes。 Bind-mounted 主机目录更容易传输,但在 non-Linux 主机上传输速度要慢得多。避免将卷用于部分应用程序代码,包括 Node 库目录或静态资产。
特别是对于此设置,我可能会考虑进行的一项更改是使用 postgres
image 的环境变量来创建数据库,然后使用应用程序的数据库迁移系统来创建表和种子数据。这将避免需要两个 .sql
文件。除此之外,他们唯一需要的就是 docker-compose.yml
文件。