共计 3957 个字符,预计需要花费 10 分钟才能阅读完成。
这篇文章主要介绍了 Windows 下如何用 Docker 部署 Node.js 开发环境的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇 Windows 下如何用 Docker 部署 Node.js 开发环境文章都会有所收获,下面我们一起来看看吧。
先明确一下我们希望实现的效果:
1、依然在 windows 下编辑源代码,在 docker 容器中运行代码,最后在 windows 的浏览器中看到运行结果,方便后续 debug。
2、可以将我开发完成的程序和运行环境一起打包制作成 docker 的 image,移交 image 给小伙伴运行或者直接发布到服务器上。
安装与启动
docker 引擎核心是运行在 linux 操作系统上的 linux 容器。所以要在 windows 上使用 docker 容器,先要提供 linux 运行环境。
去 docker 官网下载 msi 安装程序,若你的系统版本(例如 64bit windows 10 pro, enterprise and education)支持 hyper- v 虚拟技术,那么不需要使用额外的虚拟机(virtualbox),安装程序会自动为你安装完成 docker(docker for windows)。
若不能使用 hyper- v 虚拟技术,docker 项目组也提供了 docker toolbox 工具,可以很方便的在 windows 环境下安装 docker。
本文中的执行系统为 win7,故使用 docker toolbox。
安装过程会附带安装 oracle vm virtualbox 虚拟机,如下图:
kitematic 为 docker 的 gui 管理工具,打开 docker terminal 可以快速地启动 docker。
可以发现此时 docker 给 default machine 分配了一个 ip:192.168.99.100。我们可以直接在该终端下执行 docker 命令。
由于在 windows 中运行 docker 多加了一层虚拟机,有几个概念需要了解:
docker 主机指的是 linux 虚拟机,也就是说,此时 docker 主机(即 linux 虚拟机)的 ip 地址为 192.168.99.100。
与一般的 ssh 访问虚拟机一样,我们也可以通过该 ip 用 ssh 登录到 docker 主机去执行命令。(用户名:docker;密码:tcuser)
如要用 root 权限去执行 linux 命令(如 mount),则需要打开 virtualbox。
搭建 image
新安装好的 docker 主机中没有任何 image(docker images 查看已有的 image)。运行 node 应用需要搭建 node 环境镜像,可以从 docker hub 上 pull 轻量级的 linux 镜像作为基础镜像(如 centos), 在上面手动安装 node;也可以直接 pull 一个已安装了 node 的镜像 (docker pull 拉取镜像)。从 docker hub 下载镜像可能非常慢,可以借助国内的云服务商下载(如)。
现在假设我们 pull 了一个不包含 node 环境的 centos 镜像。
$ docker run -it centos bash
启动一个容器,并进入容器的 bash 进行交互式操作。采用与 centos 下一样的方式安装 node。安装完成后 exit 退出容器。请放心,如果不使用 docker rm 或者 docker run 时不增加 –rm 参数,即使退出容器,容器本身及其中的修改不会消失。可以用 docker ps - a 查看所有容器,docker ps 查看正在运行的容器。
$ docker commit container_id image
提交之前修改的容器到新的 image。该镜像就是已经安装了 node 环境的镜像(命名为 nodejs)。
在后续的开发中我们可以用 docker run -it nodejs bash 启动容器。
在 windows 和虚拟机之间共享文件
我们现在需要在 docker 容器中运行源代码,而 docker 容器是在 docker 主机中的,所以首先,我们需要先保证 docker 主机(即 linux 虚拟机)能访问到 windows 中的源代码文件。
打开 virtualbox,点击“设置”-“共享文件夹”,指定路径和名称后勾选“自动挂载”和“固定分配”。“自动挂载”可以使得虚拟机下次启动时自动挂载文件夹,否则每次启动都需要重新手动挂载。
如果顺利,重启虚拟机输入 mount 命令,可以看到共享文件夹挂载到了哪里,进入该目录就能看到与 windows 下同步的文件。
如果自动挂载遇到问题,取消这个选项,使用以下命令手动挂载:
mount -t vboxsf docker_share mount_point
在 docker 容器中运行 node 代码
首先在 windows 的共享文件夹下编辑测试代码 app.js:
var http = require( http
http.createserver(function (req, res) {
res.writehead(200, { content-type : text/plain
res.end( hello world\n
}).listen(1337);
console.log(server running at http://0.0.0.0:1337/
可以在 docker 主机中看到该文件。
用 nodejs 镜像启动一个容器,我们希望这个容器能访问 docker 主机中的文件作为源代码,还希望能在 windows 下访问运行后的执行端口查看结果。用以下命令启动容器:
$ docker run -v /docker_share:/app -p 1337:1337 -it nodejs bash
-v 主机目录: 容器数据卷目录 使得主机目录被挂载到容器中,可被容器访问。
-p 主机端口: 容器端口使得容器端口被映射到主机上,可以被容器外部访问到。
注:重复多个 - p 命令可以映射多个端口。
(docker 0.11 版本以上可以使用 –net=host 参数使得容器中的所有端口映射在 docker 主机上。故也可使用:)
$ docker run -v /docker_share:/app --net=host -it nodejs bash
进入容器中对应的数据卷目录,执行 node app.js
windows 下通过浏览器访问 192.168.99.100:1337 可看到结果
至此,基本的 node 应用已经能在 docker 下跑起来啦~
进一步的开发工作
1. npm install
一般在 node 工程中都会存在 node_modules 依赖需要用 npm install 安装。在 docker 下,期望运行应用的容器中,同样可以执行该命令。但注意增加 –no-bin-links 指令来避免创建软连接。
npm install --no-bin-links
2. 关联其他服务与容器互联
许多 node 应用都会关联启用 redis、mysql 等服务。直接地,我们可以像在 windows 下一样打开同一个容器的多个终端分别运行服务或执行代码。用以下命令进入一个正在运行的容器:
$ docker exec -it container bash
更优雅地,我们将不同的服务运行在不同的容器上,然后使用 –link name:alias 容器互联的方式将他们关联起来。
3. 实时响应代码变化
在开发过程中,如果每次修改代码都需要结束 node 进程然后重启必然会很麻烦。可以使用工具实现监控代码变化并自动重启进程的效果,这样一来只需要在浏览器下刷新就可以看到新的运行效果。
安装 nodemon:
npm install -g nodemon
依然以 app.js 为例,在容器中运行 app.js 时使用命令:
nodemon -l app.js
注:如果不在容器下运行,使用 nodemon app.js 即可,而在容器中,需要使用 - l 或 –legacy-watch 参数打开 chokidar 轮询,才能监听到挂载目录中文件的改变。
尝试更改 app.js 内容,保存后可以发现 nodemon 自动重启了:
刷新浏览器看到修改后的结果:
打包源码和环境为 image
在工程目录下编辑 dockerfile 和.dockerignore 文件。dockerfile:
from nodejs
# create app directory
run mkdir -p /usr/src/app
workdir /usr/src/app
# install app dependencies
copy package.json /usr/src/app/
run npm install
# bundle app source
copy . /usr/src/app
expose 8080
cmd [ npm , start ]
from 指定基础镜像,接下来列出基于基础镜像需要做的操作命令,搭建起新的 image 环境(包括复制源码和执行 npm install)可以参考。
.dockerignore:
node_modules
npm-debug.log
在 build 新镜像时忽略其中的文件。
在 docker 主机中的工程目录下(dockerfile 所在目录)使用命令:
$ docker build -t imagename . // 注意末尾的点不可省去
可得到自行 build 的镜像。该镜像会自动添加到你的 docker 主机下,你可以直接启动新镜像的容器运行代码(镜像内就包含代码,所以无需重复挂载到数据卷,不过就不能在 windows 下修改了),也可以将镜像分享给小伙伴。
关于“Windows 下如何用 Docker 部署 Node.js 开发环境”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Windows 下如何用 Docker 部署 Node.js 开发环境”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道。