docker compose 集成 nodejs+redis+mysql

docker compose 集成 nodejs+redis+mysql

月光魔力鸭

2023-05-01 17:34 阅读 649 喜欢 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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
一直有跑着puppeteer在做pdf的生成,可以今天突然发现一个问题:预览与打印生成的PDF不一致,猜测可能是边距导致的,应该是没设置好... 然后当我在本地尝试的时候也发现了这个问题..要么是字符,要么是版本
在程序中,会有需要后台一直运行的场景。这一节我们来做一个监控某网站的运行状态,如果没有运行,则改变当前的图标。
最近一直琢磨着做一个第三方统一登录的这么一个小东西,虽然网上其实也挺多的.. 不过造轮子的感觉还是很爽的。 QQ /Github 比较简单,申请下就OK 了.. 微信真不是个东西,得花钱。
国庆马上来临,头像已经先热起来了,为了蹭蹭热度,赶紧加班搞了一个。
最近看某站壁纸挺好看的,抓了几百张放本地...可总不能每天手动去换吧,就做了一个随机更换的小工具。
当我们使用web打印相关的解决方案的时候,还有不少小坑值得注意下,同时需要了解几个小技巧提升在web打印上的友好度,以下整理一些常见的小技巧
反爬有很多手段,字体反爬就是其中之一。之前一直都是听过,但是却没怎么在实际爬虫中遇到过,最近在一个爬虫题目网站上看到了,试了试,发现还挺麻烦,当然自己从头研究字体肯定麻烦,简单的是模块多的是,选几个就过了。
之前做了一段时间的上传相关的断点续传和秒传功能,这里整理下大体思路