Docker 笔记 打造 node.js 开发环境 安装 nvm

通过制作一个 Docker 镜像,统一管理开发环境,使不同开发者可以在任何平台下开发,同时拥有相同的开发环境配置。

文章所用的示例代码发布在 Github 上了, 点击此处查看

创建 Dockerfile 文件

  • 每条 RUN 命令即是一层(Layer),Docker 会将其缓存,对提高存储加快 build 速度很有用。
  • 每次 RUN 命令,都被分配了一个单独的进程环境执行,因此一些环境变量等是不同的。
  • CMD 命令相当于 docker run 中执行的命令,

构建出 image

构建成功后,会看到出现了一个 ijse/nvm 的镜像。

注意,build 的时候到如下一步时:

不要动,这时候正在下载安装 Node.js,可能会花费比较长时间,如果等得不耐烦,可以另开一个终端,用 docker ps 查到容器 Id, 然后 docker attach < 容器 Id> 来查看进度。

试着跑一下~

镜像构建成功后,就应该出现在 docker images 列表中了,用如下命令试着运行一下容器内的终端:

接着便进入了 node 的交互命令行下,可以执行 process.version 查看容器中 node.js 的版本。

把代码装载

由于代码会经常更新,将它们打包进镜像中不太合适,一般通过目录挂载的方式,将代码目录放在宿主机上,这样可以分开管理。

启动的时候添加 -v 参数挂载代码目录:

运行后即进入容器的 bash 下,此时可以继续执行开发相关的命令了,如 npm install && npm start

-p 3000:80 参数,将容器的 80 端口绑定到宿主机的 3000 端口上,于是我们可以访问 http://localhost:3000 来访问容器的 80 端口服务了。

注意:

  • 如果是在 Windows 或 Mac 系统下,由于 Docker 是运行在虚拟机里的,所以访问时 localhost 要换为虚拟机的 ip 地址。
  • npm install 的时候,由于挂载机制,在 Windows 下可能需要添加 --no-bin-links 参数

全部代码

示例的代码放到了 Github 上: http://github.com/ijse/nodejs-docker-image

后记

这个示例很简单,而通常情况下我们的项目会更复杂些,不仅环境会有很多配置修改,还会需要其它服务,如 MongoDB, Redis,甚至其它一些 Web Services 等。我们可以把这些服务都打包进一个镜像中,也可以分开。使用差不多的方式编写相应的 Dockerfile,并配置环境即可。

于是便可以看出 Docker 的方便之处:

  1. 直接分发 Dockerfile 即可,其它开发者可以自己构建出镜像,并且与大家开发环境一致
  2. 跨平台开发的方便,无论宿主机是什么平台,Docker 都可以保证代码运行的环境与线上环境一致
  3. 维护方便,只需要维护 Dockerfile 即可随时管理更新开发环境

Docker 上手很快,一般使用的话,运行几条命令即可满足需求。简直是程序开发的福音。

发表评论