1。修改pom文件
<properties>
<java.version>1.8</java.version>
<!--规定docker打包后镜像名称前缀-->
<docker.image.prefix>reggie_take_out</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.5</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- 跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!--使用docker-maven-plugin插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<!-- <version>1.0.0</version>-->
<configuration>
<!--镜像名称-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在目录,缺省为target-->
<directory>${project.build.directory}</directory>
<!--jar 包名,缺省为 $project.artifactId}-${project.version}-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
2。新建docker文件夹及dockerfile文件,images文件夹存放上传图片
3。dockerfile内容:
# 使用 JDK 8 环境为基础环境,如果镜像不是本地的将会从 DockerHub 进行下载
FROM java:8
# 在宿主机的 /var/lib/docker 目录下创建一个临时文件并把它链接到 tomcat 容器的工作目录 /tmp目录
VOLUME /tmp
EXPOSE 8081
# 复制文件并重命名 spring-boot-docker-1.0.jar 表示打包后的 jar 包名称
ADD reggie_take_out-1.0-SNAPSHOT.jar reggie_take_out.jar
ADD images/ /images/
# 为了缩短Tomcat启动时间,添加 java.security.egd 的系统属性指向 /dev/urandom 作为ENTRYPOINT
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/reggie_take_out.jar"]
4。修改原来存放图片的地址:
reggie:
#原来的图片存放地址
#path: D:/Project/IdeaProjects/reggie_take_out/src/main/resources/backend/images/image/
#docker中存放图片的地址
path: /images/
5。项目打包,建议先将原来的target文件夹删除之后再打包,然后建立镜像
6。在docker中创建mysql容器
docker pull mysql //拉取mysql镜像,默认拉取最新的版本
docker run -it --rm --name mysql8 -e MYSQL_ROOT_PASSWORD=aaaa -p 3303:3306 -d mysql --lower_case_table_names=1 //生成mysql容器,设置容器名,设置密码,设置映射
这里有一个坑,加上--rm后一旦stop容器,容器就会直接没了,但不加的话容器启动后就会自动停止,找了一圈也没找到靠谱的方法
这里登录时可能会报连接不了MySQL服务器错误,退出容器重新进去,不行的话多试几次
docker exec -it mysql8 /bin/bash //进入mysql容器
mysql -uroot -p //登录mysql
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'aaaa'; //设置mysql远程权限
flush privileges; //刷新权限 此时就可以在navicat中通过端口号3303连接到mysql容器了。
7。导入数据库数据
我使用的是navicat,连接端口号为生成mysql容器时设置的3303
然后新建reggie数据库,之后运行sql文件,导入数据
此时数据已经全部导入了
8。打开docker,查看镜像
两个容器都已经在运行了
9。创建网桥,然后把项目容器和数据库容器连接上去。
docker network create my-bridge //创建网桥
docker network inspect my-bridge //查看网桥
docker network connect my-bridge mysql8 //连接数据库镜像
docker network connect my-bridge reggie //连接项目镜像
连接好之后,再查看网桥
注意:数据库连接地址中的IP的为数据库容器在这个网桥中的IP地址,即 172.18.0.2
10。在浏览器访问管理员登录页瑞吉外卖管理端http://localhost:8081/backend/page/login/login.html
11。登录后可以正常使用了。
该项目的gitee仓库地址:reggie_take_out: 瑞吉外卖项目案例https://gitee.com/mainworld/reggie_take_out