简单 docker 部署策略

Simple docker deployment tactics

大家好,过去几天我一直在深入研究 Docker,我学到了很多东西。我已经到了我想部署到 digitalocean 液滴的地步,但我开始怀疑 building/deploying 图像的策略。

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

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

我不想 运行 从 /Development 文件夹中 运行 生产中的应用程序,我实际上是在该文件夹中构建应用程序。这是一个 nodejs/express 应用程序,我很乐意 concat/minify/etc。进入本地 dist 文件夹,将该构建文件夹添加到新的 dist 就绪图像。

我猜我想问的是,A)。我可以有不同的 docker 文件,一个用于 Dev,一个用于 Dist 吗?如果不是 B)。我可以在我的 docker 文件中使用 if 语句来执行类似... if ENV == 'dist' add /dist... 等

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

我两个都做。

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

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

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

然后您可以直接拉取图像并将其 运行 放在您的生产箱上。