之前筆者弄了一套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切換到dockerfile所在的位置/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
/*
執行以下命令(注意最後的那個 . !!!)開始打包:
# -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 標記本地映象,將其歸入某一倉庫 ...