Docker搭建部署Node项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker搭建部署Node项目相关的知识,希望对你有一定的参考价值。

参考技术A 前段时间做了个 node 全栈项目,服务端技术栈是 nginx + koa + postgresql 。其中在 centos 上搭建环境和部署都挺费周折,部署测试服务器,接着上线的时候又部署生产环境服务器。这中间就有很多既无聊又费精力,吃力不讨好的"体力活"。所以就开始思考怎么自动化这部分搭建部署的工作,也就引出了 Docker 。

Docker 是比虚拟机还要轻量级的虚拟化技术,它虚拟化的实体就叫做容器。容器本身就是一个隔离了作用域的 sandbox ,同时它只包含了基础库和本身承载的服务,非常精简。容器运行起来后就只是宿主机中的一个进程而已,占用的资源是非常小的,这就为操作系统上运行容器集群创造了条件,可操作性和灵活性极佳。

镜像和容器又是什么关系呢?可以把镜像看成是类( class ),容器看成对象( object ),容器是由镜像实例化产生出来的,当然一个镜像可以生成多个容器。

如果不在服务器,我们在客户端要怎么使用 Docker 呢?在 Windows 和 OSX 上可以使用 Docker Desktop ,再加上 Kitematic ,这两个都是桌面管理工具,常规的操作方面非常便利。 Docker Desktop 和 Kitematic 只是可视化了部分操作,命令行还是必备的,因为很多操作也只能命令行才行。

关于镜像标签,比如 nginx:1.19.0-alpine ,1.19.0是 nginx 的版本号, alpine 是os的代号。

Alpine 是体积最小的一个版本,有些甚至是其他版本的四分之一。这意味着构建镜像更快,运行效率更高,因为加载的组件更加少,无形中也意味着漏洞更少更安全。

构建镜像比较方便的是使用 Dockerfile ,它就是镜像的配置文件,只要有 Dockerfile ,随时可以构建镜像。如下就是构建一个非常简单的 nginx 镜像, from 就是构建时使用的基础镜像:

当我们的项目不仅只有单个容器,而是需要运行多个容器,而且容器之间还需要互相通信的时候,就需要更强大的管理工具了。比如 k8s ,但我们目前的小项目使用官方自带的 Docker-compose 已经足矣。

首先需要 docker-compose.yml 配置文件,比如下面就是两个容器的模板, image 表示使用的镜像, ports 则表示端口映射, volumes 则是需要映射的数据卷:

接着可以使用以下命令行进行操作:

docker-compose up 是个非常强大的命令,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。链接的服务都将会被自动启动,除非已经处于运行状态。可以说,大部分时候都可以直接通过该命令来启动一个项目。

有了上面的基础,接着就可以构建我们自己的项目了,首先是 node 服务的 dockerfile ,主要做了如下步骤

接着配置 docker-compose.yml

配置完我们的项目之后,接着就是运行起来

在我们的本地开发机是如此,部署到服务器也是如此,你想要部署几台服务器就部署几台,只要装了 docker ,都是一句命令行就能解决的事情。

要启动几个容器,修改下 docker-compose.yml 的配置,再次 docker-compose up ,so easy !

以上是关于Docker搭建部署Node项目的主要内容,如果未能解决你的问题,请参考以下文章

Docker快速搭建Node.js Express运行环境

Docker快速搭建Node.js Express运行环境

Docker快速搭建Node.js Express运行环境

Docker快速搭建Node.js Express运行环境

Docker + node(koa) + nginx + mysql 线上环境部署

docker部署redis集群(实战)