docker-compose部署vue+springboot+mysql+nginx+redis

部署之前需要在主机上安装docker以及docker-compose,教程查询百度!

一、配置mysql

1.新建目录docker-compose,里面将要放项目中所有的docker-compose配置文件。
2.在docker-compose目录下新建MysqlConfiguration文件夹(此文件夹将放所有的mysql配置文件),并在里面分别新建conf(存放mysql的自定义配置文件)、db(存放数据库表)、init(存放初始化脚本)文件夹,以及创建Dockerfile文件。
3.将my.cnf放进conf文件夹:
my.cnf的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[mysql]
default-character-set = utf8

[mysql.server]
default-character-set = utf8

[mysqld_safe]
default-character-set = utf8

[client]
default-character-set = utf8

[mysqld]
character_set_server = utf8
init_connect = 'SET NAMES utf8'

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
symbolic-links = 0

4.将init.sql放进init文件夹:
init.sql的内容为初始化数据库的建表插表操作,根据项目的实际情况写入,这里不罗列出来。

5.Dockerfile文件的内容如下:

1
2
3
FROM mysql:5.7.24             #mysql基础镜像,这里选用5.7.24版本的
MAINTAINER ZHU #设置维护者
ENV LANG C.UTF-8 #环境编码设定为UTF-8

6.在docker-compose目录下新建docker-compose.yml配置文件,并将相关mysql配置写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '2'
services:
mysql: # mysql容器
container_name: mysql
build:
context: ./
dockerfile: ./MysqlConfiguration/Dockerfile
environment:
MYSQL_DATABASE: mytestdb # 创建名为mytestdb的库,根据实际需要填写
MYSQL_ROOT_PASSWORD: <设置你数据库密码> # 设置root用户的密码
MYSQL_ROOT_HOST: '%'
ports:
- "33061:3306" #将宿主机的33061端口映射到mysql容器内的3306端口
volumes: #将宿主机的对应目录挂载到容器内部相应目录,实现数据持久化
- "./MysqlConfiguration/db:/var/lib/mysql"
- "./MysqlConfiguration/conf/my.cnf:/etc/my.cnf"
- "./MysqlConfiguration/init:/docker-entrypoint-initdb.d/"
restart: always # 自动重启

6.以上步骤完成后,可先测试mysql是否配置成功,进入docker-compose目录下,依次执行如下命令:

1
2
docker-compose pull           //从远端仓库拉取镜像
docker-compose up -d //启动docker-compose

运行成功后可以发现刚刚创建的db文件夹下已经有了经过初始化数据库后的相关表,说明挂载成功。也可以进入mysql容器内部查看相关表:

也可以通过mysqlworkbench访问到数据库:

7.测试没问题后,运行如下命令停止docker-compose并删除对应容器,以便于接下来增加其它内容的配置。(注意要在docker-compose.yml的根目录下执行)

1
2
docker-compose stop
docker-compose rm

二、配置redis

1.在docker-compose目录下新建RedisConfiguration文件夹(此文件夹将放所有的redis配置文件),在RedisConfiguration文件夹中创建data(用于保存redis运行记录)、redis(用于存放redis配置文件),以及Dockerfile文件。

2.将redis.conf放进redis文件夹,其具体内容去redis官网:https://redis.io/下载对应版本号解压后获取,这里使用的是最新的版本redis:5.0.7,
注意修改redis.conf中以下四个内容:
(1)注释 bind 127.0.0.1,意义是允许远程连接。
(2)取消注释requirepass foobared并将foobared改成自定义的密码,意义是开启redis验证,远程连接时就是用这个自定义密码。
(3)注释daemonize yes或者将yes改为no,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败。
(4)设置appendonly为yes,意义是开启redis数据持久化。

3.Dockerfile文件的内容如下:

1
2
FROM redis:5.0.7             #redis基础镜像,这里选用5.0.7版本的
MAINTAINER ZHU #设置维护者

4.增加redis的配置内容到docker-compose.yml:

1
2
3
4
5
6
7
8
9
10
11
12
redis:
container_name: redis
build:
context: ./
dockerfile: ./RedisConfiguration/Dockerfile
ports:
- "63791:6379"
volumes:
- "./RedisConfiguration/data:/data"
- "./RedisConfiguration/redis/redis.conf:/etc/redis/redis.conf"
restart: always
command: redis-server /etc/redis/redis.conf #指定容器启动时执行的命令

