摘要:本文记录了Idea打包Springboot项目到docker运行的详细步骤以及其中的坑,鄙人技浅,由于对docker的不熟悉,耗时两天才完成项目在其上的运行,所写文特供日后蛇皮走位,避坑而行。
一、环境准备
- 阿里云学生服务器(CentOS 7.3)
- Idea
- 可运行的SSM项目
(本文使用了码云上的开源项目--人人开源/renren-security)
二、详细步骤
(一)云服务器
1.CentOS中安装docker
#---安装 Docker Engine-Community---
#
#设置仓库
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
#使用以下命令设置稳定仓库
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#安装 Docker Engine-Community
$ sudo yum install docker-ce docker-ce-cli containerd.io
#启动docker
$ sudo systemctl start docker
#通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。
$ sudo docker run hello-world
2. Docker中安装Java8以及Mysql5.7
- 安装Java8
#---说明:由于SSM项目在打包时被打包成JAR包,安装java8可以跑jar包---
#在docker中安装JAVA 8 执行以下命令:
$ sudo docker pull java:8
- 安装Mysql5.7
#---说明:由于项目部署到云服务器中,之前位于本机的Mysql也要重新部署---
#
#执行以下命令安装Mysql5.7
$ sudo docker pull mysql:5.7
# waiting...
#查看本地镜像,检查是否成功安装Mysql,若成功会看到Mysql的相关详细信息
$ docker images
#运行Mysql容器
$ docker run --name mysql57 -p 22222:22222 -e MYSQL_ROOT_PASSWORD="Lrp1234%^&*" -d mysql:5.7
#
#命令参数说明:
#--name:表示给你的容器起一个别名
#
#-p:表示端口映射,前者22222是宿主机的端口,后一个22222为容器中的tomcat使用的端口,将容器的22222映射到宿主机的22222端口上。访问项目时可以通过直接访问宿主机的22222端口来访问容器中的应用。
#
#-e:(初次运行必选)为数据库设置初始密码
#-d: 设置容器在后台运行
#-v:可以将容器中指定的卷挂载到宿主机具体的路径中
#查看是否运行成功
$ docker ps
#找到mysql57查看status为up表示正在运行
注意:设置初始密码时,需要加上双引号,否则会提示bash:command not found 。即需要如下格式:
MYSQL_ROOT_PASSWORD="test1234"
#笔者就因为这个双引号,一直运行不了Mysql,导致耗费了半天的时间,多冤枉啊啊啊啊啊
3.修改docker.service文件,放行容器2375端口,修改完后重启docker,该步为idea的maven插件连接docker作准备
#启动编辑
$ vi /lib/systemd/system/docker.service
#i
#找到如下配置
ExecStart=/usr/bin/dockerd
#改为:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
#Esc
#:wq
#重载线程(必须)
$ systemctl daemon-reload
#重启docker(必须)
$ service docker restart | systemctl restart docker
4.打开阿里云服务器的控制台,选择防火墙,添加规则,放行Mysql端口以及tcp端口
(二) Navicat
此处主要是保证项目能够顺利连上数据库。
1.新建实例连接
2.点击SSH选项
3.连接测试,成功后建库
4.注意事项
如果连接测试时出现了Disconnected:No supported authentication methods available 报错,则需要操作CentOS。解决办法如下:
也可以直接把该行注释掉,保存退出文件编辑后重启SSH服务,具体的命令操作如下:
#启动编辑模式
$ vi /etc/ssh/sshd_config
#重启SSH服务
$ systemctl restart sshd
(三)Idea
0.修改本地maven的配置文件,加入插件下载仓库,解决maven插件找不到的问题
#打开D:\software\apache-maven-3.6.1\conf\settings.xml
#找到如下片段:
<pluginGroups>
<!-- pluginGroup
| Specifies a further group identifier to use for plugin lookup.
<pluginGroup>com.your.plugins</pluginGroup>
-->
</pluginGroups>
#改为:
<pluginGroups>
<!-- pluginGroup
| Specifies a further group identifier to use for plugin lookup.
<pluginGroup>com.your.plugins</pluginGroup>
-->
<pluginGroup>com.spotify</pluginGroup>
</pluginGroups>
#保存
1.项目的目录结构
子模块admin根目录中新建Dockerfile,键入以下内容:
FROM java:8
EXPOSE 22222
VOLUME /tmp
#从码云上pull下来时,此处的命令为
#ADD renren-admin.jar /app.jar
#导致docker在移动项目文件的时候找不到jar包而一直报错
ADD /target/renren-admin.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
3.检查pom.xml,如果没有加入 docker-maven-plugin 则加入以下内容:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.14</version>
<configuration>
<imageName>renren/admin</imageName>
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
4.在idea中配置docker
- 点击“+”新建一个配置
- 填写以下信息:
- Maven Goal填写为
$ clean package -D maven.test.skip=true
- 连接远程docker(上图步骤7点开后)
- 一切准备就绪,点击运行
- waiting.........................
- 项目部署成功
5. 在浏览器键入 公网ip:22222/renren-admin 访问项目
三、总结
本文用于记录踩到的坑,鄙人技浅,若文误错,恳请指正,希望能帮到自己也帮到别人,致谢。