以前一直觉得docker是运维用的工具,或者devops 用的工具,一般人应该用不上,直到最近发现docker 还有另外一个妙用,不管是什么语言。

会网络不好的时候,nodejs npm 仓库 、ruby gem仓库、python的 PyPI 、java 的Maven 等都不是很稳定,容易挂,

还有就是长时间没有更改构建过程的 项目再次初始化时候不是找不见依赖包,就是从github 下载资源失败等等都导致项目初始化失败,

特别是封闭式开发(断网)或者驻厂开发(特殊环境只能上内网)都无法从这些源下载依赖包

用docker 可以很好的解决这个问题

以nodejs为例 ,这是我一个项目中的 Dockerfile 文件

#设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像
FROM node:8.5.
#创建app目录,保存我们的代码
RUN mkdir -p /usr/src/node
#设置工作目录
WORKDIR /usr/src/node #复制所有文件到 工作目录。
COPY . /usr/src/node #编译运行node项目,使用npm安装程序的所有依赖,利用taobao的npm安装
#ENV NODE_ENV production
ENV NODE_ENV development WORKDIR /usr/src/node/
RUN npm install #暴露container的端口
EXPOSE #运行命令
#CMD ["npm", "run","web"]
CMD ["npm", "run","getdata"]

然后执行构建镜像的命令

webjs@webjs-upc:~/codepalce/nodejslearn$ sudo docker build -t  my-spider .
Sending build context to Docker daemon 7.52 MB
Step : FROM node:8.5.
---> de1099630c13
Step : RUN mkdir -p /usr/src/node
---> Using cache
---> 5d5f5bc2b37c
Step : WORKDIR /usr/src/node
---> Using cache
---> 6dd09a7a7e9e
Step : COPY . /usr/src/node
---> a57935049527
Removing intermediate container 8a0d964fe8e9
Step : ENV NODE_ENV development
---> Running in 8e5098063d3a
---> 4fb90a8eed24
Removing intermediate container 8e5098063d3a
Step : WORKDIR /usr/src/node/
---> Running in b07d42075879
---> 108f84cfeeae
Removing intermediate container b07d42075879
Step : RUN npm install
---> Running in 69b936a8763f
npm info it worked if it ends with ok
npm info using npm@5.3.
npm info using node@v8.5.0
npm info lifecycle OpenShift-Sample-App@1.0.~preinstall: OpenShift-Sample-App@1.0.
npm http fetch GET https://registry.npmjs.org/js-base64 876ms
npm http fetch GET https://registry.npmjs.org/express 911ms
npm http fetch GET https://registry.npmjs.org/async 140ms
npm http fetch GET https://registry.npmjs.org/request 160ms

可以看到执行npm install 后开始安装npm依赖包,最后看下镜像大小

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none> <none> 108f84cfeeae minutes ago 679.8 MB
my-spider latest 2cf0919aa431 days ago 758.1 MB
my-web latest 2cf0919aa431 days ago 758.1 MB

生成的镜像大约500m,生成的这些镜像都包含了依赖包,在其他机器上使用这些包时候都不用在下载这些依赖

使用docker 解决一个小问题,你也可能用的到的更多相关文章

  1. linux下开发,解决cocos2d-x中编译出现的一个小问题, undefined reference to symbol &#39;pthread_create@@GLIBC_2.2.5&#39;

    解决cocos2d-x中编译出现的一个小问题 对于cocos2d-x 2.×中编译中,若头文件里引入了#include "cocos-ext.h",在进行C++编译的时候会遇到例如 ...

  2. 如何使用Docker部署一个Go Web应用程序

    熟悉Docker如何提升你在构建.测试并部署Go Web应用程序的方式,并且理解如何使用Semaphore来持续部署. 简介 大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版 ...

  3. Docker的大坑小洼(二)

    再谈<Docker的大坑小洼> 今天闲暇看了一下宏亮同学写的一篇<Docker的大坑小洼>,非常受启发.因为Docker的文章真的很多了,但大家如果只是玩一玩,有很多坑是不会碰 ...

  4. Swoft 新手向教程 - 通过 Docker 搭建一个开发环境

    本系列文章将从使用层面介绍 Swoft 框架的使用及业务开发,面向初中级的 PHPer Swoft首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈组件化框架,内置协程网络服务器及常用的 ...

  5. 如何通过Docker搭建一个swoft开发环境

    本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们. Swoft首个基于 Swoole 原生协程的新时代 PHP ...

  6. 与大家分享robotium一个小问题。Test run failed:Instrumentation run failed due to 'java.lang.ClassNotFoundException'

    今天和大家分享robotium一个小问题. 我们在运行自已经搭好的框架时,有可能会出现一个找不到类的错误(如上图所示). 问题是重签名工具给出的activity有误,这时我们可以用Appt命令查看重签 ...

  7. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  8. Python2 下 Unicode 的一个小bug

    关于Python的编码问题已经是老生常谈了,此处主要是介绍一个罕见的问题,也算是Python2的一个bug了(Python3不会有此问题). 在有时候我们去爬取网页或者调用一些第三方库获取文本的时候, ...

  9. 【开源一个小工具】一键将网页内容推送到Kindle

    最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...

随机推荐

  1. 【Alpha】——Fifth Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 测试统计功能 对统计出现的问题进一步完善 郑靖涛 着手编写报表设计 继续报表设计 杨海亮 协助编写统计功能 ...

  2. 201521123059 《Java程序设计》第七周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: XMind 2. 书面作业 Q1: ArrayList代码分析 1.1 解释ArrayList的contains ...

  3. 201521123049 《JAVA程序设计》 第7周学习总结

    1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 //contains()方法 public boolean contains ...

  4. 201521123087 《Java程序设计》第6周学习总结

    1. 本周学习总结 2. 书面作业 clone方法1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?                 ...

  5. 201521123119《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 代码阅读:Child压缩包内源代码 Q1.1 com.parent包中Child.java文件能否编译通过?哪 ...

  6. 201521123011 《Java程序设计》 第二周学习总结

    1. 本周学习总结 记录本周学习中的重点 原则:少而精,自己写.即使不超过5行也可,但请一定不要简单的复制粘贴. 知道了c语言中string的定义与java不同的地方. 学习了枚举,数组等方法 Tnt ...

  7. 201521123039 《java程序设计》第十二周学习总结

    1. 本周学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示. 字 ...

  8. openfire:openfire单独编译指定插件的方法

    方法一: openfire默认编译时,是同时编译主程序和所有在plugins目录中的插件.但进行插件开发时,这样编译就太费时费力.使用ant plugins可以只编译插件,能够节省部分时间.最节省时间 ...

  9. Hibernate第六篇【多对多映射、一对一映射】

    前言 前面已经讲解了一对多和多对一的映射是怎么配置了,也讲解了inverse和cascade属性对关联关系的影响,本博文讲解多对多的映射和一对一的映射! 多对多映射 需求:一个项目由多个员工开发,一个 ...

  10. XML预览

    功能:  实现模板文件的预览 模板实体类中有一个content字段,它的值是xml形式的,就是要预览它的内容; 实现思路:  在java后台中将这个xml内容以xml文件的形式保存到服务器上,然后将路 ...