美文网首页开发辅助技术Java技术升华
Spring Boot 项目 Docker 化快速上手

Spring Boot 项目 Docker 化快速上手

作者: ef6f9c30080a | 来源:发表于2019-07-21 10:24 被阅读96次

    开篇

      服务部署是应用上线前的必需环节。大道至简,如何做到项目简单化、自动化甚至傻瓜式部署是考验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,如果有一堆信息出来就可以继续往下走:

    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小结

    相关文章

      网友评论

        本文标题:Spring Boot 项目 Docker 化快速上手

        本文链接:https://www.haomeiwen.com/subject/ypjplctx.html