以前一直觉得docker是运维用的工具,或者devops 用的工具,一般人应该用不上,直到最近发现docker 还有另外一个妙用,不管是什么语言。
会网络不好的时候,nodejs npm 仓库 、ruby gem仓库、python的 PyPI 、java 的Maven 等都不是很稳定,容易挂,
还有就是长时间没有更改构建过程的 项目再次初始化时候不是找不见依赖包,就是从github 下载资源失败等等都导致项目初始化失败,
特别是封闭式开发(断网)或者驻厂开发(特殊环境只能上内网)都无法从这些源下载依赖包
用docker 可以很好的解决这个问题
以nodejs为例 ,这是我一个项目中的 Dockerfile 文件
#设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像 FROM node:8.5.0 #创建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 8080 #运行命令 #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 1 : FROM node:8.5.0 ---> de1099630c13 Step 2 : RUN mkdir -p /usr/src/node ---> Using cache ---> 5d5f5bc2b37c Step 3 : WORKDIR /usr/src/node ---> Using cache ---> 6dd09a7a7e9e Step 4 : COPY . /usr/src/node ---> a57935049527 Removing intermediate container 8a0d964fe8e9 Step 5 : ENV NODE_ENV development ---> Running in 8e5098063d3a ---> 4fb90a8eed24 Removing intermediate container 8e5098063d3a Step 6 : WORKDIR /usr/src/node/ ---> Running in b07d42075879 ---> 108f84cfeeae Removing intermediate container b07d42075879 Step 7 : RUN npm install ---> Running in 69b936a8763f npm info it worked if it ends with ok npm info using npm@5.3.0 npm info using node@v8.5.0 npm info lifecycle OpenShift-Sample-App@1.0.0~preinstall: OpenShift-Sample-App@1.0.0 npm http fetch GET 200 https://registry.npmjs.org/js-base64 876ms npm http fetch GET 200 https://registry.npmjs.org/express 911ms npm http fetch GET 200 https://registry.npmjs.org/async 140ms npm http fetch GET 200 https://registry.npmjs.org/request 160ms
可以看到执行npm install 后开始安装npm依赖包,最后看下镜像大小
REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 108f84cfeeae 4 minutes ago 679.8 MB my-spider latest 2cf0919aa431 5 days ago 758.1 MB my-web latest 2cf0919aa431 5 days ago 758.1 MB
生成的镜像大约500m,生成的这些镜像都包含了依赖包,在其他机器上使用这些包时候都不用在下载这些依赖
test