【问题标题】:Is docker best just for prod environments?docker 最适合生产环境吗?
【发布时间】:2020-10-16 19:44:08
【问题描述】:

我刚刚决定开始使用 docker 来测试使用 AWS Fargate 构建微服务应用程序。

我的问题确实与听到许多开发团队使用 Docker 来避免人们在提交代码时说“在我的机器上工作”这句话有关。虽然我看到了该问题的解决方案,但我仍然看不到 Docker 映像实际上可以如何在开发环境中使用。

任何高于生产的工作流程都让我感到困惑。我的想法的例子是......

由 10 名开发人员组成的团队都使用 docker,每个人都将图像从 repo 拉到容器中,并带有源代码,如果他们都有单独的图像版本,这意味着他们所做的任何编辑该图像是他们自己的,当他们推回无法合并任何编辑的存储库时(以及编辑图像源代码也不容易完成)。

我把它想象成 git -GitHub,代码被推送到一个分支,然后合并到 master 以创建一个成品。

我想如果你从 GitHub 主服务器中提取代码并创建 Docker 映像是使用它的方式,但这又回到了我最初的假设,即 Docker 被用于生产环境而不是开发。

Docker 是否用于开发,更多的是让开发人员可以测试团队中其他开发人员正在使用的容器上的功能,以便团队中的所有环境都匹配?

我只是真的不明白使用 docker 开发环境的工作流程。

【问题讨论】:

  • vs-code 开发容器在解决“在我的机器上工作”问题方面做得很好code.visualstudio.com/docs/remote/containers-tutorial - 尽管让一些开发人员停止使用 notepad++ 并通过单击按钮进行完全本地安装比听起来
  • @LawrenceCherone notepad++ 将是一个进步,我与之合作的一些团队似乎 vim 是标准。

标签: amazon-web-services docker dockerfile microservices aws-fargate


【解决方案1】:

我要强调三个我发现 Docker 在生产部署之前特别有用的情况:

  1. Docker 对于安装 本地依赖项 非常有用。如果您的应用程序需要数据库,docker run postgresql 带有适当的选项。需要一个干净的开始?删除容器。运行两个需要单独数据库的微服务?启动两个容器。第二个微服务由另一个团队维护?也可以在容器中运行它。

  2. Docker 可用于在 CI 系统中捕获构建环境。例如,Jenkins 可以在容器内运行构建步骤,将当前工作树绑定挂载到其中,因此构建仅包含构建时依赖项的映像非常有用(可以独立于 CI 系统本身进行更新)。

  3. 如果您在生产环境中运行 Docker,则可以测试您将要运行的确切内容。您可以保证安装环境在 QA 和 prod 环境中是相同的,因为它封装在同一个 Docker 映像中。开发人员可以针对生产安装的代码调试问题,而无需实际投入生产。

在您描述的基本场景中,需要注意的一个重要细节是您从不“编辑图像”;你总是 docker build 来自其 Dockerfile 和其他源代码的新图像。在编译语言(C++、Go、Java、Rust、Haskell)中,源代码不会出现在镜像中。即使您“在开发中使用 Docker”,实际的源代码也将位于其他系统(通常是 Git)中,并且通常您将拥有一个 CI 系统,该系统会从该源代码构建“官方”映像。

我看到 Docker 建议用于日常开发,要么是因为使用的语言生态系统难以同时安装多个版本,要么是为了避免在主机系统上安装软件。您需要特定的工具支持才能“在容器内开发”,如果开发人员选择自己的 IDE,这种支持并不普遍。相反,在操作系统包管理器(APT、Homebrew)和解释器版本管理器(rbenv、nvm)之间,通常很容易在主机上安装一些东西。如果您的应用程序对特定版本的 Node 不那么敏感,那么使用主机上已安装的任何版本可能比尝试将 Docker 插入进程更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    相关资源
    最近更新 更多