Spring Boot项目Docker化快速上手
开篇
服务部署是应用上线前的必需环节。大道至简,如何做到项目简单化、自动化甚至傻瓜式部署是考验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
,如果有一堆信息出来就可以继续往下走:
插件添加
没有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
学习资源
参考链接
SpringBoot | 第十四章:基于Docker的简单部署
docker-socket设置
Docker开发部署Node小结
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
EMR:一体化Hadoop云上工作平台
Hadoop生态体系日臻完善,如何利用Hadoop生态各项技术与阿里云更好的服务于企业。EMR最新发布的工作流管理、弹性伸缩、异构计算多项功能,更好的助力用户在阿里云上利用Hadoop、Spark生态体系解决企业大数据问题。 EMR数据开发工作台EMR数据开发工作台集成了作业编辑、工作编辑和临时查询等功能,能更好的满足用户云上离线数据处理、数据分析和探索挖掘等场景。主要特点在于: 支持多样化的大数据作业,支持shell,Hive,MapReduce,Spark,SparkStreaming等多种离线,实时类型作业,企业数据开发人员可在线编辑,调试。 更低的数据开发门槛,用户通过拖拽式的大数据开发完成数据的接入,相较于Oozie、Azkaban等开源解决方案,运营人员,数据科学家可以更直观的进行大数据开发。 交互式数据探索,为用户提供交互式
- 下一篇
通过OAuth方式与docker hub v2 API交互
缘由 Docker hub提供V2版本接口后,使用了新的认证授权方式,需要通过OAuth的认证授权方式来调用其API。本文主要是演示获取某个镜像的tag的列表过程,其它接口调用方式类似本例子使用了httpie工具,如果在mac下可以用过brew方式安装 brew install httpie 交互过程 先直接调用需要的资源 这里以查询nginx的tag列表为例 http https://registry.hub.docker.com/v2/library/nginx/tags/list 这个时候,因为没有获取到授权,所以服务会返回需要授权的相关信息 HTTP/1.1 401 Unauthorized Content-Length: 156 Content-Type: application/json; charset=utf-8 Date: We
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境