之前一直以爲docker是運維用的工具,或者devops 用的工具,通常人應該用不上,直到最近發現docker 還有另一個妙用,無論是什麼語言。java
會網絡很差的時候,nodejs npm 倉庫 、ruby gem倉庫、python的 PyPI 、java 的Maven 等都不是很穩定,容易掛,node
還有就是長時間沒有更改構建過程的 項目再次初始化時候不是找不見依賴包,就是從github 下載資源失敗等等都致使項目初始化失敗,python
特別是封閉式開發(斷網)或者駐廠開發(特殊環境只能上內網)都沒法從這些源下載依賴包git
用docker 能夠很好的解決這個問題github
以nodejs爲例 ,這是我一個項目中的 Dockerfile 文件web
#設置基礎鏡像,若是本地沒有該鏡像,會從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"]
而後執行構建鏡像的命令docker
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依賴包,最後看下鏡像大小express
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,生成的這些鏡像都包含了依賴包,在其餘機器上使用這些包時候都不用在下載這些依賴npm