JEECG代碼中有一個Dockerfile,基本思路是以CentOS爲基礎鏡像,在其中安裝了nginx、jdk、mysql和redis,將編譯出來的前端文件拷貝至nginx的指定目錄,後端的jar文件放至根目錄,並生成nginx的配置文件和腳本啓動文件,在腳本啓動文件中啓動redis、nginx和java -jar的後端服務,這篇文章將MySQL和Redis拿出來,作爲容器化部署的一種粗糙的解決方式。
爲何不使用Alpine
大概率是因爲驗證碼這樣的東西需要sun.awt相應的支持,alpine下的OpenJDK的JRE無法支持,詳細可參看:
步驟1: 啓動Redis
執行命令: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$