本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢!

  因为一直做Linux有关的开发工作,所以不习惯在Windows平台编译和测试代码。在没有Docker之前,windows基本就是一个IDE平台。在windows上面写好代码之后,再sftp上传到Linux平台进行编译,运行和测试。

  这样做虽然没有错,但带来的就是工作效率低下。 并且久而久之,Linux平台里面安装了各种各样的编译器和调试工具,就显得杂乱无章了。

  自从有了Docker,这些工作变得简化了。 当需要写新代码时,我先使用Docker构建一个编译环境,每次写完代码后,直接通过Docker把代码放到编译环境中编译,运行。如果需要给team中其它人演示,不用提前N天准备环境。直接运行镜像就可以进行demo。同时以后有了类似的开发任务,可以直接复用之前构建好的编译环境,节省不少精力。

  现在开始学习Nodejs了,我也决定顺着这条路走走看。 所以首先构建一个nodejs的编译,运行镜像。

  先贴出我编写的Dockerfile:

FROM ubuntu

#install the latest software and install nodejs
RUN apt-get update &&\
apt-get install apt-file -y &&\
apt-file update &&\
apt-get install nodejs -y &&\
apt-get install npm -y &&\
apt-get install gcc-snapshot -y &&\
ln -s /usr/bin/nodejs /usr/bin/node COPY . /api-mock-server WORKDIR /api-mock-server

CMD ["node","app.js"]
 

  我是基于ubuntu 15.10版本进行构建的。 在此版本中,安装nodejs之后非常奇怪,只有nodejs命令,而没有自动形成node的软连接。因此在环境初始化的最后一步手动做了node的软连接。

  下面我简单讲解一下这个Dockerfile里面的命令。具体命令,请参看之前写的博文:Dockerfile 最佳实践

  FROM最好使用官方提供的镜像。因此我选用ubuntu提供的15.10版本。而后面RUN的指令,主要有三个作用:

  apt-get update是用于更新镜像软件源的,保持安装最新软件包。而apt-get install apt-file -y  apt-file update 是用于安装apt-file的。因为在安装nodejs软件包中会用到C++编译器。而有的镜像中c++编译器版本可能与nodejs软件包不兼容。这个时候可以用apt-file来定位编译器的正确版本。apt-file不是必须要安装的,属于有备无患那一类的。

  apt-get install nodejs -y 和 apt-get install npm -y就是正式安装nodejs和npm工具的。 最后的apt-get install gcc-snapshot,是安装libstdc++.6.20. 因为在ubuntu15.10中使用的c++编译器版本有些低,提前安装好高版本的c++编译器,会省去不少工作。

  而为什么需要把这些命令都写到一个RUN指令中,这是为了控制Docker文件层和尽量复用缓存中的镜像。具体原因请看Dockerfile最佳实践中的相关介绍。

  而COPY指令,就是把目前nodejs中的代码拷贝到镜像中。通过WORKDIR设定好当前工作目录,然后通过设定的CMD指令,就可以在容器启动时,直接执行nodejs应用了。

  而这个Dockerfile需要在哪里执行呢? 这个Dockerfile需要放到nodejs工程根目录,然后在根目录里面执行docker build -t <设定的镜像名称> . 这样docker就会自动解析并且执行Dockerfile中的指令了。 本来我是有一篇介绍Dockerfile使用的详细文章,但受限于一些限制条件。目前还不能发布到网上,等时机成熟后,我就发布到网上,以便大家使用。

  关于Dockerfile的使用,如果有问题可以留言,我会一一回答的。

  OK,第三课到此结束。下课!起立~