5.以上步骤完成后,可运行docker-compose并测试redis配置是否成功。如下图顺序测试:

完成后还可以用本地redis可视化工具连接到容器中的redis,如下图确实出现了上图中测试的键值对数据:

6.测试成功后再次停止运行docker-compose。

三、将vue项目部署到nginx

1.在docker-compose目录下新建VueConfiguration文件夹(此文件夹将放vue项目)。
2.终端进入VUE项目根目录,执行cnpm run build命令后,将新出现的dist文件夹整个拷贝到VueConfiguration目录下。
3.在docker-compose目录下新建NginxConfiguration文件夹(此文件夹将放nginx配置文件)。在NginxConfiguration文件夹下新建conf.d(设置代理)、logs(挂载日志)文件夹和Dockerfile文件。
4.在conf.d文件夹下新建nginx.conf文件,其内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server{
listen 80; #监听端口号
server_name localhost; #主机名,这里是本地部署所以为localhost
charset utf-8; #字符编码为utf-8

location / {
root /usr/share/nginx/html; #转发到html目录下的静态文件
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

5.Dockerfile的内容如下:

1
2
3
4
FROM nginx                #基础镜像为nginx
MAINTAINER ZHU #设置维护者
EXPOSE 80 #暴露80端口
CMD ["nginx","-g","daemon off;"] # 使用daemon off的方式将nginx一直运行在前台

6.在docker-compose.yml文件下增加nginx配置如下:

1
2
3
4
5
6
7
8
9
10
11
nginx:
container_name: nginx
build:
context: ./
dockerfile: ./NginxConfiguration/Dockerfile
ports:
- "80:80"
volumes:
- "./NginxConfiguration/logs:/var/log/nginx"
- "./NginxConfiguration/conf.d:/etc/nginx/conf.d"
- "./VueConfiguration/dist:/usr/share/nginx/html"

7.运行docker-compose,输入对应网址发现成功访问到Vue项目,而且在logs文件夹下发现挂载成功的日志文件,如下图:


8.测试成功后再次停止运行docker-compose。

四、部署springboot项目

1.在docker-compose目录下新建ServerConfiguration文件夹(此文件夹将放springboot项目),以及Dockerfile文件。
2.在ServerConfiguration文件夹下新建ServerProject文件夹,此文件夹将要存放springboot项目打包后的jar包。
3.检查springboot项目的配置文件有没有写错,重点是连接mysql的url要写对。如下图:

4.进入springboot项目根目录并运行以下命令打包:

1
mvn clean package -Dmaven.test.skip=true

打包成功后将target目录下生成的jar包复制到ServerProject文件夹下。
5.Dockerfile的内容如下:

1
2
3
4
5
FROM openjdk:8-jdk
MAINTAINER ZHU
COPY ./ServerConfiguration/ServerProject/demo-0.0.1-SNAPSHOT.jar /usr/local
ENTRYPOINT ["java","-jar","/usr/local/demo-0.0.1-SNAPSHOT.jar"]

6.在docker-compose.yml中增加server的配置代码:

1
2
3
4
5
6
7
8
server:
container_name: server
restart: always
build:
context: ./
dockerfile: ./ServerConfiguration/Dockerfile
ports:
- "8082:8082"

7.运行docker-compose,进入vue的登录界面后输入账号密码登录,发现能成功查询数据库并进到初始界面,说明vue,springboot和mysql的连接成功了,接着根据项目内容测试redis即可。

总结:
全部部署完毕后docker-compose的目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
docker-compose           #项目根目录
|--- MysqlConfiguration #mysql文件目录
|---conf
|---my.cnf #mysql的自定义配置文件
|---db #挂载数据库表
|---init
|---init.sql #初始化数据库表文件
|---Dockerfile
|---NginxConfiguration #nginx文件目录
|---conf.d
|---nginx.conf #nginx配置文件
|---logs #挂载日志(access.log、error.log)
|---Dockerfile
|---RedisConfiguration #redis文件目录
|---data #挂载启动redis时加载的aof文件
|---redis
|---redis.conf #redis的配置文件
|---Dockerfile
|---ServerConfiguration #springboot文件目录
|---ServerProject
|---demo-0.0.1-SNAPSHOT.jar
|---Dockerfile
|---VueConfiguration #vue文件目录
|---dist #vue打包后的dist文件夹
|---static
|---index.html
|---docker-compose.yml #docker-compose总配置文件

docker信息:

截图