Nodejs課堂筆記-第三課 構建一個nodejs的Docker鏡像


  本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原創,轉載請標明.謝謝!

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM