#showdev使用Docker进行前端开发已简化

Docker是一款出色的工具,可帮助开发人员更高效地构建,部署和运行应用程序。对于前端应用程序,我们只需要Docker映像进行本地开发,因为我们将其部署到静态托管提供程序。在这种情况下,我们可以没有自定义Docker镜像吗?我们可以拥有和没有Docker一样的开发经验吗?是的,它比您想的要容易。

要求

假设一个应用程序,我们只需要按启动键,一切就可以运行了。该设置可以是React,Vue,Angular CLI生成的任何应用程序。出于演示目的,我将使用Vue Todo应用程序。

在开发过程中,我们将执行以下步骤:

  • 安装依赖 npm install
  • 使用启动应用程序 npm start
  • 修改文件并在浏览器中检查更改
  • 在编辑器中使用模块的代码完成
  • 向添加新的依赖项 package.json 并安装

自定义Docker文件

如果在Web上搜索使用Docker进行的前端开发,则可以使用自定义Docker映像找到许多文章。让我们来看看它是如何工作的。

Docker文件从定义我们将基于的基础映像(Node.js 12.x)开始(FROM)并将工作目录设置为 /app 文件夹(WORKDIR)。每个命令都以 RUN 要么 CMD 将具有此文件夹作为默认工作目录。

下一步是复制源文件(COPY)并安装依赖项。我们复制 package.json 与其余文件分开。为什么?因为Docker在多次构建映像时会缓存Dockerfile的每个步骤。如果不进行任何修改并重新构建映像,则由于缓存了步骤,因此它将不执行任何操作。如果我们更改Javascript文件,则Docker将从以下位置运行命令: COPY . /app。当我们修改 package.json 文件,Docker将从以下位置重新运行命令: COPY package.json /app

默认情况下,主机上不提供在特定端口上的容器内部运行的应用程序。我们必须使端口可用(EXPOSE)。只有在此之后,我们才能在浏览器中键入URL(http:// localhost:8900)并查看结果。

要运行此映像,我们必须对其进行构建并运行创建的容器。

# Build the image: docker build -t  
docker build -t client .
# Run the image: docker container run   
docker container run client

缺点

上面的Docker映像有效,但是有多个缺点:

  • 在主机内部看不到容器内部生成的文件,只能在容器内部看到。这意味着我们不会看到 node_modules 文件夹,因此,我们在编辑器中将丢失代码完成。我们无法提交生成的 package.lock.json 源控制,因为它在主机上也不可用。

  • 我们必须根据依赖项和文件更改停止,构建并重新运行容器。我们失去了实时重新加载的能力。

认识Docker Compose

Docker可以构建单个映像并运行构建的容器。 Docker Compose进一步走了一步,因为它可以同时构建和运行多个映像。在本教程中,我们将不会使用大量的构建功能。我们将仅使用它来克服前面示例的缺点。

虽然我们可以使用以前的 Dockerfile 为了与Docker Compose一起运行,我们将以某种方式使用它来跳过自定义映像的编写。

Docker Compose并未使用命令序列定义映像,而是使用YAML配置文件格式。在下面 services 键,Vue应用程序的图像被命名为 client。这等效于 docker build -t 命令。此处的描述以相同的方式开始:定义基础图像(image)并设置工作目录(working_dir)。

关键区别在于 volumes 属性。通过使用它,本地文件夹将与容器同步。如果我们执行 npm install 容器中的命令 node_modules 文件夹也将出现在主机上:我们得到代码完成和锁定文件。

该应用程序也从容器中启动(command: sh -c "npm install && npm start"),则必须将端口公开给主机才能访问浏览器(ports)。

要运行此设置,我们必须对其进行构建并运行所构建的容器。

# Build the image and start the container
docker-compose up

如果您查看两种解决方案,它们几乎是相同的。命令行中的命令之间存在很大的相关性 Dockerfile 以及 docker-compose.yml 配置文件。唯一的区别是它们如何处理装入的文件,这就是解决我们的同步问题的原因。

摘要

在进行本地开发时,重要的是要有一个快速的反馈循环和代码完成。如果我们使用纯粹的Docker解决方案,我们将失去两者。我们必须寻求Docker老兄Docker Compose的帮助,以帮助我们进行文件夹同步。通过将我们的设置迁移到Docker Compose,我们获得了速度和代码完成率。我希望这个技巧可以帮助您,并节省大量开发时间。

特别感谢iben帮助我进行设置。

资讯来源:由0x资讯编译自DEV,原文:https://dev.to/blacksonic/frontend-development-with-docker-simplified-254i ,版权归作者所有,未经许可,不得转载
你可能还喜欢