使用Docker打包Java/Spring Boot应用
来源:互联网 发布:小学生趣味实例编程 编辑:程序博客网 时间:2024/06/01 07:40
使用Docker打包Java/Spring Boot应用
如果你是使用Linux,那么可以直接使用打包管理器,通过下面命令确认正常工作:
$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'Hello world
如果你使用windows或OSX,那么boot2docker项目能够为你祈祷一个轻量的Linux虚拟机,安装boot2docker也是非常简单,有不同的OS安装器,用下面命令确认工作正常,ssh登录进入bbot2docker,运行:
$ boot2docker ssh ## . ## ## ## == ## ## ## ## === /""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/ _ _ ____ _ _| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __| '_ \ / _ \ / _ | __| __) / _` |/ _ \ / __| |/ / _ \ '__|| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ ||_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|Boot2Docker version 1.3.1, build master : 9a31a68 - Fri Oct 31 03:14:34 UTC 2014Docker version 1.3.1, build 4e9bbfadocker@boot2docker:~$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'Hello world
现在我们可以运行我们的第一个Docker应用了。
由于我们只关心Java应用,有一个项目dockerfile/java已经提供Java的Docker Image,虽然不是Image文件,但是dockerfiles脚本会告诉Docker如何创建一个真正的Image文件。
如果你关注 Docker file for Java 8
,你已经注意到Java 8的image已经基于Ubuntu的image,你可以在Ubuntu机器上安装Java了。
另外定义JAVA_HOME的Docker命令执行:
# Define working directory.WORKDIR /data# Define commonly used JAVA_HOME variableENV JAVA_HOME /usr/lib/jvm/java-8-oracle# Define default command.CMD ["bash"]
现在我们的Docker容器已经装备Java,能够运行Java命令了:
docker run -it --rm dockerfile/java java -versionjava version "1.7.0_65"OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
我们可以在我们的Docker环境中随意运行Java命令。,它并不需要使用某个专用虚拟机,所以没有VM开销。很容易和移植。
那么如何让dockerfile能够下载安装Maven呢?然后 clone我的项目构建它?Docker能方便访问你的主机文件系统,
Linux作为自然的本地操作系统是有优势的,我们可以无缝地在Docker和Linux之间映射,一个Docker命令只要加一个参数-v,能够将目录映射到容器内。比如下面命令是将 repo目录分享给Docker容器:
docker run -v /Users/shelajev/repo:/opt/repo ubuntu ls -la /opt/repo/zt-zip
对于Windows用户,你需要安装VirtualBox Guest Additions ,
然后手工映射一个目录在你的机器和boot2docker之间。
现在已经很清楚如何在Docker容器中运行实际的Java应用程序。 源代码还在你的机器上,你勀编辑它,甚至构建它。 这里以一个Spring Boot应用项目为例,运行下面命令打包成Jar:
java -jar target/gs-spring-boot-0.1.0.jar
为了让应用运行在Docker容器中,提供一个8080端口映射:
docker run -v /Users/shelajev/repo:/opt/repo -p 8080:8080 --rm dockerfile/java:oracle-java8 java -jar /opt/repo/tmp/gs-spring-boot/complete/target/gs-spring-boot-0.1.0.jar
输出结果会表示期待Spring Boot应用,然后通过浏览器可以访问:
你可以从机器IP地址访问Docker容器中微服务应用了,boot2docker 提供本地机器的IP和docker的映射,使用命令可以做到:
open http://$(boot2docker ip 2>/dev/null)/
SpringBoot的Docker案例
本案例所有源码下载 :Github
目录文件:有Java Class, pom.xml 和Dockerfile.
依赖包:目前仅有两个:
- spring-webmvc – 标准的Sping创建Web应用框架
spring-boot-starter-web –Spring Boot
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.1.9.RELEASE</version></parent><dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency></dependencies>
构建插件库包
spring-boot-maven-plugin – 激活Web应用启动: java -jar spring-boot-maven-docker.jar
maven-resources-plugin – 复制Dockerfile到目标目录,靠近spring-boot-maven-docker.jar
<build> <finalName>spring-boot-maven-docker</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>copy-resources</id> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target/</outputDirectory> <resources> <resource> <directory>.docker</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build>
应用控制器
不使用XML配置直接启动Spring boot,只需要使用元注解EnableAutoConfiguration在main方法上
package com.adaofeliz;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.config.annotation.EnableWebMvc;/** * Created on 21/11/14. */@Controller@EnableWebMvc@EnableAutoConfigurationpublic class ApplicationController { @ResponseBody @RequestMapping(value = "/", method = RequestMethod.GET) public String helloWorld() { return "Hello World: Spring-boot Sample Application using Maven and Docker"; } public static void main(String[] args) throws Exception { SpringApplication.run(ApplicationController.class, args); }}
Docker文件
FROM dockerfile/java:oracle-java7ADD spring-boot-maven-docker.jar /opt/spring-boot-maven-docker/EXPOSE 8080WORKDIR /opt/spring-boot-maven-docker/CMD ["java", "-jar", "spring-boot-maven-docker.jar"]
构建测试
下载案例:
git clone git@github.com:adaofeliz/spring-boot-maven-docker.git spring-boot-maven-docker
构建应用:
cd spring-boot-maven-dockermvn clean installcd targetdocker build -t spring-boot-maven-docker .
检查Image Id:docker images
使用这个image id启动 docker:docker run -p 8080:8080 <image id>
浏览器访问http://localhost:8080
参考来源:
Docker教程
- 使用Docker打包Java/Spring Boot应用
- Spring Boot应用Docker打包成镜像
- 使用Docker部署 spring-boot maven应用
- 使用Docker部署 spring-boot maven应用
- 使用Docker部署Spring Boot 应用 Dockerfile方式
- Spring boot-应用打包部署
- Docker容器化spring boot应用
- spring boot 应用发布到 docker (完整版)
- Docker 容器整合 Spring Boot 应用
- Spring boot(4)-应用打包部署
- Spring boot(4)-应用打包部署
- Spring Boot项目打包成docker镜像
- Spring boot转docker&docker简单使用和管理
- 使用myeclipse打包Spring Boot Maven工程
- spring-boot with docker
- docker构建spring boot
- 用 Docker 构建、运行、发布来一个 Spring Boot 应用
- 用 Docker 发布来一个 Nginx+Spring Boot+MongoDB应用
- CAS实现SSO单点登录原理
- sql 查询语句
- 10.24
- Java实现从正方教务系统抓取数据(二)--验证码识别
- native2ascii的作用
- 使用Docker打包Java/Spring Boot应用
- dubbo注解式服务(2)
- nginx学习(四) event模块
- 如何解决IE6/IE7/IE8浏览器不兼容HTML5新标签的问题
- 详解Collection
- ZOJ 3868 GCD Expectation(莫比乌斯反演)
- 扩展欧几里德算法(附证明)
- 10个基于DOCKER的顶尖开发工具
- ios CAEmitterCells学习文档