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"接着可以使用以下命令行进行操作:

推荐阅读