docker部署nodejs項目應用


  之前筆者弄了一套nestjs項目放在自己服務器上,並用pm2管理進程。

  現在要把pm2停止,嘗試一下用docker容器,那么首先要安裝docker

 

一、安裝docker

  由於筆者服務器的系統是centos7,所以這里寫的是在centos7上安裝docker;

 注:Docker 要求 CentOS 系統的內核版本高於 3.10  

  我們可以用以下命令來查看centos版本

uname -r

 

 確定centos內核版本高於3.10后,接下來開始安裝:

 

  1、安裝所需的軟件包

   yum-utils 提供了 yum-config-manager ,並且 device mapper 存儲驅動程序需要 device-mapper-persistent-data 和 lvm2

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

  2、設置yum源

   官方源地址作為穩定的倉庫

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

  3、查看所有倉庫中所有docker版本,可以選擇特定版本安裝

yum list docker-ce --showduplicates | sort -r

  4、安裝docker

# 這里安裝的是最新版本
sudo yum install docker-ce
# 指定版本安裝如下
sudo yum install docker-ce-19.03.09

  5、啟動docker

sudo systemctl start docker

  6、驗證安裝是否成功(有client和service兩部分表示docker安裝啟動都成功了)

docker version

 

 至此,docker就安裝完成了

 

二、Docker部署node.js后端應用

  1、寫Dockerfile文件

   這里筆者將dockerfile文件放在和我的nestjs項目同級,同級的還有 .dockerignore文件,下面會細講

   

  下面是我的dockerfile文件內容(注意開頭必須大寫):

# FROM 表示設置要制作的鏡像基於哪個鏡像,FROM指令必須是整個Dockerfile的第一個指令,如果指定的鏡像不存在默認會自動從Docker Hub上下載。
# 指定我們的基礎鏡像是node,latest表示版本是最新
FROM node:latest

# 執行命令,創建文件夾
RUN mkdir -p /home/nodeNestjs

# 將根目錄下的文件都copy到container(運行此鏡像的容器)文件系統的文件夾下
COPY ./nestjs /home/nodeNestjs

# WORKDIR指令用於設置Dockerfile中的RUN、CMD和ENTRYPOINT指令執行命令的工作目錄(默認為/目錄),該指令在Dockerfile文件中可以出現多次,如果使用相對路徑則為相對於WORKDIR上一次的值,
# 例如WORKDIR /data,WORKDIR logs,RUN pwd最終輸出的當前目錄是/data/logs。
# cd到 /home/nodeNestjs
WORKDIR /home/nodeNestjs

# 安裝項目依賴包
RUN npm install
RUN npm build

# 配置環境變量
ENV HOST 0.0.0.0
ENV PORT 3000

# 容器對外暴露的端口號(筆者的nestjs運行的端口號是3000)
EXPOSE 3000

# 容器啟動時執行的命令,類似npm run start
CMD ["node", "/home/nodeNestjs/dist/main.js"]

  .dockerignore文件

   .dockerignore文件類似於git的.gitignore文件,可以忽略掉添加進鏡像中的文件,寫法、格式和.gitignore一樣,一行代表一個忽略。

/dist
/node_modules

logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

.DS_Store

/coverage
/.nyc_output

/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

.vscode/*

 

   2、 將代碼打包成鏡像

   切換到Dockerfile所在的位置 

   運行以下命令(注意最后的那個 . !!!)開始打包:

# -t表示指定鏡像的名字
docker build -t kai_docker:v1.0 .

  

  接下來,等待安裝過程,直到打包成功

  

  運行以下命令可查看目前本地docker的鏡像

docker  images

  從上圖可以看到我們剛剛打包的kai_docker鏡像

 

   3、 運行啟動鏡像

docker run -d -p 3000:3000 kai_docker:v1.0

  • -d:表示后台運行
  • -p:表示指定端口映射,(3000:3000)表示(本機端口:容器端口),3000是筆者的nestjs代碼中監聽的訪問端口,也是容器對外暴露的端口
  • 鏡像名后面的:v1.0:表示打的tag號

 

 這里筆者加上   --restart=always  讓進程自動重啟

docker run -d --restart=always -p 3000:3000 kai_docker:v1.0

 

 運行以下命令可以查看容器運行情況

docker ps

  可以看到我們的容器正常運行中

  至此,筆者的nestjs的接口就可以正常訪問了

 

三、容器報錯停止

 如果容器運行后執行docker ps沒有出現剛剛運行的容器,可以執行以下命令查看退出的容器:

docker ps -a

 出現這種情況的原因是運行的docker容器報錯所致,可以用以下命令查看報錯日志

docker logs CONTAINER_ID(CONTAINER_ID是docker容器的id)

 容器報錯有可能是因為dockerfile寫的有問題所致,這時候需要刪掉錯誤的容器和鏡像,再重新打包正確的鏡像

 

 參考以下命令:

 刪除docker中的容器

docker rm 容器id

 刪除docker中的鏡像

docker rmi 鏡像id

 刪除docker中所有容器

docker rm $(docker ps -aq)

 刪除docker中所有鏡像

docker rmi $(docker images -q)

 

注:如果鏡像有容器正在使用,即使是已停止的容器,我們也必須先刪除正在運行的容器才能刪除鏡像

 

刪掉錯誤的容器和鏡像,再按之前的步驟重新打包正確的鏡像就可。

  

 

  


免責聲明!

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



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