【问题标题】:Simple docker deployment tactics简单的 docker 部署策略
【发布时间】:2015-06-17 23:26:25
【问题描述】:

大家好,过去几天我一直在深入研究 Docker,学到了很多东西。我已经到了想要部署到数字海洋水滴的地步,但我开始想知道构建/部署图像的策略。

我有一个完美的开发设置,我创建了一个与我的应用程序相关的文件卷。

docker run -d -p 80:3000 --name pug_web -v $DIR/app:/Development test_web

我不希望必须从 /Development 文件夹中运行该应用程序,而我实际上是在该文件夹中构建应用程序的。这是一个 nodejs/express 应用程序,我很想 concat/minify/etc。到本地 dist 文件夹中,然后将该构建文件夹添加到新的 dist 就绪映像中。

我想我要问的是,A)。我可以有不同的 dockerfile,一个用于 Dev,一个用于 Dist?如果不是 B)。我可以在我的 docker 文件中包含 if 语句,这些语句会执行类似... if ENV == 'dist' add /dist... 等的操作。

我正在努力弄清楚如何在没有任何条件的情况下将其从本地开发环境转移到收紧的生产就绪映像。

【问题讨论】:

  • 有人能解释一下为什么这被标记为离题吗?
  • 另外,虽然我同意有一些重叠,但在我看来并没有重复。
  • @user2915097 这个答案很相似,但绝对不一样。但是感谢您的帮助,我从该链接中学到了一些东西。

标签: bash docker dockerfile


【解决方案1】:

我两个都做。

我的 Dockerfile 从 Git 中签出应用程序的代码。在开发过程中,我使用我正在处理的代码版本在该文件夹的顶部安装了一个卷。当我准备好部署到生产环境时,我只需检查 Git 并重新构建映像。

我还有一个从 ENTRYPOINT 命令执行的脚本。该脚本查看环境变量“ENV”,如果设置为“DEV”,它将启动我的开发服务器并打开调试,否则将启动服务器的生产版本。

【讨论】:

  • 谢谢,这是公共图像还是您可以分享您的 dockerfile?另外,您如何检查 dockerfile 中的代码?你会安装 git 并在容器中获取它吗?最后,如何设置 ENV?
  • 我用 git 检查代码,是的。 docker run -e ENV=DEV ... 将设置变量以启动开发服务器。它实际上是我正在写的书的一部分,如果你想看的话:shop.oreilly.com/product/0636920035671.do(为插件向其他所有人道歉)
  • 不,非常感谢。我的最后一个问题是,您是否使用其中的代码构建生产就绪图像?所以,如果 git 包含你所有的开发代码,你是否创建了一个 grunt/gulp 任务等来准备你的所有代码进行生产,将它放在一个文件夹中,将它添加到图像中并构建?还是您将代码拉入容器并在那里构建您的生产代码?
  • 说实话,这只是书中的一些python代码,所以没有任何“准备生产”。但是,是的,如果这是问题的话,我会使用 Docker 来构建我的代码。有些人有单独的 Dockerfile 来构建和运行他们的代码。
【解决方案2】:

或者,您可以避免在开发中使用 Docker,而是在您的存储库的根目录下使用 Dockerfile。然后你可以使用你的 CI 服务器(在我们的例子中是 Jenkins,但 Dockerhub 也允许 automated build repositories 可以为你做这件事,如果你是一个小团队或无权访问专用的构建服务器。

然后你可以直接拉取图像并在你的生产机器上运行它。

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2012-06-25
    • 2021-06-19
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多