部署之前需要在主机上安装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信息: