docker项目实战——ruoyi持久化

docker项目实战——ruoyi持久化 一、持久化Docker 容器默认是临时存储容器删除容器内部所有数据全部跟着消失。持久化就是把重要数据放到宿主机磁盘脱离容器生命周期。二、持久化部署2.1 mysql 持久化#项目版本下载 cd /opt git clone https://gitee.com/humajun/ruoyi.git # 挂载 mysql 实现持久化 # 创建 MySQL 数据卷 docker volume create mysql-data # 查看数据卷详细信息 docker volume inspect mysql-data # 运行MySQL并挂载数据卷 docker run -d \ --name mysql.server \ --hostname db \ --network ruoyi-net \ -e MYSQL_ROOT_PASSWORD123456 \ -e MYSQL_DATABASEry-vue \ -e LANGC.UTF-8 \ -e LC_ALLC.UTF-8 \ -v /opt/mysql-data:/var/lib/mysql \ -v /opt/ruoyi/sql:/docker-entrypoint-initdb.d \ mysql:5.7 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_general_ci # 查看容器是否创建成功 docker ps # 验证卷挂载 docker inspect mysql.server | grep -A 10 Mounts # 进入 mysql.server 容器查看数据库 docker exec -it mysql.server /bin/bash mysql -uroot -p123456 show databases; use ry-vue; show tables;2.2 redis 持久化# 挂载 redis 实现持久化 # 创建Redis数据卷 docker volume create redis-data # 运行Redis并挂载数据卷 docker run -d \ --name redis.server \ --network ruoyi-net \ -p 6379:6379 \ -v redis-data:/data \ redis redis-server --appendonly yes # 查看 redis.server 容器是否运行成功 docker ps2.3 日志挂载# 创建本地目录 mkdir -p /home/developer/ruoyi-logs # 运行容器并挂载本地目录 docker run -d \ --name ruoyi-web \ --network ruoyi-net \ -p 80:80 \ -v /home/developer/ruoyi-logs:/var/log/nginx \ nginx:1.25.3 # 查看容器是否运行成功 docker ps # 访问Nginx生成日志 curl http://localhost # 查看日志文件 cat /home/developer/ruoyi-logs/access.log2.3 ruoyi 后端部署2.3.1 准备jar包# 修改application文件 vim /opt/ruoyi/ruoyi-admin/src/main/resources/application-druid.yml # 修改主机IP和数据库的用户名与密码 vim /opt/ruoyi/ruoyi-admin/src/main/resources/application.yml # 修改主机IP #下载一个mvn镜像用于为我们的后端打jar包 docker pull maven:3.6.3-openjdk-11 # 查看镜像是否下载成功 docker images # 启动maven镜像 cd /opt/ruoyi docker run -it --rm -v /opt/ruoyi:/vue maven:3.6.3-openjdk-11 /bin/bash # 进入/vue目录进行mvn命令打jar包 cd /vue mvn package # 退出maven容器将ruoyi-admin.jar移到/java下 mkdir /opt/java mv /opt/ruoyi/ruoyi-admin/target/ruoyi-admin.jar /opt/java # 将阿里云仓库也上传到 /java 目录下2.3.2 编写Dockerfile定义运行环境# 编写 Dockerfile vim Dockerfile # 使用 OpenJDK 8 镜像 FROM eclipse-temurin:8-jre # 设置时区 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo Asia/Shanghai /etc/timezone # 设置容器内的工作目录为 /opt WORKDIR /opt # 把当前目录下的 ruoyi-admin.jar 拷贝到容器的 /opt 目录 COPY ./ruoyi-admin.jar /opt # 容器启动时执行的命令 CMD [ java,-jar,ruoyi-admin.jar ]2.3.3 构建镜像# 构建命令 docker build -t ruoyi-admin:1.0 . # 查看构建的镜像 docker images | grep ruoyi-admin2.3.4 验证镜像# 运行容器测试 docker run -d \ --name java.server \ --network ruoyi-net \ -p 8080:8080 \ -e SPRING_DATASOURCE_URLjdbc:mysql://mysql.server:3306/ry-vue \ ruoyi-admin:1.0 # 查看启动日志 docker logs java.server2.4 ruoyi 前端部署# 构建产物 cd /opt/ruoyi docker run -it --rm \ -v /opt/ruoyi/ruoyi-ui:/opt \ -w /opt \ node:12 \ /bin/bash -c npm install npm run build:prod # 确认产物 ll /opt/ruoyi/ruoyi-ui/dist/ # 启动Nginx前端 docker run -d \ --name ruoyi-web \ --network ruoyi-net \ -p 8888:80 \ -v /opt/ruoyi/ruoyi-ui/dist:/usr/share/nginx/html \ -v /opt/ruoyi/nginx.conf:/etc/nginx/conf.d/default.conf \ nginx:1.25.3 # 验证 docker ps | grep ruoyi-web2.5 验证# 查看所有容器 docker ps # 验证容器间通信 docker exec java.server getent hosts mysql.server docker exec java.server getent hosts redis.server # 浏览器访问前端 http://服务器IP:8888 http://192.168.1.17:8888