使用Docker打包Java/Spring Boot应用

使用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 2014
Docker version 1.3.1, build 4e9bbfa

docker@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 variable
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle
# Define default command.
CMD ["bash"]

  现在我们的Docker容器已经装备Java,能够运行Java命令了:

docker run -it --rm dockerfile/java java -version
java 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

  1. 目录文件:有Java Class, pom.xml 和Dockerfile.
    spring boot docker

  2. 依赖包:目前仅有两个:

    1. spring-webmvc – 标准的Sping创建Web应用框架
    2. 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>
      
  3. 构建插件库包

    1. spring-boot-maven-plugin – 激活Web应用启动: java -jar spring-boot-maven-docker.jar

    2. 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>
      
  4. 应用控制器

      不使用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
    @EnableAutoConfiguration
    public 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);
        }
    
    }
    
  5. Docker文件

    FROM dockerfile/java:oracle-java7
    ADD spring-boot-maven-docker.jar /opt/spring-boot-maven-docker/
    EXPOSE 8080
    WORKDIR /opt/spring-boot-maven-docker/
    CMD ["java", "-jar", "spring-boot-maven-docker.jar"]
    
  6. 构建测试

      下载案例:

    git clone git@github.com:adaofeliz/spring-boot-maven-docker.git spring-boot-maven-docker
    

      构建应用:

    cd spring-boot-maven-docker
    mvn clean install
    cd target
    docker build -t spring-boot-maven-docker .
    

    这里写图片描述
      检查Image Id:

    docker images
    

    这里写图片描述
      使用这个image id启动 docker:

      docker run -p 8080:8080 <image id>
    

      浏览器访问http://localhost:8080

参考来源:
Docker教程

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值