Nodejs课堂笔记-第三课 构建一个nodejs的Docker镜像

  因为一直做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,第三课到此结束。下课!起立~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏finleyMa

docker学习系列4 简单总结 docker-curriculum

来源:https://docker-curriculum.com/ 这篇文章不错,可以作为第一篇 docker 的入门,我简单总结了下。顺便重温下之前的内容。...

15630
来自专栏编程

Pentestbox更新MSF问题

{介绍} PentestBox是一款Windows平台下预配置的便携式开源渗透测试环境,其中更新MSF,是一个比较头痛的问题,这里就大概讲下是如何爬过这个坑的。...

2.3K90

Docker – 清理磁盘占用

最近,我们开始对一些应用进行 docker 化,不得不说,我已经爱上 Docker 了!这是一个非常棒的工程,在 AWS EC2 上,它让我们的生活变得更加轻松...

52190
来自专栏搜云库

Ubuntu 17.04 x64 安装 Docker CE

Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!使用 Docker,可以让应用的部署、测...

368100
来自专栏北京马哥教育

Docker容器构建过程的安全性分析

DevOps概念的流行跟近些年微服务架构的兴起有很大关系,DevOps是Dev(Development)和Ops(Operations)的结合,Dev负责开发,...

9600
来自专栏星流全栈

DaoCloud的Docker Mirror服务更新啦!

19530
来自专栏点滴积累

Docker网络——单host网络

前言 前面总结了Docker基础以及Docker存储相关知识,今天来总结一下Docker单主机网络的相关知识。毋庸置疑,网络绝对是任何系统的核心,他在Docke...

39550
来自专栏accesshub

IDC和企业分支机构组网配置

      在管理控制台的部署容器页面,点击复制用户接入容器运行命令,在服务器上粘贴执行

34730
来自专栏云计算教程系列

现代化Kubernetes的应用程序

现代无状态应用程序的构建和设计可在Docker等软件容器中运行,并由Kubernetes等容器集群管理。它们使用Cloud Native和Twelve Fact...

16800
来自专栏不止是前端

Docker:Windows下部署MySQL

408130

扫码关注云+社区

领取腾讯云代金券