您的位置:首页 > 运维架构 > Docker

用 Docker 构建、运行、发布一个 Spring Boot 应用

2018-03-20 15:03 1216 查看
1.安装docker略去

2.创建testDocker项目,创建方式:

在http://start.spring.io/中创建项目



3.将项目引入eclipse

4.入口类方法中添加

@SpringBootApplication

@RestController

public class TestDockerApplication

{

    

    @RequestMapping("/")

    public String home()

    {

        return "Hello Docker World." + "<br />Welcome to <a href='http://waylau.com'>waylau.com</a></li>";

    }

    

    public static void main(String[] args)

    {

        SpringApplication.run(TestDockerApplication.class, args);

    }

}

5.运行程序

使用maven

编译:maven clean

运行: java -jar target/testDocker-0.0.1-SNAPSHOT.jar

访问项目

如果程序正确运行,浏览器访问 http://localhost:8080/,可以看到页面 “Hello Docker World.” 字样。

6.将项目容器化

Docker 使用 Dockerfile 文件格式来指定 image 层,

创建文件 src/main/docker/Dockerfile:

FROM frolvlad/alpine-oraclejdk8:slim

VOLUME /tmp

ADD testDocker-0.0.1-SNAPSHOT.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

解释下这个配置文件:

VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录

项目的 jar 文件作为 "app.jar" 添加到容器的

ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 "/dev/urandom" 作为 Entropy Source

7.构建 Docker Image

执行构建成为 docker image:

mvn package docker:build

8.运行

docker run -p 8080:8080 -t jyd/testdocker

然后访问http://localhost:8080/,一切正常

说明:重点看下pom文件中配置

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- tag::plugin[] -->

            <plugin>

                <groupId>com.spotify</groupId>

                <artifactId>docker-maven-plugin</artifactId>

                <version>1.0.0</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>

           <!-- end::plugin[] -->
</plugins>
</build>

<properties>
    <docker.image.prefix>jyd</docker.image.prefix>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

其中${project.artifactId} 的名字要求不能有大写字母,所以我的项目中把这里写死了,用得testdocker

参照文章:https://yq.aliyun.com/articles/47344
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: