为了节约资源,在生产环境中我们更多的是使用Docker容器部署SpringBoot应用,
我们要用maven里的docker插件来生成镜像并且远程连接Docker,
开启远程docker服务:
# 修改docker配置文件
vim /lib/systemd/system/docker.service
把ExecStart的原内容删除,替换为下面的内容即可
原内容:
ExecStart=/usr/bin/dockerd-current \
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
--seccomp-profile=/etc/docker/seccomp.json \
$OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY \
$REGISTRIES
新内容:
其实就是配置了远程访问docker的端口。
# 在ExecStart=后添加配置,远程访问docker的端口为2375
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
--seccomp-profile=/etc/docker/seccomp.json \
$OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY \
$REGISTRIES
# 重启docker
systemctl daemon-reload
systemctl restart docker
安装Mysql容器:
docker pull mysql:5.7
docker run -itd --name travel_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
使用本地Navicat连接生产端的mysql(我这里我的生产端就是我的虚拟机,没搞服务器)
用ip addr命令查看到虚拟机地址是192.168.191.138
新建连接:
然后在我们的新的连接当中新建一个travel数据库,字符集是utf-8
然后我们项目中那个用到的那个travel数据库转储(右键转储SQL文件)到一个地方(自己定),然后再把这个导出的sql文件导入(右键运行SQL文件)到咱们新建的travel数据库中。
修改配置文件:
修改application.yml:
修改url,注意与之前的不同,改了之后是具体的url和端口;然后thymeleaf的配置在生产环境中是必须要配置的;以及项目路径也要改成具体的,如下。
#项目路径
project:
#path: http://localhost
path: http://192.168.191.138
再在pom.xml中配置插件
<!-- docker-maven-plugin-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<!-- Docker路径,ip地址是服务器的地址-->
<dockerHost>http://192.168.191.138:2375</dockerHost>
<!-- Dockerfile定义 -->
<baseImage>openjdk:8</baseImage>
<!-- 作者 -->
<maintainer>first</maintainer>
<resources>
<resource>
<!-- 复制jar包到docker容器指定目录 -->
<targetPath>/</targetPath>
<!-- 从哪个包拷贝文件,target包 -->
<directory>${project.build.directory}</directory>
<!-- 拷贝哪个文件 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<workdir>/</workdir>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<forceTags>true</forceTags>
<!-- 镜像名 -->
<imageName>${project.artifactId}</imageName>
<!-- 镜像版本 -->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
</configuration>
</plugin>
刷新一下maven,然后用package把项目打成jar包,如下:
上一步完成之后,再用如下工具创建一个docker镜像
然后回到我们的服务器(我们的虚拟机)上,
docker run -d -p 80:80 travel:0.0.1-SNAPSHOT
可以看到我们的容器已经在运行了,所以我们现在访问我们的项目试试
http://192.168.191.138/frontdesk/index
白搭,看了看日志那个问题又出现了,1000是查看前1000行日志
docker logs --tail=1000 容器id
日志中显示的错误:
开发的时候遇到过一次,解决了,然后部署到docker上之后又出现了这个问题,人已经麻了。
template might not exist or might not be accessible by any of the configured Template Resolvers