创建一个桥接模式的网络
# 创建一个桥接模式的网络,并制定子网范围以及网关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。