如何使用 docker-compose from other person?

How to use docker-compose from another person?

我对 Docker 的世界还很陌生,所以我有以下场景:

和前端向他们请求数据。

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 文件。