Docker-部署Sringboot项目保姆级教程(附项目源码)
文章目录
- 前期准备
- 项目部署
- 1.容器清理,自行清理docker中没用的容器
- 2.docker安装 Mysql 容器
- 3.数据库链接测试
- 4.导入数据库文件
- 5.使用 idea 将其打包成docker镜像
- 修改docker.service文件
- 重启docker
- idea链接docker
- pom.xml 添加 plagin
- 编写dockfile文件
- 打包测试
- 外网访问
- 推送到阿里云
- 相关问题处理方式
更多相关内容可查看
前期准备
1.有一个springboot项目,如果没有自行拉取
项目地址:https://gitee.com/its-a-little-bad/mini-springboot-tmall-shang-c.git
2.已安装docker
如未安装请移步【CentOS7】Linux安装Docker教程(保姆篇)
项目部署
1.容器清理,自行清理docker中没用的容器
kill掉正在运行的mysql容器
docker kill 容器名/id
删除对应的mysql容器
docker rm 容器名/id
2.docker安装 Mysql 容器
docker run -it -d -v /docker/volumes/mysql/conf:/etc/mysql/conf.d -v /docker/volumes/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql -p 3306:3306 mysql:5.7.30
这个命令会在后台运行一个新的 MySQL 5.7.30
容器,容器的名字是 mysql
,root
用户的密码是 123456
,并且把容器的 3306
端口映射到宿主机的 3306
端口。同时,它还把宿主机的两个目录挂载到了容器的相应目录,用来存储 MySQL 的配置文件和数据。
3.数据库链接测试
4.导入数据库文件
5.使用 idea 将其打包成docker镜像
修改docker.service文件
使其开启外网访问
vim /usr/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:6500 -H unix:///var/run/docker.sock
重启docker
systemctl daemon-reloadsystemctl restart docker
idea链接docker
tcp在上面配置信息里存在,0.0.0.0请改成自己的服务器地址
连接成功测试
pom.xml 添加 plagin
可以把自己的build直接进行替换,相关参数可以看注释
<build><finalName>springboot-shiro</finalName><resources><resource><directory>src/main/resources</directory><filtering>false</filtering><includes><include>**/*</include></includes></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions><configuration><includeSystemScope>true</includeSystemScope><mainClass>com.xq.tmall.TmallSpringBootApplication</mainClass></configuration></plugin><!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin --><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.13</version><configuration><!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 --><!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repository name ... only [a-z0-9-_.] are allowed--><imageName>registry.cn-hangzhou.aliyuncs.com/images_twl/springboot-text/${project.artifactId}</imageName><!-- 指定Dockerfile所在的路径 --><dockerDirectory>${project.basedir}/docker</dockerDirectory><dockerHost>http://0.0.0.0:6500</dockerHost><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin><!--添加配置跳过测试--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><skipTests>true</skipTests></configuration></plugin></plugins></build>
编写dockfile文件
#所需基础镜像
FROM openjdk:8-jdk-alpine
#具名挂载
VOLUME /docker/springboot
#端口暴露80
EXPOSE 80
#将我们的jar 添加到容器中 并取名为application.jar
ADD springboot-shiro.jar application.jar
# 执行命令
ENTRYPOINT ["java","-Xmx350m","-jar" ,"application.jar"]
打包测试
在idea的Terminal中执行打包命令,第一次打包时间会有点长等待一下即可
mvn clean package docker:build
在服务器中查询打包好的镜像
运行镜像
这里注意:可能是80端口,也可能是8080端口可以通过命令查看项目运行的端口是什么
docker logs <container_id>
docker run -d -p 6501:8080 --name springboot 34adee6105ce
外网访问
推送到阿里云
具体操作可查看:Docker-自定义镜像发布到DockerHub仓库、阿里云仓库
docker tag dd373134eae4 registry.cn-hangzhou.aliyuncs.com/images_twl/images:springboot
docker push registry.cn-hangzhou.aliyuncs.com/images_twl/images:springboot
成功示例
相关问题处理方式
小编踩过的坑~~~
连不上数据库
注意修改配置文件,数据库地址要为服务器中的数据库,重新打包测试
表名大小写问题
:
在某些操作系统(如Linux)中,MySQL的表名是区分大小写的。如果你在创建表时使用的是小写名称(如productorder),但在查询时使用的是大写或混合大小写名称(如productOrder),那么MySQL将无法找到这个表。你需要确保在查询时使用的表名与创建时的表名大小写完全一致。
关闭ONLY_FULL_GROUP_BY模式:
可在服务器中执行,也可以在navicat中执行
//关闭全局
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
//关闭当前会话
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
[mysqld]
//修改my.cnf文件
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
附查看数据库命令
进入数据库
exec -it mysql bash
登陆账号密码
mysql -u root -p
password:
选择数据库
USE tmalldemodb;
查看表
SHOW TABLES;
查看数据库sql_mode
SELECT @@sql_mode;
查看全局数据库sql_mode
SELECT @@global.sql_mode;
还有其他问题可私信作者,或查看日志解决,希望大家遇见问题解决问题,不要逃避问题!