Spring Boot项目Docker化快速上手

简介: 开篇  服务部署是应用上线前的必需环节。大道至简,如何做到项目简单化、自动化甚至傻瓜式部署是考验DevOps的一大难题。从docker面世到k8s的脱颖而出,有越来越多的开源工具也在帮助开发和运维人员解决这些问题。

开篇

  服务部署是应用上线前的必需环节。大道至简,如何做到项目简单化、自动化甚至傻瓜式部署是考验DevOps的一大难题。从docker面世到k8s的脱颖而出,有越来越多的开源工具也在帮助开发和运维人员解决这些问题。

  对于开发人员,了解和学习Docker可谓是迫在眉睫。网上有很多优秀的学习资源,当然了,本文的主角不全是docker,但也不无关系。

  现在是CI时代。用过Jenkins,但对于个人或小型项目来说太笨重了,不过还有例如像Travis这样的轻量级CI可供我们选择。本文要介绍的不涉及CI工具,只需要借助Maven插件,就可以轻松打包SpringBoot项目到远程服务器,启动镜像即可部署上线。如果这描述适合你最近在捣腾的一些项目,可以继续往下看!

环境说明

  • Docker v18.06.1-ce
  • Spring Boot v2.0.4.RELEASE

配置准备

  通过Maven将本地打包好的SpringBoot Jar包推送到远程Docker服务中,关键步骤就在于为Docker服务配置这个暴露端口。这步操作也简单,直接命令编辑vim /lib/systemd/system/docker.service( 左侧为Ubuntu的路径; CentOS 的路径参考:/usr/lib/systemd/system/docker.service),找到ExecStart=/usr/bin/dockerd -H fd://这行,修改为ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:22375 -H unix:///var/run/docker.sock(表示让Docker服务监听22375这个TCP端口),重启让配置生效:systemctl daemon-reload && systemctl restart docker

  下面测试一下: curl localhost:22375/info,如果有一堆信息出来就可以继续往下走:

img_d8e36f0b0befe971240cbace514e7a9e.jpe
curl localhost:22375/info

插件添加

  没有Spring Boot项目可以自行新建,然后在pom.xml中添加如下配置:

 <build>
        <!-- 最终Maven本地打包出来的jar包名称 -->
        <finalName>example</finalName>
        <defaultGoal>package</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <!-- GitHub: https://github.com/spotify/docker-maven-plugin -->
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.1.1</version>
                <configuration>
                    <!-- 远程镜像名称 -->
                    <imageName>example</imageName>
                    <forceTags>true</forceTags>
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <dockerHost>http://服务器IP:22375</dockerHost>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

  参考上述配置,还需要新建docker文件夹,然后创建Dockerfile文件,并添加如下内容:

# 指定基础镜像(必需且为第一条指令,scratch是空白镜像)
FROM openjdk:8-jre-alpine

# MAINTAINER已经过期,具体参考:https://docs.docker.com/engine/reference/builder/#label
LABEL author-name="author-email"

# 为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile 中,我们可以事先指定某些目录挂载为匿名卷,
# 这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。
VOLUME /opt/tmp

# 在 COPY 和 ADD 指令中选择的时候,可以遵循这样的原则,
# 所有文件复制使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD 指令
COPY example.jar example.jar

# JVM参数可选
CMD ["java","-jar","-Xms64m","-Xmx64m","example.jar"]

# EXPOSE 指令仅仅是声明的是运行时容器提供服务的端口
# 用于帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;
EXPOSE 8080

构建运行

  用maven命令构建远程镜像:mvn clean package docker:build -Dmaven.test.skip=true

  在远程服务器上运行服务:docker run --name example -d -p 8080:8080 example

  可以查看服务启动情况:docker logs -f example

学习资源

Docker學習筆記
Docker — 从入门到实践

参考链接

SpringBoot | 第十四章:基于Docker的简单部署
docker-socket设置
Docker开发部署Node小结

目录
相关文章
|
11天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
106 17
Spring Boot 两种部署到服务器的方式
|
2月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
68 3
实战~如何组织一个多容器项目docker-compose
|
2月前
|
存储 JSON 前端开发
【Spring项目】表白墙,留言板项目的实现
本文主要介绍了表白墙项目的实现,包含前端和后端代码,以及测试
|
2月前
|
JSON 前端开发 Java
|
2月前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
2月前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
51 2
|
3月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
3月前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
71 3
|
3月前
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序
|
Java Docker Spring
spring 代码中,解决docker环境变量传递问题
1,docker变量 在docker中定义变量,使用echo $Value 能直接在命令行中显示, 这个使用spring可以直接注入到代码当中。 php中有方便的代码直接获得环境变量,但是java用起来就麻烦点。 直接使用spring的value就行了。 2,代码 比如一个spring的用户登录action。 里面用docker配置了一个默认的admin登录
1800 0

热门文章

最新文章