docker compose 集成 nodejs+redis+mysql

docker compose 集成 nodejs+redis+mysql

月光魔力鸭

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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
最近看某站壁纸挺好看的,抓了几百张放本地...可总不能每天手动去换吧,就做了一个随机更换的小工具。
很久之前学习chrome扩展插件的时候已经做过一个了,好久没咋用,最近又跑了一个存储服务,准备在配合这个服务做个图床,以后就用这个了,之前的服务器到期忘了迁移数据都没了,这次换了服务器,在家里了,估计以后不会再做了吧,这个算是最后一个了,有啥问题就在这个进行优化了。
ubuntu 配置nginx反向代理,这里简单记录下,后续再复习..
最近有系统需要知道性能瓶颈,尝试使用jmeter对重要接口进行并发测试,确定能否支撑一定的用户数量。
最开始其实只是网站的一个小改版,导致的需要发送邮件的功能,本身功能不复杂,不做工具的话,几行代码应该就可以搞定的.. 不过后来想想,这个功能应该还是有一定的小需求的,就做成了工具。
登录方式现在非常多,不过像我这种小站让用户自己注册基本是不可能的了,只能依赖现有的第三方的登录来集成,之前有集成github,不过这个太过针对性,这里准备集成QQ互联登录,慢慢记录下。
一直有跑着puppeteer在做pdf的生成,可以今天突然发现一个问题:预览与打印生成的PDF不一致,猜测可能是边距导致的,应该是没设置好... 然后当我在本地尝试的时候也发现了这个问题..要么是字符,要么是版本
最近一直琢磨着做一个第三方统一登录的这么一个小东西,虽然网上其实也挺多的.. 不过造轮子的感觉还是很爽的。 QQ /Github 比较简单,申请下就OK 了.. 微信真不是个东西,得花钱。