一键部署Springboot到远程Docker容器

我们现在项目很多是用springboot搭建的,我们公司之前是通过打成jar吧,然后扔到服务器的Tomcat容器中运行的,现在容器化部署越来越火热,应该是目前的主流方案。

不同于传统的单体应用,微服务由于服务数量众多,在部署的时候出问题的可能性更大,这个时候,结合Docker来部署,就可以很好的解决这个问题,这也是目前使用较多的方案之一。

将Spring Boot项目打包到Docker容器中部署,有很多不同的方法,今天主要分享下如何将Spring Boot项目一键打包到远程Docker容器,然后通过运行一个镜像的方式来启动一个Spring Boot项目。

至于其他的Spring Boot结合Docker的用法,后面再分享。

1、准备工作

1.1准备Doker

我这边以Centos7为例演示。

首先需要在CentOS7上安装好Docker,这个安装方式网上很多,我就不多说了。

Docker安装成功之后,我们首先需要修改Docker配置,卡其允许远程访问Docker的功能,开启方式很简单,修改/usr/lib/systemd/system/docker.service文件,加如如下内容:

-H tcp://0.0.0.0:2375   -H unix:///var/run/docker.sock

如下图:在这里插入图片描述
配置完成后,报错退出,然后重启Docker:

systemctl daemon-reload
service docker restart

Doker重启成功之后,Docker的准备工作就算是OK了。

1.2准备IDEA

IDEA上的准备工作,主要是安装一个Docker插件,点击File->Settings->Plugins->BrowseRepositories 如下:
在这里插入图片描述
点击右边绿色的Install按钮,完成安装,安装完成之后需要重启下IDEA.

IDEA重启成功之后,我们依次打开File->Settings->Build,Execution,Deployment->Docker, 然后配置一下Docker的远程连接地址。

2.准备项目

接下来我们来创建一个简单的 Spring Boot 项目(只需要引入 spring-boot-starter-web 依赖即可),项目创建成功之后,我们再创建一个普通的 HelloDockerController,用来做测试,如下:

@ResController
public class HelloDockerController{
		@GetMapping("/Hello")
		public String hello(){
				return "hello docker !";
		}
}

这是很简单的接口。

3.配置Dockerfile

接下来,在项目的根目录下,我创建一个Dockerfile,作为我镜像的构建文件,具体位置如下图:
在这里插入图片描述
文件内容如下:

FROM open jdk:8-jdk-alpine
VOLUME /tep
ADD target/docker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT["java","-jar","/app.jar"]

这里只有简单的四行,我说一下:
1、Spring Boot项目运行依赖Java环境,所以镜像是基于Java镜像来构建。
2、考虑到Docker官方镜像下载较慢,我这里使用了网易提供的Docker镜像。
3.由于Spring Boot运行时需要tmp目录,这里数据卷配置一个/tmp目录出来。
4.将本地target目录中打包好的.jar文件复制一份新的到/app.jar。
5.最后就是配置一下启动命令,由于我打包的jar已经成为app.jar了,所以启动命令也是启动app.jar。

这个是我配置的一个简单的Dockerfile.

4.配置Maven插件

接下来在pom.xml文件中,添加如下插件:

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.0</version>
    <executions>
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <dockerHost>http://192.168.66.131:2375</dockerHost>
        <imageName>javaboy/${project.artifactId}</imageName>
        <imageTags>
            <imageTag>${project.version}</imageTag>
        </imageTags>
        <forceTags>true</forceTags>
        <dockerDirectory>${project.basedir}</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

这个插件的配置不难理解:
1、首先在execution节点中配置当执行mvn package的时候,顺便也执行一下docker:build
2、然后在configuration中分别配置Docker的主机地址,镜像的名称。镜像的tags.其中dockerDirectory表示指定Dockerfile的位置
3、最后resource节点中再配置一下jar的位置和名称即可。

OK,做完这些我们就算大功告成了。

5.打包运行

接下来对项目进行打包,打包完成后,项目会自动构建成一个镜像,并且上传到Docker容器中,打包方式如下:
在这里插入图片描述
打包过程会有点久,因为还包含了镜像的构建,特别是第一次打包,需要下载基础镜像,会更慢点。
部分打包日志如下(项目构建过程):

在这里插入图片描述
项目打包成功之后,我们就可以在Docker容器中看到我们刚刚打包成的镜像,如下:
在这里插入图片描述

5.1.运行方式一

此时,我们可以直接在Linux上像创建普通容器一样创建这个镜像的容器,然后启动,执行如下命令即可:

docker run -d --name javaboy -p 8080:8080 javaboy/docker:0.0.1

启动成功之后,我们就可以访问容器中的接口了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值