在docker build期间在主机上执行命令
是否有可能创buildDockerfile
在图像生成时执行主机上的命令?
现在我在做:
./script_that_creates_magic_file.sh docker build .
与Dockerfile:
FROM alpine COPY magic_file
我想能够做到:
docker build .
与Dockerfile:
FROM alpine # invoke script_that_creates_magic_file.sh on the host COPY magic_file
当然,这个脚本和Dockerfile在同一个目录下。
(只是一个build议)
我们通常有以下结构来build立我们的docker图像:
my-image/ ├── assets │ ├── entrypoint.sh │ └── install.sh ├── build.sh ├── Dockerfile ├── README.md └── VERSION
- build.sh :这是你应该调用
script_that_creates_magic_file.sh
。 其他常见任务包括下载所需文件或临时从主机复制ssh密钥。 最后,这个脚本会调用docker build .
- Dockerfile :像往常一样,但取决于我们需要运行的命令的数量,我们可能会有一个
install.sh
- install.sh :在容器中复制并运行,安装软件包,删除不必要的文件等。没有百分之一百的确定 – 我认为这样的方法减less了在单个
RUN
避免多个命令的层数 - entrypoint.sh :容器的入口点。 允许我们在容器启动(如parsing环境variables)和打印debugging信息时执行任务
我发现上面的结构方便和自我logging,因为团队中的每个人都可以build立任何形象(没有特别的指示/步骤)。 README在那里解释图像在做什么…但是我不会骗你…它通常是空的…(或者有一个用于显示gitlab的h1
):)
回答这个问题; 没有没有内置的function来在docker build
之前在主机上运行一个命令(即没有“钩子”来触发主机上的脚本)。
如果您提供了有关您的用例的更多信息,可能还有其他select(例如,使用--build-arg
和docker撰写的组合)
尝试docker build . & ./script
docker build . & ./script
. docker build . & ./script
。