docker compose 集成 nodejs+redis+mysql

docker compose 集成 nodejs+redis+mysql

月光魔力鸭

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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
反爬有很多手段,字体反爬就是其中之一。之前一直都是听过,但是却没怎么在实际爬虫中遇到过,最近在一个爬虫题目网站上看到了,试了试,发现还挺麻烦,当然自己从头研究字体肯定麻烦,简单的是模块多的是,选几个就过了。
最近感觉docker挺好用的,由于测试服务器经常重装,这里先记录下compose文件,后边重装直接复制就行啦。
之前看知乎相中了一个想法,给宝宝做一个站,上传生活的日常照片啊、视频之类的,存储肯定是在自己家里,然后做个穿透这样..开始做的时候又想着是时候接触下这些东西了,虽然公司都一点不用,但是自己没事接触下拓展下也是好的。
本来是想做一个图床,然后在chrome扩展中添加上,但是发现chrome的扩展有点毫无头绪,只能从头练习,从头学了。
需求:可能会有在页面加载的时候想执行某个js,例如统计页面的DOM等等。
最近先研究下jenkins远程部署,在自己服务器上跑一个先,简单记录下碰到的问题。
最近有个小功能需要一些基础数据,找了一下在小程序上有发现,暂时还没找到他的网站,想着把这些数据爬一些下来做为基础数据使用的。本来还想着直接反编译小程序的,没想到微信变更了加密方式,以前反编译的路子走不通了。
在程序中,会有需要后台一直运行的场景。这一节我们来做一个监控某网站的运行状态,如果没有运行,则改变当前的图标。