Skip to content

Commit 51fef00

Browse files
committed
集成 Docker 实现项目容器化脚本部署
1 parent de9c4be commit 51fef00

File tree

6 files changed

+287
-2
lines changed

6 files changed

+287
-2
lines changed

deploy/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# 集成 Docker 实现项目容器化脚本部署
2+
3+
4+
### 文件目录说明
5+
```bash
6+
# 1. 实例化 MySQL 容器启动时自动执行脚本. *.sh | *.sql | *.sql.gz
7+
auto-script
8+
- init_tables.sql # 初始化数据库表结构
9+
- init_account.sql # 初始化数据库账户, 默认账户名: docker 密码: 123456
10+
11+
# 2. 持久化本地挂载目录, 注意该目录不可被删除, 否则容器内部的数据也将被同步移除(脚本中会自动生成)
12+
data
13+
- mysql # MySQL 数据库持久化数据本地存储目录
14+
- web # Web 数据持久化本地存储目录
15+
16+
# 3. 持久化数据备份目录, 在重启服务是会用到(脚本中会自动生成)
17+
dataBak
18+
19+
# 4. 服务编排文件信息
20+
docker-compose.yaml
21+
22+
# 5. 服务启动日志存储目录(脚本中会自动生成)
23+
logs
24+
- smw.log
25+
26+
# 6. 服务启动脚本
27+
start.sh
28+
29+
30+
# 注意: 请先生成 springboot-mybatis-web 镜像
31+
```
32+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/** 创建 docker 账户 */
2+
use mysql;
3+
4+
create user 'docker'@'%' identified by '123456';
5+
6+
grant all privileges on answer.* to 'docker'@'%';
7+
8+
flush privileges;
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
Navicat MySQL Data Transfer
3+
4+
Source Server : 119.23.XXX.XXX
5+
Source Server Version : 50723
6+
Source Host : 119.23.XXX.XXX:3306
7+
Source Database : answer
8+
9+
Target Server Type : MYSQL
10+
Target Server Version : 50723
11+
File Encoding : 65001
12+
13+
Date: 2018-10-17 17:27:23
14+
*/
15+
16+
SET FOREIGN_KEY_CHECKS=0;
17+
18+
CREATE DATABASE IF NOT EXISTS answer default charset utf8 COLLATE utf8_general_ci;
19+
20+
USE answer;
21+
22+
-- ----------------------------
23+
-- Table structure for `smw_user`
24+
-- ----------------------------
25+
DROP TABLE IF EXISTS `smw_user`;
26+
CREATE TABLE `smw_user` (
27+
`id` bigint(18) NOT NULL AUTO_INCREMENT,
28+
`user_name` varchar(55) DEFAULT NULL,
29+
`sex` tinyint(3) DEFAULT NULL,
30+
`password` varchar(55) DEFAULT NULL,
31+
`email` varchar(55) DEFAULT NULL,
32+
`address` varchar(55) DEFAULT NULL,
33+
`create_time` datetime DEFAULT NULL,
34+
`update_time` datetime DEFAULT NULL,
35+
PRIMARY KEY (`id`)
36+
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
37+
38+
-- ----------------------------
39+
-- Records of smw_user
40+
-- ----------------------------
41+
INSERT INTO `smw_user` VALUES ('1', 'answer', '1', '123456', '[email protected]', 'sz', '2018-10-16 11:10:47', '2018-10-16 11:10:50');
42+
INSERT INTO `smw_user` VALUES ('2', 'admin', '1', '123456', '[email protected]', 'sz', '2018-10-16 11:10:47', '2018-10-16 11:10:50');
43+

deploy/V 1.0/docker-compose.yaml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
version: '2'
2+
3+
services:
4+
5+
springboot.mybatis.mysql:
6+
container_name: springboot.mybatis.mysql
7+
hostname: smm
8+
image: mysql:5.6
9+
environment:
10+
- HOSTNAME=mysql
11+
- MYSQL_ROOT_PASSWORD=123456
12+
working_dir: /home/smm
13+
# MySQL 在容器启动时会自动执行 /usr/local/bin/docker-entrypoint.sh 该脚本, 并自动执行 /docker-entrypoint-initdb.d 目录下的脚本
14+
# command: /bin/bash -c './script.sh;'
15+
volumes:
16+
- ./data/mysql/datadir:/usr/data
17+
- ./data/mysql/conf:/etc/mysql
18+
- ./data/mysql/smm:/home/smm
19+
- ./auto-script:/docker-entrypoint-initdb.d
20+
ports:
21+
- 3301:3306
22+
logging:
23+
driver: "json-file"
24+
options:
25+
max-size: "200M"
26+
max-file: "5"
27+
28+
29+
springboot.mybatis.web:
30+
container_name: springboot.mybatis.web
31+
hostname: smw
32+
image: springboot-mybatis-web:latest
33+
environment:
34+
- MYSQL_IP=119.23.XXX.XXX
35+
- MYSQL_PORT=3301
36+
- MYSQL_DB=answer
37+
- MYSQL_UNAME=docker
38+
- MYSQL_PASSWD=123456
39+
working_dir: /home/smw
40+
volumes:
41+
- ./data/web/smw:/home/smw
42+
ports:
43+
- 8081:8888
44+
depends_on:
45+
- springboot.mybatis.mysql
46+
logging:
47+
driver: "json-file"
48+
options:
49+
max-size: "200M"
50+
max-file: "5"

deploy/V 1.0/start.sh

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
#!/usr/bin/env bash
2+
:<<describle
3+
desc: 项目启动脚本
4+
author: Answer.Ai.L
5+
datetime: 2018-10-18 10:32:42
6+
describle
7+
8+
UP_DOWN="$1"
9+
CONTAINER_WEB="springboot.mybatis.web"
10+
CONTAINER_MYSQL="springboot.mybatis.mysql"
11+
12+
# 判断是否存在环境变量文件, 存在则读取
13+
if [ -f "./.env" ]; then
14+
info "读取环境变量配置信息..."
15+
cat ./.env
16+
fi
17+
18+
# 日志存放路径
19+
logPath="./logs/"
20+
logFileName="smw.log"
21+
22+
persistentDir="./data/"
23+
24+
# 判断文件夹是否存在, 不存在则新建
25+
if [ ! -d ${logPath} ]; then
26+
mkdir ${logPath}
27+
fi
28+
29+
if [ ! -d ${persistentDir} ]; then
30+
mkdir ${persistentDir}
31+
fi
32+
33+
# ------------------------- 日志操作方法 Start -------------------------
34+
function logger() {
35+
echo $(date +%F%n%T)" [$1] $2" | tee -a "${logPath}${logFileName}"
36+
}
37+
38+
function debug() {
39+
# 只有环境变量 DT_DEBUG 定义了并且为true或者"true"才打印debug日志
40+
if [ ${DT_DEBUG} -a ${DT_DEBUG} = "true" ]; then
41+
logger "DEBUG" "$1"
42+
fi
43+
}
44+
45+
function info() {
46+
logger "INFO" "$1"
47+
}
48+
49+
function warn() {
50+
logger "WARN" "$1"
51+
}
52+
53+
function error() {
54+
logger "ERROR" "$1"
55+
}
56+
# ------------------------- 日志操作方法 End -------------------------
57+
58+
function startService () {
59+
info "ready to start service."
60+
61+
# 判断是否已实例化过容器
62+
local containerCnt=`docker ps | grep -E "${CONTAINER_WEB}|${CONTAINER_MYSQL}" | wc -l`
63+
if [ ${containerCnt} -gt 0 ]; then
64+
info "容器已被实例化, 是否需要重启?重启/退出[y/n]"
65+
66+
read userInput
67+
info "user input for whether to restart: ${userInput}."
68+
if [ ${userInput} ] && [ ${userInput} == "Y" -o ${userInput} == "y" -o ${userInput} == "YES" -o ${userInput} == "yes" ]; then
69+
downService
70+
else
71+
info "程序退出!!!"
72+
exit 1
73+
fi
74+
fi
75+
76+
local dirCnt=`ls ${persistentDir} | wc -l`
77+
if [ ${dirCnt} -gt 0 ]; then
78+
info "持久化目录[${persistentDir}]下已有文件信息, 是否需要移除?移除/备份[y/n]"
79+
80+
read bakInput
81+
info "user input for whether to backup: ${bakInput}."
82+
if [ ${bakInput} ] && [ ${bakInput} == "Y" -o ${bakInput} == "y" -o ${bakInput} == "YES" -o ${bakInput} == "yes" ]; then
83+
warn "持久化目录[${persistentDir}]下的文件已被移除"
84+
rm -rf ${persistentDir}*
85+
else
86+
local bakDir="./dataBak/$(date +%Y%m%d%H%M%S)/"
87+
if [ ! -d "${bakDir}" ]; then
88+
mkdir -p ${bakDir}
89+
fi
90+
mv ${persistentDir}* ${bakDir}
91+
if [ $? -eq 1 ]; then
92+
error "备份持久化目录异常, 程序终止."
93+
exit 1;
94+
fi
95+
fi
96+
fi
97+
98+
docker-compose -f ./docker-compose.yaml up -d
99+
100+
info "start service successful!"
101+
}
102+
103+
104+
function downService () {
105+
info "ready to down service."
106+
107+
docker ps | grep -q ${CONTAINER_WEB}
108+
if [ $? -eq 0 ]; then
109+
docker rm -f ${CONTAINER_WEB}
110+
info "force rm container ${CONTAINER_WEB}[0:success | 1:failed]: $?."
111+
fi
112+
docker ps | grep -q ${CONTAINER_MYSQL}
113+
if [ $? -eq 0 ]; then
114+
docker rm -f ${CONTAINER_MYSQL}
115+
info "force rm container ${CONTAINER_MYSQL}[0:success | 1:failed]: $?."
116+
fi
117+
118+
info "down service successful!"
119+
}
120+
121+
122+
function restartService () {
123+
info "ready to restart service."
124+
125+
downService
126+
127+
startService
128+
129+
info "restart service successful!"
130+
}
131+
132+
133+
function printHelp () {
134+
echo "Usage:"
135+
echo -e "\tbash start.sh up | down | restart"
136+
exit 1
137+
}
138+
139+
140+
141+
if [ "${UP_DOWN}" == 'up' ]; then
142+
startService
143+
elif [ "${UP_DOWN}" == 'down' ]; then
144+
downService
145+
elif [ "${UP_DOWN}" == 'restart' ]; then
146+
restartService
147+
else
148+
printHelp
149+
exit 1
150+
fi
151+
152+
exit 0

script/answer.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
/*
22
Navicat MySQL Data Transfer
33
4-
Source Server : 119.23.106.146
4+
Source Server : 119.23.XXX.XXX
55
Source Server Version : 50723
6-
Source Host : 119.23.106.146:3306
6+
Source Host : 119.23.XXX.XXX:3306
77
Source Database : answer
88
99
Target Server Type : MYSQL

0 commit comments

Comments
 (0)