Skip to content

Commit 9809154

Browse files
committed
集成 Docker 实现项目容器化脚本部署 V2.0
1 parent 98b1ab2 commit 9809154

File tree

5 files changed

+289
-0
lines changed

5 files changed

+289
-0
lines changed

deploy/V 2.0/.env

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# 实例化 WEB 容器时设置的容器名
2+
WEB_CONTAINER_NAME="springboot.mybatis.web"
3+
# 实例化 MySQL 容器时设置的容器名
4+
MYSQL_CONTAINER_NAME="springboot.mybatis.mysql"
5+
6+
# wEB 镜像版本, 默认latest
7+
WEB_IMAGE_VERSION="latest"
8+
# MySQL 镜像版本, 默认latest
9+
MYSQL_IMAGE_VERSION="5.6"
10+
11+
# Web 容器对外映射的端口
12+
WEB_PORT="8082"
13+
# MySQL 服务root账户对应的密码
14+
MYSQL_ROOT_PASSWORD="root"
15+
16+
# MySQL 容器部署的宿主机IP
17+
MYSQL_IP="119.23.XXX.XXX"
18+
# MySQL 容器对外映射的端口
19+
MYSQL_PORT="3305"
20+
# Web 项目中用到的数据库名
21+
MYSQL_DB="answer"
22+
# Web 项目中连接 MySQL 专用账户
23+
MYSQL_UNAME="docker"
24+
# Web 项目中连接 MySQL 专用账户对应的密码
25+
MYSQL_PASSWD="123456"
26+
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', 'answer_ljm@163.com', 'sz', '2018-10-16 11:10:47', '2018-10-16 11:10:50');
42+
INSERT INTO `smw_user` VALUES ('2', 'admin', '1', '123456', 'admin@qq.com', 'sz', '2018-10-16 11:10:47', '2018-10-16 11:10:50');
43+

deploy/V 2.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: ${MYSQL_CONTAINER_NAME}
7+
hostname: smm
8+
image: mysql:${MYSQL_IMAGE_VERSION}
9+
environment:
10+
- HOSTNAME=mysql
11+
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
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+
- ${MYSQL_PORT}: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: ${WEB_CONTAINER_NAME}
31+
hostname: smw
32+
image: springboot-mybatis-web:${WEB_IMAGE_VERSION}
33+
environment:
34+
- MYSQL_IP=${MYSQL_IP}
35+
- MYSQL_PORT=${MYSQL_PORT}
36+
- MYSQL_DB=${MYSQL_DB}
37+
- MYSQL_UNAME=${MYSQL_UNAME}
38+
- MYSQL_PASSWD=${MYSQL_PASSWD}
39+
working_dir: /home/smw
40+
volumes:
41+
- ./data/web/smw:/home/smw
42+
ports:
43+
- ${WEB_PORT}: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 2.0/start.sh

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

0 commit comments

Comments
 (0)