博客
关于我
Docker搭建部署Node项目
阅读量:418 次
发布时间:2019-03-06

本文共 3412 字,大约阅读时间需要 11 分钟。

Docker全栈开发项目实践

最近在做一个 node 全栈开发项目,涉及服务端技术栈的搭建,其中服务端采用了 nginx + koa + postgresql。为了解决部署环境的繁琐操作问题,逐渐引入了 Docker 技术,通过自动化操作大大简化了环境搭建和部署流程。

Docker是什么?

Docker 是一种轻量级的虚拟化技术,它通过容器的方式运行应用程序。容器是一个隔离的沙盒环境,只包含应用程序及其所需的库和依赖。与传统虚拟机不同,容器运行时占用的资源极其有限,这使得在生产环境中运行容器集群变得更加高效和灵活。

镜像和容器的关系类似于类与对象的关系。镜像可以看作是容器的模板,容器是通过镜像实例化而来,一个镜像可以生成多个容器。

客户端Docker操作

在本地环境下使用 Docker 可以通过 Docker Desktop 进行操作。对于 Windows 和 macOS 用户,推荐使用 Kitematic 这类桌面管理工具。虽然 Docker Desktop 提供了直观的操作界面,但命令行操作仍然是必不可少的,因为很多复杂操作只能通过命令完成。

Docker基本操作

镜像操作

  • 拉取镜像:通过 docker pull nginx:1.19.0-alpine 获取指定镜像。
  • 删除镜像:使用 docker rmi 命令删除不需要的镜像。
  • 查看镜像:使用 docker images 查看所有下载的镜像。

容器操作

  • 启动容器docker run --name web -p 8080:80 -v /usr/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx:1.19.0-alpine
    • --name web:指定容器名称。
    • -p 8080:80:将容器内的 80 端口映射到本地 8080 端口。
    • -v /usr/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro:将本地配置文件挂载到容器。
    • -d:后台运行容器。

其他常用操作

  • 查看运行容器docker ps
  • 删除容器docker rm web

Dockerfile镜像构建

为了构建高效的镜像,推荐使用 Dockerfile。以下是一个简单的 Nginx 镜像构建示例:

FROM node:14.5.0-alpine3.12WORKDIR /usr/src/appCOPY package*.json ./COPY process.yml .RUN npm set registry https://registry.npm.taobao.org/ && npm install pm2 -g && npm installCMD ["pm2-runtime", "process.yml", "--only", "app", "--env", "production"]EXPOSE 3010

Docker-compose 集群管理

当项目需要多容器协作时, Docker-compose 是一个强大的工具。通过配置 docker-compose.yml 文件,可以定义多个服务容器,并通过一条命令启动所有服务。例如:

version: '3'services:  db:    image: postgres:12.3-alpine    environment:      - TZ=Asia/Shanghai      - POSTGRES_PASSWORD=xxxx    volumes:      - ./postgres/data:/var/lib/postgresql/data      - ./postgres/init:/docker-entrypoint-initdb.d    ports:      - 5432:5432    restart: always    expose:      - 5432  app:    image: koa-pg    volumes:      - ./dist:/usr/src/app/dist      - ./logs:/usr/src/app/logs    build: .    environment:      - TZ=Asia/Shanghai    restart: always    depends_on:      - db    links:      - db    expose:      - 3010  nginx:    image: nginx:1.19.0-alpine    volumes:      - ./nginx.conf:/etc/nginx/nginx.conf    ports:      - 8080:80    environment:      - TZ=Asia/Shanghai    restart: always    depends_on:      - app    links:      - app    expose:      - 8080

项目部署实践

服务镜像构建

# Node服务镜像FROM node:14.5.0-alpine3.12WORKDIR /usr/src/appCOPY package*.json ./COPY process.yml .RUN npm set registry https://registry.npm.taobao.org/ && npm install pm2 -g && npm installCMD ["pm2-runtime", "process.yml", "--only", "app", "--env", "production"]EXPOSE 3010

docker-compose 配置

version: '3'services:  db:    image: postgres:12.3-alpine    container_name: postgres    environment:      - TZ=Asia/Shanghai      - POSTGRES_PASSWORD=xxxx    volumes:      - ./postgres/data:/var/lib/postgresql/data      - ./postgres/init:/docker-entrypoint-initdb.d    ports:      - 5432:5432    restart: always  app:    image: koa-pg    container_name: koa    volumes:      - ./dist:/usr/src/app/dist      - ./logs:/usr/src/app/logs    build: .    environment:      - TZ=Asia/Shanghai    restart: always    depends_on:      - db    links:      - db    expose:      - 3010  nginx:    image: nginx:1.19.0-alpine    container_name: nginx    volumes:      - ./nginx.conf:/etc/nginx/nginx.conf    ports:      - 8080:80    environment:      - TZ=Asia/Shanghai    restart: always    depends_on:      - app    links:      - app    expose:      - 8080

容器运行

在本地或目标服务器上运行:

docker-compose up

这种方式不仅适用于本地开发,也可以轻松扩展到多服务器的部署环境。只需修改 docker-compose.yml 中的服务数量和配置即可完成多容器部署,极大提升了部署效率。

转载地址:http://tcduz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现MAC桌面暗水印(附完整源码)
查看>>
Objective-C实现mandelbrot曼德勃罗特集算法(附完整源码)
查看>>
Objective-C实现markov chain马尔可夫链算法(附完整源码)
查看>>
Objective-C实现MATLAB中Filter函数功能(附完整源码)
查看>>
Objective-C实现matrix exponentiation矩阵求幂算法(附完整源码)
查看>>
Objective-C实现MatrixMultiplication矩阵乘法算法 (附完整源码)
查看>>
Objective-C实现max non adjacent sum最大非相邻和算法(附完整源码)
查看>>
Objective-C实现max subarray sum最大子数组和算法(附完整源码)
查看>>
Objective-C实现max sum sliding window最大和滑动窗口算法(附完整源码)
查看>>
Objective-C实现MaxHeap最大堆算法(附完整源码)
查看>>
Objective-C实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)
查看>>
Objective-C实现MaximumSubarray最大子阵列(动态规划解决方案)算法(附完整源码)
查看>>
Objective-C实现maxpooling计算(附完整源码)
查看>>
Objective-C实现max_difference_pair最大差异对算法(附完整源码)
查看>>
Objective-C实现max_heap最大堆算法(附完整源码)
查看>>
Objective-C实现MD5 (附完整源码)
查看>>
Objective-C实现md5算法(附完整源码)
查看>>
Objective-C实现MeanSquareError均方误差算法 (附完整源码)
查看>>
Objective-C实现memcmp函数功能(附完整源码)
查看>>
Objective-C实现memoization优化技术算法(附完整源码)
查看>>