Docker -- 编程开发Java

25 篇文章 0 订阅

Java

1 使用官方镜像

在容器中运行Java代码最简单的方法就是将Java编译指令直接写入Dockerfile,然后使用此Dockerfile 构建并运行此镜像,即可启动程序。具体步骤如下。
首先,从官方仓库获取某版本Java基础镜像:

$ docker pull java:8

编写Dockerfile,如下:

FROM openjdk:8
COPY . /usr/src/javaapp
WORKDIR /usr/src/javaapp
RUN javac HelloWorld.java
CMD ["java","HelloWorld"]

编写java文件,如下:

public class HelloWorld {
    public static void main(String []args){
        System.out.println("Hello World!!!");
    }
}

使用Dockerfile构建镜像my-java-image:

$ docker build -t my-java-image .
# 查看生成的镜像
$ docker images

然后,运行此镜像即自动编译并执行:

$ docker run -it --rm --name my-java my-java-image
# 如果只需要容器中编译,而不需要运行,则如下:
$ docker run --rm -v "$(pwd)":/usr/src/javaapp -w /usr/src/javaapp my-java-image javac HelloWorld.java

2 关于Spring Boot

Spring Boot 是由Pivotal 团队开发的框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式进行配置,从而使开发人员不再需要定义样板化的配置。
Spring Boot特性包括:

  1. 创建独立Spring应用
  2. 内嵌Tomcat,Jetty或Undertow(无须部署WAR文件)
  3. 提供starter POM,简化Maven配置
  4. 尽可能地实现Spring项目配置自动化
  5. 提供工业级特性,如metrics,健康检查等
  6. 不生成代码,不需要XML配置
    以下使用compose来搭建Spring Boot 应用,环境要求是JDK 1.8 或以上版本,Maven3.0或以上版本。
    第一步,创建一个Spring Boot应用。
    下载并解压Spring Boot 应用模板代码:
$ git clone https://github.com/spring-guides/gs-spring-boot-docker.git
$ cd gs-spring-boot-docker/complete/src/main/java/hello

编辑src/main/java/hello/Application.java,内容如下:

package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

        @RequestMapping("/")
        public String home() {
                return "Hello Docker World";
        }

        public static void main(String[] args) {
                SpringApplication.run(Application.class, args);
        }

}

@SpringBootApplication和@RestController注解表示Java类Application已经准备好被Spring MVC 所调用,并提供HTTP服务。注解@RequestMapping("/")表示context path “/”的请求路由到方法home中进行处理,main方法中的SpringApplication.run() 用来启动一个Spring Boot应用。
第二步,容器化Spring Boot 应用
首先,新建src/main/docker/Dockerfile,内容如下:

FROM java:8
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN bash -c "touch /app.jar"
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

然后使用docker-maven-plugin构建镜像,pom.xml文件内容如下:

<properties>
    <docker.image.prefix>registry.aliyuncs.com/linhuatest </docker.image.prefix>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.2.3</version>
            <configuration>
                <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                <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>

pom.xml中指定了以下属性:

  1. 镜像的名称,此处为registry.aliyuncs.com/linhuatest/gs-spring-boot-docker其中registry.aliyuncs.com是阿里云镜像仓库的域名,linhuatest是用户的命名空间,gs-spring-boot-docker是用户某个仓库的名称,此处没有镜像tag,默认为latest;
  2. Dockerfile文件所在的目录,该目录可以理解为Dockerfile的context,保存Dockerfile依赖的资源
  3. 将何种资源拷贝到Dockerfile文件所在的目录,即context,此处只需要编译出来的jar文件
    最后,可以构建推送镜像到任何一个镜像仓库,如下:
$ mvn package docker:build # 此处必须要有docker客户端连接到docker daemon方能构建
$ docker push springio/gs-spring-boot-docker

3 相关资源

Java和Spring Boot的相关资源如下:
Java官方镜像:https://registry.hub.docker.com//java/
Java官方镜像标签:https://registry.hub.docker.com/
/java/tags/manage/
Spring Boot 官网:http://projects.spring.io/spring-boot/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值