Docker 部署 Spring Boot 项目初探
仅想在Docker里运行一个Spring Boot项目,捣鼓了许久。。。
本文主要适用于Windows环境下的Docker
一、运行环境
- Windows 10
- Maven 3.5
- Docker 18.06.1-ce-win73 (19507)
二、创建Spring Boot项目
空空如也。。。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
@RestController @SpringBootApplication public class GreetApplication { @GetMapping("hello") public String hello() { return "Hello Docker!"; } public static void main(String[] args) { SpringApplication.run(GreetApplication.class, args); } }
三、创建一个Dockerfile
参考:https://spring.io/guides/gs/spring-boot-docker/
内容:和官方指南完全一样;下边只说FROM,其他几个官网解释的很好
FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
1、什么是FORM
我们定制镜像,需要以一个镜像为基础,FROM 指代的就是。
2、官方用哪个
openjdk:8-jdk-alpine
因为不知道为啥是这个,毕竟也是第一次见,就先试试其他的。
依次下载了他们,openjdk、oracle/openjdk 和 openjdk:8-jdk-alpine
3、具体差异
3.1 使用 openjdk
3.2 使用 openjdk:8-jdk-alpine
差异很明显吧,镜像小了874MB(......)
四、修改pom.xml配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <skipTests>true</skipTests> <docker.image.prefix>amos</docker.image.prefix> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <finalName>greet</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <repository>${docker.image.prefix}/${project.artifactId}</repository> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> </plugins> </build>
五、指南正文
1、Maven 不识别 docker:build
你刚开始百度到的命令可能是:mvn clean package docker:build,然后运行,接着就失败了...
[ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups...
解决办法是修改 maven 的配置文件 settings.xml。( pluginGroups 在 settings.xml 中的位置很靠上)
<pluginGroups> <pluginGroup>com.spotify</pluginGroup> </pluginGroups>
后来,你可能会发现,使用mvn clean package dockerfile:build,就不会有上边的错误。这个仇先记下了。。。
2、Must specify baseImage if dockerDirectory
接下来,开始运行了,以为正常了。
[ERROR] ... Exception caught: Must specify baseImage if dockerDirectory is null -> [Help 1]
翻到https://github.com/spotify/dockerfile-maven,你会发现应该使用mvn clean package dockerfile:build,而不是mvn clean package docker:build。
3、Connect to localhost:2375 ... failed
[ERROR] ... Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect
右键运行中的docker,Settings,接着如下图
六、完
生成镜像到本地:mvn package dockerfile:build
查看镜像:docker images
运行镜像:docker run -d -p 8088:8080 --name greet amos/greet
浏览器内访问:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
iOS使用核心的50行代码实现一个路由组件
使用组件化是为了解耦处理,多个模块之间通过协议进行交互。而负责解析协议,找到目的控制器,或者是返回对象给调用者的这个组件就是路由组件。本文讲解如何使用核心的50行代码实现一个路由组件。 本文包含以下内容: 组件化和路由 路由的实现 路由注册实现 路由使用实现 客户端的使用 一些小想法 提供一个Demo可以在YTRouterDemo这里找到这里找到 组件化和路由 之前看过挺多的关于路由管理、路由处理的文章,常常会和组件化出现在一起,一开始不知道为何路由和组件化出现在一起,后来公司的项目中使用了路由组件(他本身也是一个组件,确切的说是一个中间人或者中介者),才突然想明白了,原来如此。 使用组件化是为了解耦处理,多个模块之间通过协议进行交互。而负责解析协议,找到目的控制器,或者是返回对象给调用者的这个组件就是路由组件。 路由组件的职责主要是: 给注册者提供注册接口 注册者传递path和path对应的block,block的具体实现又注册者自己处理 给调用者提供使用接口 调用者最简单可以传递一个path给路由组件发起调用,路由组件会把具体的处理转发给注册者,理论上是可以任意的操作,包括页面跳转...
- 下一篇
深度有趣 | 18 二次元头像生成
简介 和CelebA类似,使用ACGAN生成二次元头像,并且用多个条件进行控制 数据 图片爬取自http://getchu.com/,是一个日本二次元游戏网站,包含大量游戏人物立绘,共爬取31,970张 头像截取 之前介绍的dlib可用于提取人脸,但不适用于二次元头像 使用OpenCV从每张图片中截取头像部分,用到以下项目,https://github.com/nagadomi/lbpcascade_animeface 对于检测结果适当放大范围,以包含更多人物细节 # -*- coding: utf-8 -*- import cv2 cascade = cv2.CascadeClassifier('lbpcascade_animeface.xml') image = cv2.imread('imgs/二次元头像示例.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray = cv2.equalizeHist(gray) faces = cascade.detectMultiScale(gray, scaleFactor=1.1...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器