Docker: 編寫 dockerfile 啓動 node.js 應用

編寫 Dockerfile

express 自動建立的目錄爲例,目錄結構以下:node

├── /bin
│   └── www
├── /node_modules
├── /public
├── /routes
├── /views
├── package-lock.json
├── package.json
├── ecosystem.config.js
├── app.js
└── Dockerfile

在項目目錄下新建 Dockerfile 文件docker

FROM node:10.15
MAINTAINER sunhengzhe@foxmail.com
COPY . /app/
WORKDIR /app
RUN npm install pm2 -g
EXPOSE 8003
CMD ["pm2-runtime", "ecosystem.config.js"]
  • FROM 指定基礎鏡像爲 node 的 10.15 版本(node 官方版本可 在此查看
  • MAINTAINER 說明鏡像的維護者
  • COPY 命令將宿主機的文件拷貝到鏡像中,格式爲 COPY [--chown=<user>:<group>] <源路徑>... <目標路徑>,這裏將項目目錄下的全部文件都拷貝到鏡像中的 /app 目錄下。若是目標路徑不存在,docker 將自動建立。
  • WORKDIR 用來指定工做目錄,便是 CMD 執行所在的目錄。
  • RUN 命令用來執行 shell 命令,這裏用來安裝 pm2
  • EXPOSE 命令用來 聲明 運行時容器提供服務端口,但要注意運行時並不會開啓這個端口的服務。這個命令主要是幫助使用者理解這個鏡像服務的守護端口,以方便配置映射;另外在使用隨機端口映射時,會自動隨機映射 EXPOSE 的端口
  • CMD 是默認的容器主進程的啓動命令

構建鏡像

在項目目錄下執行shell

docker build -t express-app:v1 .

若是構建成功,查看鏡像列表express

docker images

應該會輸出鏡像 express-app:v1npm

clipboard.png

運行容器

docker run -d -p 8003:3000 --name="express-app" express-app:v1

docker rundocker createdocker start 兩個命令的簡寫。json

  • -d--detach,表明讓容器後臺運行。
  • -p 指定宿主機和容器的端口映射,左邊爲宿主機的端口,右邊爲容器的端口,也就是說訪問宿主機的 8003 端口,會映射到容器內的 3000 端口。
  • --name 設置容器別名,若是不指定,docker 會隨機生成一個名字,好比 tender_swirles 之類的。

執行bash

docker ps

正常展現以下app

clipboard.png

添加 -a 參數能夠查看全部已啓動容器。ui

進入容器

若是要進入容器進行操做,執行下面命令spa

docker exec -it express-app bash

clipboard.png

-i-t 通常結合使用,-i 啓動交互模式,-t 指定須要分配終端,能夠自行嘗試不傳其中一個的效果。

exec 相似的還有 attach 命令,命令爲 docker attach express-app,但從這個 stdin 中 exit,會致使容器的中止,因此推薦使用 exec 命令。

關閉操做

中止容器

docker stop express-app

刪除容器

docker rm express-app

若是刪除時容器還在運行,須要加上 -f 參數

刪除鏡像

docker rmi express-app:v1
相關文章
相關標籤/搜索