Docker部署Spring boot + Redis +Mysql

创建一个桥接模式的网络

# 创建一个桥接模式的网络,并制定子网范围以及网关ip
docker network create --driver bridge --subnet 172.20.21.0/24 --gateway 172.20.21.1 school-exam

安装redis

#运行redis,并把G:\docker-config-files\SchoolExam\redis.conf目录下的文件挂载到/etc/redis.conf
#执行使用的网段以及ip
​
docker run -itd --name school-redis -v G:\docker-config-files\SchoolExam\redis.conf:/etc/redis.conf --net school-exam -p 6480:6379 --ip 172.20.21.2 redis:3.2.10 /etc/redis.conf
​
# 如果需要其它docker容器连接redis,则需要修改redis.conf
​
1.把 bind 127.0.0.1 -> bind 172.20.21.2   #172.20.21.2为redis容器的ip地址
2.启用 requirepass foobared   #可改也可不改
3.把 protected-mode yes -> protected-mode no   #关闭安全模式
​

安装mysql

#运行mysql,需要指定MYSQL_ROOT_PASSWORD,不然docker无法正常启动
​
docker run -itd --name school-mysql -e  MYSQL_ROOT_PASSWORD=root --net school-exam -p 6481:3306 --ip 172.20.21.3 mysql:5.7
​
# mysql这个地方有个坑,我用的是5.7版本,这个版本默认设置了ONLY_FULL_GROUP_BY,因为项目上有些group by
# 语句没有写全分组的字段,所以会报错。需要改一下my.cnf文件
​
# 把school-mysql容器上的my.cnf文件复制到本地
docker cp school-mysql:/etc/my.cnf G:\docker-config-files\SchoolExam
​
# 在[mysqld]下添加以下文本:
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
​
#重新把my.cnf文件上传到容器上,并重启mysql容器
docker cp G:\docker-config-files\SchoolExam\my.cnf school-mysql:/etc
​

在 Idea上执行 mvn package 把 spring boot项目打包成jar包,并创建Dockerfile文件

注意:如果spring boot 项目中有jsp文件,spring-boot-maven-plugin的版本需要降到1.4.2.RELEASE ,否则会报404。且要在打包时把jsp文件打包到特定路径下,如下:

Dockerfile文件内容如下:

# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包以及配置文件复制到docker容器的/conf目录下,这个路径根据自己情况来
COPY exam-web-2.0.jar /exam-web-2.0.jar
COPY application.yml /conf/application.yml
# 声明服务运行在8031端口
EXPOSE 8031
# 指定docker容器启动时运行jar包,并指定配置文件
ENTRYPOINT ["java", "-jar","/exam-web-2.0.jar","--spring.config.location=/conf/application.yml"]
​

创建项目镜像

# 创建镜像文件,需要切换到Dockerfile所在目录下执行,且目录下要有application.yml文件
docker build -t school-exam:2.0 .
​
# 启动镜像
# -v 文件挂载,如果需要修改配置文件,只需要修改G:\Lyy_Study\conf目录下
docker run -p 8031:8031 -v  G:\Lyy_Study\conf:/conf  --net school-exam --ip 172.20.21.4 --name school-web school-exam:2.0

注:修改application.yml文件中的 redis和mysql连接,改成redis所在容器的ip 以及 mysql所在容器的ip。

猜你喜欢

转载自blog.csdn.net/liyayou/article/details/126163625