我有一些预计会一起运行的容器。我是否需要为每个创建一个小的github存储库(看起来很浪费和不方便),或者我可以使用相同的github存储库作为自动构建多个容器的源吗?
答案 0 :(得分:3)
如果希望容器一起运行,则使用docker compose构建并运行它们。然后,可以将与每个容器关联的Docker文件保存在子目录中。
├── docker-compose.yml
├── one
│ └── Dockerfile
└── two
└── Dockerfile
web1:
build: one
ports:
- 8080
web2:
build: two
ports:
- 8080
答案 1 :(得分:1)
根据我的评论,我需要设置“多个容器的自动构建”。与原始海报不同,我的用例涉及不需要一起使用的容器,而是意味着彼此独立使用。
我解决的解决方案是为项目中的每个容器设置子目录,然后在Dockerhub上设置自动构建,以使用不同的标记跟踪每个子目录的Dockerfile。所以,我的git repo(托管在GitHub上)包含这样的内容:
$ tree containers/
containers/
|-- Makefile
|-- R-3.2.3
| |-- Dockerfile
| `-- install.R
|-- README.md
|-- base
| `-- Dockerfile
|-- bedtools-2.26.0
| `-- Dockerfile
|-- bwa-0.7.17
| `-- Dockerfile
我的Dockerhub帐户跟踪整个仓库并构建容器,例如
username/project:R-3.2.3
username/project:bedtools-2.26.0
username/project:bwa-0.7.17
注意事项:
在仓库的master
分支上跟踪所有容器,因此对该分支的任何更改都会触发所有容器的重建
容器是以随机顺序构建的,所以如果你有一个容器层次结构(例如带有中间层的自定义基础层),那么很有可能变化不会成功地传播到整个图像链中并且需要从Dockerhub网站触发手动重建。
另外值得注意的是,Dockerhub的构建速度极慢,因此如果您需要快速推出更改,这可能不是一种可行的方法。
答案 2 :(得分:0)
您可以使用相同的repo和不同的分支,以隔离每个容器的提交历史记录。
每个都可以由Dockerfile组成,也可能是Dockerfile需要复制或添加到构建映像的其他资源。
从Git 2.5开始,您可以克隆该repo并在不同的文件夹中签出其分支。请参阅“Multiple working directories with Git?”。