Docker使用編寫dockerfile啟動node.js應(yīng)用
編寫 Dockerfile
以 express
自動創(chuàng)建的目錄為例,目錄結(jié)構(gòu)如下:
├── /bin │ └── www ├── /node_modules ├── /public ├── /routes ├── /views ├── package-lock.json ├── package.json ├── ecosystem.config.js ├── app.js └── Dockerfile
在項目目錄下新建 Dockerfile
文件
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 指定基礎(chǔ)鏡像為 node 的 10.15 版本(node 官方版本可在此查看)
- MAINTAINER 說明鏡像的維護(hù)者
- COPY 命令將宿主機(jī)的文件拷貝到鏡像中,格式為 COPY [--chown=<user>:<group>] <源路徑>... <目標(biāo)路徑>,這里將項目目錄下的所有文件都拷貝到鏡像中的 /app 目錄下。如果目標(biāo)路徑不存在,docker 將自動創(chuàng)建。
- WORKDIR 用來指定工作目錄,即是 CMD 執(zhí)行所在的目錄。
- RUN 命令用來執(zhí)行 shell 命令,這里用來安裝 pm2
- EXPOSE 命令用來 聲明 運行時容器提供服務(wù)端口,但要注意運行時并不會開啟這個端口的服務(wù)。這個命令主要是幫助使用者理解這個鏡像服務(wù)的守護(hù)端口,以方便配置映射;另外在使用隨機(jī)端口映射時,會自動隨機(jī)映射 EXPOSE 的端口
- CMD 是默認(rèn)的容器主進(jìn)程的啟動命令
構(gòu)建鏡像
在項目目錄下執(zhí)行
docker build -t express-app:v1 .
如果構(gòu)建成功,查看鏡像列表
docker images
應(yīng)該會輸出鏡像 express-app:v1
運行容器
docker run -d -p 8003:3000 --name="express-app" express-app:v1
docker run
是 docker create
和 docker start
兩個命令的簡寫。
-d
即--detach
,代表讓容器后臺運行。-p
指定宿主機(jī)和容器的端口映射,左邊為宿主機(jī)的端口,右邊為容器的端口,也就是說訪問宿主機(jī)的 8003 端口,會映射到容器內(nèi)的 3000 端口。--name
設(shè)置容器別名,如果不指定,docker 會隨機(jī)生成一個名字,比如tender_swirles
之類的。
執(zhí)行
docker ps
正常展示如下
添加 -a
參數(shù)可以查看所有已啟動容器。
進(jìn)入容器
如果要進(jìn)入容器進(jìn)行操作,執(zhí)行下面命令
docker exec -it express-app bash
-i
與 -t
一般結(jié)合使用,-i
啟動交互模式,-t
指定需要分配終端,可以自行嘗試不傳其中一個的效果。
與 exec
類似的還有 attach
命令,命令為 docker attach express-app
,但從這個 stdin 中 exit,會導(dǎo)致容器的停止,所以推薦使用 exec
命令。
關(guān)閉操作
停止容器
docker stop express-app
刪除容器
docker rm express-app
如果刪除時容器還在運行,需要加上 -f
參數(shù)
刪除鏡像
docker rmi express-app:v1
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持本站。
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。