npm 與yarn 的區別網上一大堆的文章,我們在構建docker 鏡像是應該遵守的有些原則
- 基礎鏡像盡量小
- 對於構建進行緩存處理
- 構建的docker 的文件層數盡量少
- 能直接運行的,就別進行重復構建了(比如go)
yarn 在我們進行本地構建的時候可以幫助我們減少很多資源的在重復下載,以及校驗,
加速docker 項目的構建
以下為一個簡單的例子,具體與npm的比較就不用了,效果太明顯了
備注:
此次docker nodejs 鏡像使用的是
kkarczmarczyk/node-yarn (下載次數比較高)
nodekjs 的框架使用 hapi
1. 項目初始化
yarn init
yarn add hapi
package.json add
"scripts":{
"run":"node index.js"
}
2. nodejs 簡單代碼
index.js
const Hapi = require('hapi');
// Create a server with a host and port
const server = new Hapi.Server();
server.connection({
host: '0.0.0.0',
port: 8009
});
// Add the route
server.route({
method: 'GET',
path:'/hello',
handler: function (request, reply) {
return reply('hello world');
}
});
// Start the server
server.start((err) => {
if (err) {
throw err;
}
console.log('Server running at:', server.info.uri);
});
3. docker 配置
Dockerfile
FROM kkarczmarczyk/node-yarn
RUN mkdir -p /home/nodejs/app
WORKDIR /home/nodejs/app
COPY . /home/nodejs/app
RUN yarn
CMD ["yarn","run","run"]
4. 項目結構

5. 構建&&運行
docker build -t demo .
docker run -d -p 8009:8009 demo
6. 構建效果

從上圖明顯看到每次構建都是走的cache 對於nodejs 包也是,這樣可以很快的進行鏡像的
構建,明顯如直接 npm 的快很多,建議大家在生產環境多使用,高效快速就是王道。
7. 參考資料
https://hub.docker.com/r/kkarczmarczyk/node-yarn/
https://yarnpkg.com/zh-Hans/
https://hapijs.com/