
一、持久化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