Docker 1.x下基于docker-compose构建有依赖的多镜像问题咨询
可行!一次
docker-compose build搞定依赖镜像构建(Docker 1.x兼容) 完全可以实现你的需求——让镜像b依赖镜像a,并在一次docker-compose build命令中按顺序构建两者,同时让b的根目录包含AAA和BBB文件。下面是具体的实现步骤:
1. 确认目录结构
先把你的项目目录整理成这样(确保AAA、BBB放在a目录下,或者在a的Dockerfile能访问到的路径):
your-project/ ├── a/ │ ├── Dockerfile │ ├── AAA │ └── BBB ├── b/ │ └── Dockerfile └── docker-compose.yml
2. 编写a的Dockerfile
在a/Dockerfile里,把AAA和BBB复制到镜像的根目录,确保这两个文件被包含进a镜像中:
# a/Dockerfile # 选择适配Docker 1.x的基础镜像,比如ubuntu:16.04 FROM ubuntu:16.04 # 将当前目录下的AAA、BBB复制到镜像根目录 COPY AAA BBB / # 这里可以添加a镜像的其他构建步骤,比如安装依赖、配置环境等
3. 编写b的Dockerfile
让b直接基于a镜像构建,这样b会继承a镜像里的所有文件(包括根目录的AAA、BBB):
# b/Dockerfile # 直接引用本地构建的a镜像 FROM a:latest # 添加b镜像专属的构建步骤,比如安装额外工具、编写启动脚本等 # RUN apt-get update && apt-get install -y some-package
4. 配置docker-compose.yml
因为你用的是Docker 1.x,建议使用version: '2'的compose格式(version: '3'主要适配Docker 1.13+的Swarm模式,兼容性不如v2稳定)。在配置里声明a和b两个服务,并让b依赖a,确保构建顺序:
version: '2' services: a: build: ./a # 指定镜像名称,方便b的Dockerfile直接引用 image: a:latest b: build: ./b image: b:latest # 声明依赖a服务,docker-compose会先构建a再构建b depends_on: - a
5. 执行构建并验证
运行命令:
docker-compose build
执行完成后,用docker images就能看到a:latest和b:latest两个镜像。
验证b镜像里是否包含目标文件:
docker run --rm b:latest ls /
输出里应该能看到AAA和BBB文件。
注意事项
- 确保
a的Dockerfile正确复制了AAA和BBB,否则b镜像里也不会有这两个文件。 - Docker 1.x的镜像构建缓存机制和新版本一致,如果
a的内容没变化,后续构建会直接复用缓存,加快构建速度。
内容的提问来源于stack exchange,提问作者Jedi
相关产品推荐
相关产品推荐

