Docker: 編寫 dockerfile 啟動 node.js 應用
編寫 Dockerfile
以 express
自動建立的目錄為例,目錄結構如下:
├── /bin │└── www ├── /node_modules ├── /public ├── /routes ├── /views ├── package-lock.json ├── package.json ├── ecosystem.config.js ├── app.js └── Dockerfile
在專案目錄下新建 Dockerfile
檔案
FROM node:10.15 MAINTAINER [email protected] 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
是預設的容器主程序的啟動命令
構建映象
在專案目錄下執行
docker build -t express-app:v1 .
如果構建成功,檢視映象列表
docker images
應該會輸出映象 express-app:v1
執行容器
docker run -d -p 8003:3000 --name="express-app" express-app:v1
docker run
是 docker create
和 docker start
兩個命令的簡寫。
-
-d
即--detach
,代表讓容器後臺執行。 -
-p
指定宿主機和容器的埠對映,左邊為宿主機的埠,右邊為容器的埠,也就是說訪問宿主機的 8003 埠,會對映到容器內的 3000 埠。 -
--name
設定容器別名,如果不指定,docker 會隨機生成一個名字,比如tender_swirles
之類的。
執行
docker ps
正常展示如下
新增 -a
引數可以檢視所有已啟動容器。
進入容器
如果要進入容器進行操作,執行下面命令
docker exec -it express-app bash
-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