Dockerfile生产/构建/调试/测试环境

时间:2016-03-01 20:48:34

标签: docker development-environment production-environment dockerfile test-environments

想象一下,您拥有自己的Web应用程序和一些工作流执行程序:

  • http-server(提供预建资产文件) - 生产
  • builder(从源代码编译/捆绑js / css / html) - 部署/开发
  • 调试器/构建器(从动态源构建,添加js源映射) - 开发
  • selenium(运行测试) - 集成测试

我们如何构建分层图像以使这些工作流执行器最有效地工作?实际上,我的意思是“跑得最快,写得最少”。

1 个答案:

答案 0 :(得分:1)

答案可能很简单:只需创建4个Dockerfile,这取决于另一个。

您可以添加卷以从源部分共享构建。问题是您是希望结果资产包含在图像中还是每次都从源构建它。

创建4个文件夹,每个文件夹中都有Dockerfile

<强>生产

production/Dockefile

FROM  # put server here
COPY  # put config here
# some other option
# volume sharing?

<强>构建

build/Dockerfile

# install dependencies
ADD # add sources here
RUN # some building script

<强>调试

debug/Dockefile

# ideally, configure production or build image

<强>测试

test/Dockefile

FROM # import production
# install test dependencies
RUN # test runner

还有几种选择。 1.将.gitignore与负模式(或ADD?)

一起使用
*
!directory-i-want-to-add
!another-directory-i-want-to-add

另外使用docker命令指定dockerfiles和context:

docker build -t my/debug-image -f docker-debug .
docker build -t my/serve-image -f docker-serve .
docker build -t my/build-image -f docker-build .
docker build -t my/test-image -f docker-test .

您还可以使用不同的gitignore文件。

  1. 装载卷 完全跳过发送上下文,只需在运行时使用安装卷(使用-v host-dir:/docker-dir)。
  2. 所以你必须:

    docker build -t my/build-image -f docker-build . # build `build` image (devtools like gulp, grunt, bundle, npm, etc)
    docker run -v output:/output my/build-image build-command # copies files to output dir
    docker build -t my/serve-image -f docker-serve . # build production from output dir
    docker run my/serve-image # production-like serving from included or mounted dir
    docker build -t my/serve-image -f docker-debug . # build debug from output dir
    docker run my/serve-image # debug-like serving (uses build-image with some watch magic)