Docker搭建部署Node項目的方法步驟,Node服務部署搭建方法

目錄

  • 什么是Docker
  • 客戶端Docker
  • Docker基本操作
    • 鏡像名稱
    • 拉取鏡像
    • 其他操作
  • Dockerfile
  • Docker-compose
  • 構建nginx-node-postgres項目
前段時間做了個node全棧項目,服務端技術棧是 nginx + koa + postgresql 。其中在centos上搭建環境和部署都挺費周折,部署測試服務器,接著上線的時候又部署生產環境服務器 。這中間就有很多既無聊又費精力,吃力不討好的"體力活" 。所以就開始思考怎么自動化這部分搭建部署的工作,也就引出了Docker 。
 
什么是DockerDocker 是比虛擬機還要輕量級的虛擬化技術,它虛擬化的實體就叫做容器 。容器本身就是一個隔離了作用域的sandbox,同時它只包含了基礎庫和本身承載的服務,非常精簡 。容器運行起來后就只是宿主機中的一個進程而已,占用的資源是非常小的,這就為操作系統上運行容器集群創造了條件,可操作性和靈活性極佳 。
鏡像和容器又是什么關系呢?可以把鏡像看成是類(class),容器看成對象(object),容器是由鏡像實例化產生出來的,當然一個鏡像可以生成多個容器 。
 
客戶端Docker如果不在服務器,我們在客戶端要怎么使用 Docker呢?在 Windows 和 OSX 上可以使用 Docker Desktop,再加上Kitematic,這兩個都是桌面管理工具,常規的操作方面非常便利 。Docker Desktop 和 Kitematic 只是可視化了部分操作,命令行還是必備的,因為很多操作也只能命令行才行 。
 
Docker基本操作 
鏡像名稱關于鏡像標簽,比如nginx:1.19.0-alpine,1.19.0是 nginx 的版本號,alpine是os的代號 。
  • Jessie: debian 8
  • Stretch: debian 9
  • Buster: debian 10
  • Alpine: Alpine,推薦使用,因為體積非常小
Alpine 是體積最小的一個版本,有些甚至是其他版本的四分之一 。這意味著構建鏡像更快,運行效率更高,因為加載的組件更加少,無形中也意味著漏洞更少更安全 。
 
拉取鏡像docker pull nginx:1.19.0-alpine啟動容器
  • --name web:指定容器名稱為web
  • -p 8080:80: 容器nginx監聽端口為80,映射到本地端口8080
  • -v xxxx:xxxx:這里是用本地配置文件映射到容器nginx配置文件
  • -d:后臺運行
  • nginx:1.19.0-alpine:使用的鏡像
docker run --name web -p 8080:80 -v /usr/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx:1.19.0-alpine 
其他操作
  • docker images #顯示鏡像
  • docker rmi xxx #刪除鏡像
  • docker ps #顯示運行的容器
  • docker rm xxx #刪除容器
 
Dockerfile構建鏡像比較方便的是使用Dockerfile,它就是鏡像的配置文件,只要有Dockerfile,隨時可以構建鏡像 。如下就是構建一個非常簡單的nginx鏡像,from就是構建時使用的基礎鏡像:
FROM nginxCOPY nginx.conf /etc/nginx/nginx.conf 
Docker-compose當我們的項目不僅只有單個容器,而是需要運行多個容器,而且容器之間還需要互相通信的時候,就需要更強大的管理工具了 。比如k8s,但我們目前的小項目使用官方自帶的Docker-compose已經足矣 。
首先需要docker-compose.yml配置文件,比如下面就是兩個容器的模板,image表示使用的鏡像,ports則表示端口映射,volumes則是需要映射的數據卷:
version: "3"services:webapp:image: webports:- "8080:80"volumes:- "/data"redis:image: "redis:alpine"接著可以使用以下命令行進行操作:

推薦閱讀