因此,我已经阅读了有关Docker的文章,并且我了解了大部分内容。但是,我有一个问题:为什么大多数教程仍在本地环境中开发整个应用程序,并安装Node,Python或Ruby之类的工具(如果您可以创建绑定安装并在容器中进行全部开发)?我是否误解了一切,或者这种方法是错误的?以下是我用来开发测试应用程序的一些简单dockerfile:
FROM node
WORKDIR /home/app
VOLUME . .
然后从这里进入容器的终端,运行npm init
并开始开发我的应用程序。
现在,我的目标是使我的计算机尽可能干净,而不必安装Java,Node,Ruby等。哪种方法是最好的?以及这种方法在Windows计算机中如何工作?我目前正在使用Ubuntu。
我不想对应用程序进行docker化。我想通过组成容器来构建整个应用程序。例如,我想进行一个干净的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文件实现相同的目的,以便我可以共享我的配置并停止使用每种语言的版本管理器。
答案 0 :(得分:3)
假设我正在开发Node应用程序。我需要一种语言运行时,但是然后在package.json
文件中声明并在node_modules
目录中隔离所有节点的构建时和编译时依赖关系,即Node生态系统的工作方式。这样做实际上并没有任何开销。我需要一个apt-get install
或brew install
命令,我已经准备好了。
完成此操作后,我就会提供一整套工具,如果我在本地工作,那么它们会很好地工作。我的编辑器可以与静态类型检查器对话,并为我突出显示错误,但前提是node_modules
目录位于我的本地环境中。我的编辑器可以运行我的测试套件并跳至失败,但前提是语言运行时是本地的。如果我的代码运行在远程系统或容器中,则我的编辑器可以访问我的代码,但是我无法使用此额外工具套件。
反过来,使用Docker有很多复杂性。您仍然必须安装某些东西(Docker本身)才能使用Docker。运行任何Docker命令都涉及与root用户等效的特权,因此,要么您经常使用sudo
,要么就相信没有任何东西会“偶然地” docker run -v /:/host ...
并在您的下面乱搞。您需要将代码放入容器中。您需要告诉容器使您的服务器端口可访问。您通常需要删除容器以更改设置。存在反复出现的权限映射问题,如果文件I / O是程序的主要组成部分,则也需要将文件移入和移出。 Docker很复杂,就像每一个复杂的东西一样,它有时甚至会彻底失败。
我认为Docker非常出色–作为部署系统。如果您具有包装良好且自包含的Python,Ruby,JavaScript或Go程序,则很容易围绕它构建一个容器,并将其作为预包装的解决方案运行,或将其部署到Kubernetes集群。我已经看到支持Docker进行开发的两个主要论点是每个项目的文件系统隔离(通过node_modules
,无需Docker就可以实现隔离,Python虚拟环境,Ruby rvm gemsets,$GOPATH
,...)并想要语言运行时的确切版本(以我的经验来说没什么大不了的)。管理Docker环境的麻烦以及“远程”进行开发的困难远远超过了它……只是为了避免在主机上安装语言运行库。
答案 1 :(得分:1)
您可以在docker中进行开发,并且那里有很多教程。
Docker示例应用程序比比皆是...您可以使用Google docker example app
和您的框架名称。
在Windows计算机中,这取决于您的版本,因为在Windows 10上,您需要专业版操作系统才能运行docker。我是Windows用户,并且注意到一些特定于Windows版本的古怪弹出窗口,据我所知,k8在Windows上不可行。