文章目录
Docker部署springboot项目
需求:
- 手动部署:本地IDE打包成jar,在docker环境中创建java环境容器,将jar包使用命令行拷贝至docker容器中,启动。
- 自动部署:通过Maven插件配置参数自动部署。(优先选这个)
步骤一:Springboot项目配置
1.1 添加docker的maven依赖
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<imageName>docker/${project.artifactId}</imageName> <!-- 镜像名称 -->
<dockerDirectory>src/main/docker</dockerDirectory> <!-- Dockerfile文件存放目录:后续改为项目根目录,后续Dockfile文件一定要放在这 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!--这个插件,可以将应用打包成一个可执行的jar包-->
<!--千万不能丢掉,不然web项目没有main入口-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.2</version>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
1.2 新建Dockfile构建镜像
# 基于openjdk 镜像,如果镜像不是本地的会从 DockerHub 进行下载
FROM openjdk:8
# VOLUME 指向了一个/tmp的目录,由于 SpringBoot使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。
# 这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
# 作者
MAINTAINER zhupeng
# 将本地JAR包打包到容器中,并重命名
ADD springboot-1.0-SNAPSHOT.jar app.jar
# 声明需要暴露的端口 在Dockerfile中声明了那些端口是需要开放的,在构建容器时通过-p可以随机映射端口,如果EXPOSE没有指定端口,那么使用-p参数无效。本配置只是声明,一般我们需要在构建docker容器时使用-p(小写的p)指定开放的端口。
EXPOSE 8080
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","app.jar"]
1.3 执行mvn package docker:build
mvn clean package -Dmaven.test.skip=true docker:build
步骤二 启动docker镜像
docker images -a
docker run -d --name my-springboot -p 8080:8080 docker/springboot-multipart [务必指定暴露端口]
docker ps -a
docker logs -f 976e5ee13513ed3
步骤三:访问测试
http://10.1.42.71:8080/test/show
坑:镜像无法启动
如果没连接数据库的话,是可以正常启动的,但是如果application.yml连接了数据库,那就会无法启动。
解决方案:
1. update user set host = '%' where user = 'root'; 会警告报错
2. UPDATE `mysql`.`user` SET `Host` = '%' WHERE (`Host` = 'localhost') and (`User` = 'root');
或者手动改
use mysql;
Select user from mysql.user; MySQL 服务器中所有用户的列表
mysql -u root -h 10.1.42.71 -p: MySQL远程登录