docker compose 集成 nodejs+redis+mysql

docker compose 集成 nodejs+redis+mysql

月光魔力鸭

2023-05-01 17:34 阅读 482 喜欢 0

场景

项目完成后交付客户的是镜像,方便设置环境进行部署,这里记录下一些配置。

框架

数据库:mysql5.7 redis:4 nodejs:16 nodejs-thinkjs:3

部署思路

由于不熟悉docker,看了半天视频想通过dockerfile来实现,最后发现还是挺麻烦的,尤其是mysql的一些密码配置等,还有各种命令报错啥的。 最后查了下docker-compose ,发现并没有想象的复杂,最终使用了它。

Dockerfile

Dockerfile中书写关于web相关的一些配置和属性,如下:

# Mengfu Project Docker Image
# version 0.1

FROM node:16.14-slim

LABEL maintainer="chrunlee <chrunlee@foxmail.com>"

WORKDIR /usr/local/mengfu

COPY . .

RUN cd admin && npm install && cd ../admin-template && npm install && npm run build:prod 


EXPOSE 8360

CMD ["node","/usr/local/mengfu/admin/production.js"]

node采用的slim版本,然后构建完成后暴露8360端口,并启动product.js . 在没有使用docker之前,服务端管理进程是使用的pm2 ,这里把pm2取消了,docker本身就带有守护作用。

Dockerfile中的命令

FROM node:16.14-slim 基础镜像使用,可以从hub.docker.com查找

LABEL maintainer="author " 维护人信息

WORKDIR 工作目录

docker-compose.yml

version: "3.7"

services:
  mysql:
    image: mysql:5.7
    restart: always
    volumes:
      - ./mysql:/var/lib/mysql
      - ./init:/docker-entrypoint-initdb.d/
    ports:
      - 13306:3306
    expose:
      - 3306
    networks:
      - front-web
    privileged: true
    container_name: mysql

    environment:
      - "MYSQL_ROOT_PASSWORD=root"
      - "MYSQL_DATABASE=mengfu"
      - "TZ=Asia/Shanghai"
    command:
      --default-time-zone="+8:00"
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --max_connections=1000
      --innodb_lock_wait_timeout=500
    
  redis:
    image: redis:6-alpine3.17
    restart: always
    ports:
      - 16379:6379
    expose:
      - 6379
    networks:
      - front-web
    privileged: true
    environment:
      - "TZ=Asia/Shanghai"
    container_name: redis
    command: redis-server --appendonly yes
  web:
    build: .
    container_name: web
    ports:
      - 8360:8360
    volumes:
      - ./admin/www:/usr/local/mengfu/admin/www
      - ./admin/runtime:/usr/local/mengfu/admin/runtime
      - ./admin/logs:/usr/local/mengfu/admin/logs
      - ./admin/view:/usr/local/mengfu/admin/view
    environment:
      - "DOCKER=true"
      - "REDIS_PORT=6379"
      - "REDIS_HOST=server_redis"
      - "MYSQL_HOST=server_mysql"
      - "MYSQL_PORT=3306"
    networks:
      - front-web
    depends_on:
      - redis
      - mysql
    links:
      - redis:server_redis
      - mysql:server_mysql
networks:
  front-web:
    driver: bridge

这里面我自己需要注意的几个问题是: ports expose depends_on links volumes .

depends_on : 依赖,web依赖redis mysql ,需要这里标明

links : 将其他服务连接到当前的容器,比如: - redis:server_redis ,那么在项目中连接redis则可以使用new Reids({host : server_redis}) 来进行连接。

__ports __: 这里是将容器内的端口映射给宿主机端口,可以从宿主机直接访问

expose: 将容器内的端口暴露给其他容器使用

volumes: 共享卷,这里一般可以指定代码目录,以后如果有代码更新,则可以直接拉取后重启容器即可。

environment: 环境变量,需要配合容器内使用,比如:nodejs ,可以通过 process.env.REDIS_PORT来获取

mysql 注意事项

有初始化的sql数据,可以在volumes中执行。

volumes:
      - ./mysql:/var/lib/mysql
      - ./init:/docker-entrypoint-initdb.d/

常用命令

  1. 启动
docker compose up -d
  1. 重新编译启动
docker compose up -d --build

3.重启某个容器

docker compose restart web
  1. 删除容器/镜像
docker rm -fv NAME
docker rmi NAME

转载请注明出处: https://chrunlee.cn/article/docker-nodejs-mysql-redis.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
ffmpeg 采集摄像头进行推流,然后播放,实现直播。
国庆马上来临,头像已经先热起来了,为了蹭蹭热度,赶紧加班搞了一个。
ubuntu 配置nginx反向代理,这里简单记录下,后续再复习..
昨天客户发现了个小BUG,文章发布使用的ueditor, 上传视频的时候当时好好的,后来怎么就是播放不了?
上一章,我们学习和了解了websocket 是什么以及初始搭建,接下来,我们继续了解,如何进行广播以及对应的私聊呢。
与python后端进行联调,后端协议为jsonrpc ,这里简单记录下jsonrpc的通用请求函数,并附带几个栗子
通过registry 自建 dockerhub
需求:可能会有在页面加载的时候想执行某个js,例如统计页面的DOM等等。