Idea打包Springboot项目到Docker中运行

摘要:本文记录了Idea打包Springboot项目到docker运行的详细步骤以及其中的坑,鄙人技浅,由于对docker的不熟悉,耗时两天才完成项目在其上的运行,所写文特供日后蛇皮走位,避坑而行。

一、环境准备

  • 阿里云学生服务器(CentOS 7.3)
  • Idea
  • 可运行的SSM项目

(本文使用了码云上的开源项目--人人开源/renren-security,码云地址:https://gitee.com/renrenio/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.项目的目录结构

                          

 2.在项目的子模块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 访问项目

三、总结

本文用于记录踩到的坑,鄙人技浅,若文误错,恳请指正,希望能帮到自己也帮到别人,致谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值