部署自己的应用
本例子我们使用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
评论区