初識docker以及node應用的部署

tracy丶傑發表於2017-12-08

環境:centos7

##docker的安裝以及一些設定

  • 安裝docker yum install docker

  • 啟動docker服務 systemctl start docker.service

  • 設定開機啟動 systemctl enable docker.service

pull下nodejs映象,說是docker hub 慢,就找到了一個國內的映象去下載

docker pull hub.c.163.com/nce2/nodejs:0.12.2

  • 檢視映象 docker images

  • 建立node應用

  • 在工作目錄下建立package.json檔案 vi package.json 寫入內容

  • 建立server.js,也就是我們node應用的主檔案 vi server.js 寫點內容

  • 建立Dockerfile檔案

  • 在專案程式碼更目錄建立Dockerfile檔案 vi Dockerfile

下面簡單解釋下Dockerfile檔案

FROM hub.c.163.com/nce2/nodejs:0.12.2
複製程式碼

FROM是構建映象的基礎映象源,後面的一串是我們剛才pull下來的那個Image,如果本地沒有Docker,會自己pull映象的。

RUN mkdir -p /home/Service
WORKDIR /home/Service
複製程式碼

第一句RUN用於在Image裡建立一個資料夾,將會用於儲存我們的程式碼。 第二句WORKDIR是將我們建立的資料夾作為工作目錄。

# Bundle app Source
COPY . /home/Service
RUN npm install
複製程式碼

第一句的COPY是把本機當前目錄下的所有檔案拷貝到Image/home/Service目錄下。 第二句的RUN是用npm 安裝我們的node應用中的所有依賴包。

EXPOSE 8888
複製程式碼

我們的node應用監聽的是8888埠,我們可以把這個埠暴露給主機。這樣我們就可以從外網訪問我們的應用了。

CMD ["npm" , "start"]
複製程式碼

用來啟動我們的node應用。

##構建Image

在我們的Dockerfile所在的目錄下執行構建命令

docker build -t mynodeapp .

別忘了最後那個點,不久我們會看到成功構建的資訊。

然後我們去檢視一下我們構建的映象

docker images

##執行構建的Image

docker run -d -p 8888:8888 50550c

-d表示容器會在後臺執行,-p表示埠對映,把本機的8888埠對映到container的8888埠,這樣外網就可以通過本機訪問我們的應用, 後面的50550c是我們Image的ID,沒寫後面的是因為根據這幾個就能定位出來了。

竟然報錯了,也不能訪問8888埠。想了一下,應該是映象的問題。 就跑去dochub找了官方映象,修改Dockerfile裡的基礎映象

FROM node:4-onbuild
複製程式碼

然後再次構建我們的應用 docker build -t nodeapp .

然後開始從官網下載映象,確實特別慢..等了好久才下載完1個。貌似需要下載9個檔案.. 在漫長的等待過程中。。。

算了,放棄。。找找國內映象試試吧~~

然後去daocloud註冊了帳號,在這拉映象吧

很快,映象pull下來了。然後檢視下現在的映象。

現在我們去改下Dockerfile的基礎映象吧。

FROM daocloud.io/library/node
複製程式碼

現在我們再來構建下映象試試 docker build -t nodeapp .

看到了構建成功的資訊,接著檢視一下imges

然後啟動: docker run -d -p 8888:8888 7b784

果然出現了問題... 啟動不成功,最後才知道,映象和Dockerfile都是一一對應的,不對應就可能會出現上面的所有問題。(切記

最近還是選擇了官網的映象,等待了40分鐘左右,全部pull下來了,開始幹活~~

  • 修改Dockerfile檔案如下:
FROM node:4-onbuild
# replace this with your application's default port
EXPOSE 8888
複製程式碼
  • 重新構建: docker build -t my-node-apps .

  • 啟動docker映象: docker run -d -p 8888:8888 8b

  • 然後檢視下container docker ps

然後用瀏覽器訪問下8888埠,能成功訪問到我們的應用了。

完美!!!!!!!!!這次終於成功了~

然後去刪除沒用的imagescontainer...

若要刪除所有的image, 使用命令:docker rmi $( docker images -q )

刪除container docker rm id

##總結


因為映象的事情走了不少彎路,浪費了很多的時間,所以最好還是去官網下需要的東西,然後看官方給的文件,英文的也要盡力去看。 今後還要去做學習一些images的管理,container的管理,以及應用日誌處理相關的東西。


本文於2017-04-03釋出在 麥曉傑的新浪部落格

參考:

hub.docker.com/r/library/n…

dockone.io/article/53

linux.cn/article-434…

www.cnblogs.com/li-peng/p/5…

相關文章