Nodejs课堂笔记-第三课 构建一个nodejs的Docker镜像的更多相关文章

  1. Nodejs课堂笔记-第四课 Dynamodb为何物

    本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 我喜欢带着目标来学习新知识.因此学习nodejs过程中,不喜欢只看枯燥的语法 ...

  2. 第三周——构建一个简单的Linux系统MenuOS

    [洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 第三周  构建一个 ...

  3. [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设

    [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...

  4. Solon 开发,三、构建一个Bean的三种方式

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  5. 基于空镜像scratch创建一个新的Docker镜像

    我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像.优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包. 比如我机器上docke ...

  6. 在sun jdk 8镜像基础上构建maven 3的docker镜像

    2019独角兽企业重金招聘Python工程师标准>>> 在https://my.oschina.net/ytqvip/blog/1595054文章的sun jdk 8镜像基础上构建m ...

  7. Nodejs课堂笔记—第一课:修改Webstorm的默认主题

    最近小半年一直在忙于研究Docker源码,也在写相关的分析文章.但受限于某些条件不能发布到网上,甚为郁闷.而最近几天,接到新的开发任务,需要使用nodejs.之前一直听说过nodejs,但从来没有真正 ...

  8. Nodejs课堂笔记-第二课 package.json的作用

    本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 上节课,我们打造了一下IDE工具-web storm的显示界面.至少现在回到 ...

  9. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

随机推荐

  1. Java 实例

    Java 实例 本章节我们将为大家介绍 Java 常用的实例,通过实例学习我们可以更快的掌握 Java 的应用. Java 环境设置实例 Java 实例 – 如何编译一个Java 文件? Java 实 ...

  2. UVA 617 - Nonstop Travel(数论+暴力枚举)

    题目链接:617 - Nonstop Travel 题意:给定一些红绿灯.如今速度能在30-60km/h之内,求多少个速度满足一路不遇到红灯. 思路:暴力每个速度,去推断可不能够,最后注意下输出格式就 ...

  3. 【Excle数据透视表】如何为数据透视表应用样式

    如下数据透视表样例,如何为该数据透视表设置样式呢? 步骤 单击数据透视表区域的任意单元格→数据透视表工具→设计→数据透视表样式→打开下拉箭头即可任意选择

  4. JavaScript 取数组最值的方法

    1.用Math的max,min函数 var array = [10,2,3,4,5,6,30,8,9]; Math.max.apply(null,array); Math.min.apply(null ...

  5. 尖峰冲击测试(spike Testing)

    与可靠性测试类似,尖峰冲击测试这种方法也是从其他行业借鉴而来.在电力工业,有一种冲击测试,用来验证设备在刚刚接通电源时能否经受住涌流的破坏.所谓涌流,通俗地说,就是电源接通瞬间,电流突然变大的现象.涌 ...

  6. Andrew Ng机器学习笔记+Weka相关算法实现(五)SVM最优间隔和核方法

    这一章主要解说Ng的机器学习中SVM的兴许内容.主要包括最优间隔分类器求解.核方法. 最优间隔分类器的求解 利用以一篇讲过的的原始对偶问题求解的思路,我们能够将相似思路运用到SVM的求解上来. 详细的 ...

  7. hiho1080 更为复杂的买卖房屋姿势

    题目链接: hihocoder1080 题解思路: 题目中对区间改动有两个操作: 0   区间全部点添加v 1   区间全部点改为v easy想到应该使用到两个懒惰标记  一个记录替换  一个记录增减 ...

  8. Weka关联规则分析

    购物篮分析: Apriori算法: 参数设置: 1.car 如果设为真,则会挖掘类关联规则而不是全局关联规则. 2. classindex 类属性索引.如果设置为-1,最后的属性被当做类属性. 3. ...

  9. vmware workstation(mac版)查看vmnet8的网关地址

    想为虚拟机配置固定ip,需要设置网关,但是mac版的vmware workstation没有Virtual Network Editor,所以不能直接查看到. 因此执行如下命令进行查找 find / ...

  10. Coursera machine learning 第二周 编程作业 Linear Regression

    必做: [*] warmUpExercise.m - Simple example function in Octave/MATLAB[*] plotData.m - Function to disp ...