Docker撰写:检测是否需要重新构build图像
我试图创build一个Docker设置(使用docker-compose)在开发过程中testing我的一个Python应用程序。 它的docker-compose.yml启动一个Postgres服务器,一个Redis服务器和一个PhantomJS服务器,然后使用pytest运行testing。
这是我的test.sh
样子:
#!/bin/bash UP=$(docker-compose up -d redis postgres phantomjs 2>&1) echo $UP if [[ $UP == *"Starting radar_postgres"* ]]; then echo "Sleeping 10 seconds to wait for PostgreSQL server..." sleep 10 fi docker-compose build tests && \ docker-compose run \ --rm \ -e GOOGLE_OAUTH2_CLIENT_ID='$GOOGLE_OAUTH2_CLIENT_ID' \ -e GOOGLE_OAUTH2_CLIENT_SECRET='$GOOGLE_OAUTH2_CLIENT_SECRET' \ -e GOOGLE_DEVELOPER_TOKEN='$GOOGLE_DEVELOPER_TOKEN' \ tests $@
首先依赖关系开始。 由于docker-compose up
工作方式,必要时会自动重build。
然后我在tests
容器中运行一次性工作。 我使用一次性工作而不是使用docker-compose up
因为这样我可以将parameter passing给testing框架。
问题是容器总是被重build,即使Dockerfile没有改变,也不需要重build。 (当然,每个步骤都使用caching,但仍需要4-5秒。)相比之下,如果我离开docker-compose build
线,那么在更改Dockerfile时不会重build容器。
有没有办法只在必要时重build图片?
请注意,有一个讨论( 问题1455 )从docker-compose中删除构build。
撰写的主要工作是协调而不是构build,而Docker镜像是绘制该线的自然地方
所以最好使用docker build
命令(应该只在必要的时候生成镜像),而不是使用docker-compose build
(这可能会过于积极)