【问题标题】:Clean OS with Docker workflow使用 Docker 工作流程清洁操作系统
【发布时间】:2018-11-03 21:15:07
【问题描述】:

所以我已经阅读了有关 Docker 的内容,并且我已经了解了其中的大部分内容。尽管如此,我有一个问题:如果您可以创建绑定安装并在容器内进行开发,为什么大多数教程仍然在其本地环境中开发整个应用程序并安装 Node、Python 或 Ruby 等工具?我是否误解了什么或者这种方法是错误的?下面是我用来开发测试应用的一些简单的 dockerfile:

FROM node
WORKDIR /home/app
VOLUME . .

然后我会从这里进入容器的终端,运行 npm init 并开始开发我的应用程序。

现在,我的目标是让我的机器尽可能干净,而无需安装 Java、Node、Ruby 等。哪种方法最好?还有这种方法在 Windows 机器上是如何工作的?我目前正在使用 Ubuntu。

我不想对应用程序进行 dockerize。我想通过组合容器来构建整个应用程序。例如,我想要一个干净的 manjaro 安装,然后安装 docker,接下来获取一个 spacevim 映像,然后在 java 中启动一个新应用程序,例如在某个本地目录中能够将我的本地目录与 java 容器链接,以便它可以运行编译器。然后,如果我想,在节点中启动一个新应用程序,然后做同样的事情。在所有情况下,我都将使用包含源代码的本地目录,使用我的 vim 容器编辑并从语言容器运行。那可能吗?所以我不必安装 nvm 或 nodenv 或任何版本管理器等。

我可以手动运行这段代码,例如:

docker container run --rm -it -v /home/alex/Documents/REPOs/testing:/home/app -p 3000:3000 --name node node:latest bash

它让我在 /home/app/ 目录中作为 2 路绑定工作,但我如何通过 dockerfile 或 docker-compose 文件实现相同的操作,以便我可以共享我的配置并停止使用每种语言的版本管理器.

【问题讨论】:

  • 请将您的问题重命名为更具体;这对其他人的搜索没有帮助,并且可能会吸引反对票
  • 您是否尝试过在虚拟机上的全新操作系统中使用 Docker?

标签: docker development-environment


【解决方案1】:

假设我正在开发一个 Node 应用程序。我需要一种语言运行时,但是按照 Node 生态系统的工作方式,包的所有构建时和编译时依赖项都在 package.json 文件中声明,并在 node_modules 目录中隔离。这样做实际上并没有任何开销。我需要一个apt-get installbrew install 命令,我准备好了。

完成此操作后,我就有了一整套可用的工具,这些工具非常好用如果我在本地工作。我的编辑器可以与静态类型检查器对话并为我突出显示错误,但前提是 node_modules 目录位于我的本地环境中。我的编辑器可以运行我的测试套件并跳转到故障,但前提是语言运行时是本地的。如果我的代码在远程系统或容器中运行,我的编辑器可以访问我的代码,但我无法使用这些额外的工具套件。

反过来,使用 Docker 也有很多复杂性。您仍然需要安装一些东西(Docker 本身)才能使用 Docker。运行任何 Docker 命令都涉及与 root 等效的权限,因此要么您经常使用sudo,要么您相信没有什么会“意外地”docker run -v /:/host ... 并在您身下乱扔垃圾。您需要将代码放入容器中。您需要告诉容器让您可以访问服务器的端口。您通常需要删除容器以更改设置。存在反复出现的权限映射问题,如果文件 I/O 是程序的主要部分,那么您也需要将这些文件放入和取出。而且 Docker 很复杂,就像每件复杂的事情一样,它偶尔也会彻底失败。

我认为 Docker 很棒——作为一个部署系统。如果您有一个打包良好且自包含的 Python、Ruby、JavaScript 或 Go 程序,围绕它构建一个容器并将其作为预打包的解决方案运行或将其部署到 Kubernetes 集群非常容易。我见过的支持 Docker 进行开发的两个主要论点是每个项目的文件系统隔离(在没有 Docker 的情况下,您可以通过node_modules、Python 虚拟环境、Ruby rvm gemsets、$GOPATH...)和想要确切的版本语言运行时(以我的经验来说没什么大不了的)。管理 Docker 环境的麻烦和“远程”开发的困难...只是为了避免在主机上安装语言运行时。

【讨论】:

    【解决方案2】:

    可以在 docker 中进行开发,并且有很多教程可以做到这一点。

    Examples 1,2

    Docker 示例应用比比皆是...您可以在 Google 上搜索 docker example app 和您的框架名称。

    在 windows 机器上,这取决于您的版本,因为在 windows 10 上,您需要专业版操作系统来运行 docker。我是一个 Windows 用户,并且注意到一些特定于 Windows 版本的怪癖弹出,据我所知,k8 在 Windows 上是不可行的。

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 1970-01-01
      • 2016-01-01
      • 2017-08-30
      • 1970-01-01
      • 2018-07-11
      • 2018-03-31
      • 1970-01-01
      • 2015-12-03
      相关资源
      最近更新 更多