目 录CONTENT

文章目录

6.部署自己的应用

Administrator
2022-11-13 / 0 评论 / 0 点赞 / 39 阅读 / 4759 字 / 正在检测是否收录...

部署自己的应用

本例子我们使用docker来部署一个应用系统,RuoYi是一款用java编写的,基于SpringBoot+Bootstrap的后台管理系统。
ruoyi官方文档:http://doc.ruoyi.vip/ruoyi/
源码下载:https://gitee.com/y_project/RuoYi/tree/v4.7.4/
将源码编译打包成ruoyi-admin.jar文件,放到宿主机/home/app目录下,/home/app/sql目录下是数据库初始化脚本。
配置文件中修改了端口、数据库连接信息。

#application.yml
server:
  # 服务器的HTTP端口,默认为80
  port: 8080

---
#application-druid.yml
	url: jdbc:mysql://ruoyi-db:3306/ry?useUnicode=true&characterEncoding=utf8
  username: root
  password: 123456
  • 准备工作:
    创建网络和存储卷
docker volume create ruoyi-data
docker network create ruoyi-net

部署mysql并初始化数据库

我们在创建数据库容器的时候,需要做三件事:

  • 创建数据库ry
  • 设置字符集为utf-8
  • 执行数据库初始化脚本
    使用MYSQL_DATABASE环境变量创建数据库
    设置字符集--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    容器使用/docker-entrypoint-initdb.d目录下的脚本初始化数据库,脚本可以是.sh``.sql
    .sql.gz这三种格式。
docker run -e MYSQL_ROOT_PASSWORD=123456 \
           -e MYSQL_DATABASE=ry \
		   -v /home/app/sql:/docker-entrypoint-initdb.d \
           -v ruoyi-data:/var/lib/mysql  \
           --network ruoyi-net \
           --name ruoyi-db \
           -d mysql:5.7 \
           --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

部署应用

docker run -p 8080:8080 \
			-v /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jar \
        	 --network ruoyi-net \
             --name ruoyi-java \
			 -d openjdk:8u342-jre \
           java -jar /usr/local/src/ruoyi-admin.jar

解决乱码问题:

乱码问题是容器中mysql默认字符集引起的,我们需要将默认字符集改为utf8mb4
参考:https://github.com/docker-library/mysql/issues/131
可以进入容器,使用以下命令查看数据库字符集

docker exec -it ruoyi-db mysql -uroot -p

>show variables like '%character%';

注意:由于删除容器不会删除存储卷,修改字符集需要删除存储卷,不然已经导入的数据字符集不会发生改变

删除容器和卷

docker stop ruoyi-db
docker rm ruoyi-db
docker volume rm ruoyi-data

可以通过以下两种解决方法:

1.修改运行参数

使用环境变量LANG=C.UTF-8设置客户端字符集

docker run  -e MYSQL_ROOT_PASSWORD=123456 \
            -e MYSQL_DATABASE=ry \
            -e LANG=C.UTF-8 \
            -v /home/app/sql:/docker-entrypoint-initdb.d \
            -v ruoyi-data:/var/lib/mysql  \
            --network ruoyi-net \
            --name ruoyi-db \
            -d mysql:5.7 \
            --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

或者
使用–skip-character-set-client-handshake忽略客户端字符集,使用客户端和服务端字符集一致

docker run  -e MYSQL_ROOT_PASSWORD=123456 \
            -e MYSQL_DATABASE=ry \
            -v /home/app/sql:/docker-entrypoint-initdb.d \
            -v ruoyi-data:/var/lib/mysql  \
            --network ruoyi-net \
            --name ruoyi-db \
            -d mysql:5.7 \
            --skip-character-set-client-handshake --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 

2.修改配置文件

修改/home/mysql/mysql.cnf

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

将配置文件挂载到容器中

docker run -e MYSQL_ROOT_PASSWORD=123456 \
           -e MYSQL_DATABASE=ry \
           -v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro  \
		   -v /home/app/sql:/docker-entrypoint-initdb.d \
           -v ruoyi-data:/var/lib/mysql  \
           --network ruoyi-net \
           --name ruoyi-db \
           -d mysql:5.7 
0

评论区