使用Docker-Compose从Git仓库构建镜像

3

首先我要说的是,我知道这个项目结构可能不是最理想的,但这正是高层想要的,所以我不能改变它。

我有多个Java项目在一个仓库中,我想将它们容器化为单个容器:

- main
    - project1
    - project2
    - Dockerfile

我对此没有任何问题;我的问题在于,我需要从一个(公共的)GitHub仓库中获取一些其他代码,并在我的项目容器内运行它们自己的容器。

- main-container
    - project1
    - project2
    - git-repo-container

我可以克隆代码仓库并将其成功地放入容器中(假设在之前的RUN命令中已安装了git):

RUN git clone --progress --verbose https://github.com/user/repo.git

现在,我完全不知道如何构建和运行存储库中指定的容器的Dockerfile

当然,我转向了docker-compose

version: "3.9"
services:
  my-image:
    build: .
    image: my-image
    ports:
      - 8080
      - 8100
  repo-image:
    build: .
    image: repo-image
    ports:
      - 8000

我对docker-compose比较陌生,所以这似乎有点令人困惑,但我知道我可以直接从GitHub构建镜像。 我只是不确定如何指定repo的Dockerfile,因为我在构建阶段拉取repo(并且希望避免在容器中安装docker来运行docker build ...)。
我应该补充一点,我不能将repo的源代码添加到此代码库中(不是我的决定),因此在构建阶段拉取repo似乎是我的唯一选择。
作为一个小问题,如果允许的话,为什么VS code在我在dev容器中打开项目时不显示repo文件夹呢?
1个回答

3
Docker支持直接从GitHub URL构建,参见此文档

docker build [OPTIONS] PATH | URL | -

因此,对于您来说,在翻译为compose之后,正确的方式如下: docker-compose.yaml:
version: "3"
services:
  my-image:
    build: .
    image: my-image
    ports:
      - 8080
      - 8100
  repo-image:
    build: https://github.com/user/repo.git
    image: repo-image
    ports:
      - 8000

以上将基于第三方代码构建图像。

1
谢谢您的帮助,我已经有所进展,但现在它显示“使用前端dockerfile.v0解决失败:无法读取dockerfile:无法加载缓存密钥:存储库不包含ref master,输出:“””。这是因为实际存储库还是我没有做正确的事情吗? - Inkblot
1
你的 Git 仓库似乎没有主分支?你可以参考 https://docs.docker.com/engine/reference/commandline/build/#git-repositories 查找完整用法:也许是 myrepo.git#mybranch。如果仍有问题,请展示你的 Git 仓库。 - atline
这是一个新的代码库,他们将 master 重命名为 main,但是 Docker 告诉我它找不到 master 分支,所以我会尝试在结尾加上 #main - Inkblot
3
更新,加上 #main 后它可以工作,所以我猜这就是为那些使用 main 分支而不是 master 的代码库遵循的步骤,感谢您的帮助! - Inkblot
是的,看起来微软移除了旧的编码术语,但Docker没有跟随设置默认值,很高兴知道这一点。 - atline

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接