Cha*_*gan 7 development-environment build docker docker-compose
我正在使用docker-compose在一个"系统"中进行服务.该服务是用编译语言编写的,我需要在进行更改时重建它.我正在努力寻找快速迭代变化的最佳方法.
我尝试了2个'工作流',都依赖于通过a链接到源目录volume:来获取最新的源代码.
docker-compose up -ddocker-compose run --name SERVICE --rm SERVICE /bin/bashCMD来构建然后运行服务)docker-compose kill SERVICEdocker-compose up -d --no-deps SERVICE问题是重启时间太长而不能在本地重新启动服务(在我的笔记本电脑上独立于docker运行).对于可以热重新加载已更改文件的解释语言,此设置似乎没问题,但我还没有找到适合编译语言服务的快速系统.
我会这样做:
运行docker-compose up但是:
entrypoint类似的东西入口点.sh:
trap "pkill -f the_binary_name" SIGHUP
trap "exit" SIGTERM
while [[ 1 ]]; do
./the_binary_name;
done
Run Code Online (Sandbox Code Playgroud)
编写一个脚本来重建二进制文件,并将其复制到服务使用的卷中docker-compose.yml:
# Run a container to compile and build the binary
docker run -ti -v $SOURCE:/path -v $DEST:/target some_image build_the_binary
# copy it to the host volume directory
copy $DEST/... /volume/shared/with/running/container
# signal the container
docker kill -s SIGHUP container_name
Run Code Online (Sandbox Code Playgroud)
因此,要编译二进制文件,您可以使用此脚本,它将源目录和目标目录安装为卷。$DEST如果与“运行”容器共享的卷目录相同,您可以跳过复制步骤。最后,脚本将向正在运行的容器发出信号,使其终止旧进程(正在运行旧二进制文件)并启动新进程。
如果共享卷导致容器中的编译速度太慢,您还可以在主机上运行编译,然后仅执行复制和发信号以使其在容器中运行。
该解决方案还有一个额外的好处,即您的“运行时”映像不需要所有开发依赖项。它可能是一个非常精简的映像,只有一个裸露的操作系统基础。
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |