docker部署nodejs專案應用

2022-07-26 04:33:11 字數 3336 閱讀 7598

之前筆者弄了一套nestjs專案放在自己伺服器上,並用pm2管理程序。

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

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

我們可以用以下命令來檢視centos版本

uname -r
官方源位址作為穩定的倉庫

#這裡安裝的是最新版本

sudo yum install docker-ce

# 指定版本安裝如下

這裡筆者將dockerfile檔案放在和我的nestjs專案同級,同級的還有 .dockerignore檔案,下面會細講

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

#指定我們的基礎映象是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

/*

切換到dockerfile所在的位置 

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

# -t表示指定映象的名字

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

執行以下命令可檢視目前本地docker的映象

從上圖可以看到我們剛剛打包的kai_docker映象

docker run -d -p 3000:3000 kai_docker:v1.0
這裡筆者加上   --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)
注:如果映象有容器正在使用,即使是已停止的容器,我們也必須先刪除正在執行的容器才能刪除映象

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

docker部署nodejs應用

docker三個核心概念如下 映象 images 乙個唯讀的模板,可以理解為應用程式的執行環境,包含了程式執行所依賴的環境和基本配置。相當於上圖中的每個小箱子裡面裝的東西。倉庫 repository 乙個用於存放映象檔案的倉庫。可以看做和gitlab一樣。容器 container 乙個執行應用程式的...

基於Docker部署nodejs應用

docker hub中有官方node映象,按照自己的需求直接獲取對應版本的image即可。我獲取的是8.0 alpine版本,因為基於alpine的node映象足夠小,僅有63.7 mb。從原始碼庫上,獲取到整個源 工程。過程略 首先,我們確立文件模型。目錄結構如下 nodejs order nod...

docker容器化部署nodejs應用

使用 dockerfile 建立映象 bossnodejs test v1.0.1 映象名稱 v版本號 空格 點 dockerfile 檔案所在目錄,可以指定dockerfile 的絕對路徑 docker build t bossnodejs test v1.0.1 標記本地映象,將其歸入某一倉庫 ...