JEECG代码中有一个Dockerfile,基本思路是以CentOS为基础镜像,在其中安装了nginx、jdk、mysql和redis,将编译出来的前端文件拷贝至nginx的指定目录,后端的jar文件放至根目录,并生成nginx的配置文件和脚本启动文件,在脚本启动文件中启动redis、nginx和java -jar的后端服务,这篇文章将MySQL和Redis拿出来,作为容器化部署的一种粗糙的解决方式。
为何不使用Alpine大概率是因为验证码这样的东西需要sun.awt相应的支持,alpine下的OpenJDK的JRE无法支持,详细可参看:
- https://liumiaocn.blog.csdn.net/article/details/106557551
执行命令:docker run -d --name redis -p 6379:6379 -d redis:6.0.4
liumiaocn:jeecg liumiao$ docker run -d --name redis -p 6379:6379 -d redis:6.0.4 Unable to find image 'redis:6.0.4' locally 6.0.4: Pulling from library/redis Digest: sha256:ec277acf143340fa338f0b1a9b2f23632335d2096940d8e754474e21476eae32 Status: Downloaded newer image for redis:6.0.4 29bf8656bc8b14a8ee7d64ed97f4f555246ef688cdaf2fae9bb797e92cb35814 liumiaocn:jeecg liumiao$ docker ps |grep redis 29bf8656bc8b redis:6.0.4 "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 0.0.0.0:6379->6379/tcp redis liumiaocn:jeecg liumiao$步骤2: 启动MySQL
执行命令: docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d liumiaocn/mysql:5.7.16
liumiaocn:jeecg liumiao$ docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d liumiaocn/mysql:5.7.16 49ec74507aa7d70b320139ebed132424351bb7fb433c82d05945100260ea0f41 liumiaocn:jeecg liumiao$ docker ps |grep mysql 49ec74507aa7 liumiaocn/mysql:5.7.16 "docker-entrypoint.s…" 16 seconds ago Up 15 seconds 0.0.0.0:3306->3306/tcp mysql liumiaocn:jeecg liumiao$步骤3: 设定MySQL
MySQL启动之后需要作如下三件事情:
- 建库
- 建表以及初始化数据
- 设定大小写不敏感
前面两件事情都有SQL文件,通过执行即可完成,大小写敏感容易被忽视,不过也很容易可以通过执行日志进行确认。事前进行如下准备,将JEECG的db下提供的如下两个SQL文件拷贝至MySQL容器之中
liumiaocn:jeecg-boot liumiao$ docker cp 1mysql_schema.sql mysql:/tmp liumiaocn:jeecg-boot liumiao$ docker cp 2jeecgboot_mysql5.7.sql mysql:/tmp liumiaocn:jeecg-boot liumiao$建库
liumiaocn:jeecg-boot liumiao$ docker exec -it mysql sh # ls /tmp 1mysql_schema.sql 2jeecgboot_mysql5.7.sql # mysql -uroot -proot mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.16 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases -> ; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> source /tmp/1mysql_schema.sql Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | jeecg-boot | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql>建表以及初始化数据
mysql> use jeecg-boot Database changed mysql> source /tmp/2jeecgboot_mysql5.7.sql Query OK, 0 rows affected (0.00 sec) ...省略 Query OK, 1 row affected (0.01 sec) Query OK, 0 rows affected (0.00 sec) mysql> show tables; +-------------------------------+ | Tables_in_jeecg-boot | +-------------------------------+ | demo | | demo_field_def_val_main | | demo_field_def_val_sub | | jeecg_monthly_growth_analysis | | jeecg_order_customer | | jeecg_order_main | | jeecg_order_ticket | | jeecg_project_nature_income | | joa_demo | | onl_cgform_button | | onl_cgform_enhance_java | | onl_cgform_enhance_js | | onl_cgform_enhance_sql | | onl_cgform_field | | onl_cgform_head | | onl_cgform_index | | onl_cgreport_head | | onl_cgreport_item | | onl_cgreport_param | | oss_file | | qrtz_blob_triggers | | qrtz_calendars | | qrtz_cron_triggers | | qrtz_fired_triggers | | qrtz_job_details | | qrtz_locks | | qrtz_paused_trigger_grps | | qrtz_scheduler_state | | qrtz_simple_triggers | | qrtz_simprop_triggers | | qrtz_triggers | | sys_announcement | | sys_announcement_send | | sys_category | | sys_check_rule | | sys_data_log | | sys_data_source | | sys_depart | | sys_depart_permission | | sys_depart_role | | sys_depart_role_permission | | sys_depart_role_user | | sys_dict | | sys_dict_item | | sys_fill_rule | | sys_log | | sys_permission | | sys_permission_data_rule | | sys_position | | sys_quartz_job | | sys_role | | sys_role_permission | | sys_sms | | sys_sms_template | | sys_user | | sys_user_agent | | sys_user_depart | | sys_user_role | | test_demo | | test_enhance_select | | test_order_main | | test_order_product | | test_person | | test_shoptype_tree | +-------------------------------+ 64 rows in set (0.00 sec) mysql>设定大小写不敏感
mysql> exit Bye # echo "lower_case_table_names=1" >>/etc/mysql/mysql.conf.d/mysqld.cnf #重启MySQL容器
因为大小写不敏感的设定需要重启MySQL容器才能生效,所以需要使用docker restart mysql重启MySQL容器
liumiaocn:jeecg-boot liumiao$ docker restart mysql mysql liumiaocn:jeecg-boot liumiao$步骤4: 启动jeecg容器
本文使用基于CentOS的JEECG镜像,为了简单,此镜像将前端和后端放在了一起,所以容器中会有两个进程存在,强迫症患者可以进一步拆分,由此产生的各种设定修改请自行负责。
执行命令:docker run --name=jeecg -d -p 8080:8080 -p 8088:80 liumiaocn/jeecg:centos-2.2.0
liumiaocn:jeecg-boot liumiao$ docker run --name=jeecg -d -p 8080:8080 -p 8088:80 liumiaocn/jeecg:centos-2.2.0 16318371bb5dd33eea37f76eeabf6710dd0c0d65c43e23870d17dbde188dc655 liumiaocn:jeecg-boot liumiao$ docker ps |grep jeecg 16318371bb5d liumiaocn/jeecg:centos-2.2.0 "/bin/sh -c '/bin/sh…" 6 seconds ago Up 4 seconds 0.0.0.0:8080->8080/tcp, 0.0.0.0:8088->80/tcp jeecg liumiaocn:jeecg-boot liumiao$步骤5: 确认结果
通过docker logs jeecg进行确认,如果日志中出现了如下类似结果,说明已经成功启动了:
---------------------------------------------------------- Application Jeecg-Boot is running! Access URLs: Local: http://localhost:8080/jeecg-boot/ External: http://172.17.0.4:8080/jeecg-boot/ Swagger-UI: http://172.17.0.4:8080/jeecg-boot/doc.html ---------------------------------------------------------- liumiaocn:jeecg-boot liumiao$登录确认页面
使用http://localhost:8088/来在本机进行登录确认
登录结果确认
本文进行示例说明时,为了主要说明JEECG的部署方式的重点,容器启动的持久数据的保存均未列出,请根据需要自行设定。另外jar文件中由于使用了外部的Redis和MySQL服务,所以在实际使用时需要根据需要进行设定,
- 配置文件所在目录:jeecg-boot/jeecg-boot-module-system/src/main/resources
- 设定对象文件: application.yml
- 修改内容: active部分需要设定为prod
liumiaocn:resources liumiao$ head -n3 application.yml spring: profiles: active: prod liumiaocn:resources liumiao$
- 设定对象文件: application.yml
- 修改内容: 设定相应IP
liumiaocn:resources liumiao$ grep 192.168 application-prod.yml url: jdbc:mysql://192.168.31.242:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false host: 192.168.31.242 liumiaocn:resources liumiao$