问题描述
在 Docker Compose 中,可以使用 docker-compose build <service> 可以构建单独的镜像。
但是,在实际的应用过程中,还会遇到其他的更复杂的需求,导致我们需要从 docker-compose.yaml 提取构建命令。
该笔记将记录:在 Docker Compose 中,如何使用 docker-compose.yml 生成构建命令。
解决方案
第一步、安装依赖
安装 yq 命令:
apt-get install -y jq pip3 install yq
因为 yq 是对 jq 命令的封装(还有一个 yq 是 Golang 版本),因此需要 jq 命令。
第二步、执行命令
如下命令,可以用于生成 docker build 命令:
docker-compose -f docker-compose-with-build.yml config \ | yq -r '.services | .[] | select(.build != null) | "docker build -f " + .build.context + "/" + .build.dockerfile + " -t " + .image + " " + .build.context'
如下命令,可以用于执行命令(去掉 echo 命令):
docker-compose -f docker-compose-with-build.yml config \ | yq -r '.services | .[] | select(.build != null) | [.build.dockerfile, .image, .build.context] | @tsv' \ | while IFS=$'\t' read -r dockerfile image context do echo docker build -f "${context}/${dockerfile}" -t "${image}" "${context}" done
相关文章
「Docker Compose」- 开机自动启动应用容器
「Docker Compose」- 配置 Bash 补全(Bash Completion)
「Docker Compose」- 在构建时,使用网络加速(代理)
「Docker Compose」- 向远程主机部署服务
「Docker Compose」- docker-compose.yaml(学习笔记)