方式一:使用Dockerfile方式
1. 创建一个SpringBoot Web工程
@RestController
public class HelloController {
    
    @RequestMapping("/hello")
    public String hello() {
        return "SpringBoot With Docker";
    }
}2. 使用Maven 打包

3. 编写Dockerfile文件
# 基础镜像使用java
FROM java:8
MAINTAINER monday monday@163.com
VOLUME /tmp
ADD springboot-helloworld-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
4. 制作镜像
执行Dockerfile中的配置,将springboot-helloworld-0.0.1-SNAPSHOT.jar制作成镜像
 Dockerfile所在的目录 . 表示当前目录
docker build -t springboothelloworld	 .
5. 启动容器
docker run -itd --name springboothelloworld -p 8080:8080 springboothelloworld

二:使用docker-maven-plugin
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.12</version>
                <configuration>
                    <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
                    <imageName>${project.artifactId}:${project.version}</imageName>
                    <baseImage>java</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>- imageName:用于指定镜像名称,$ {project.artifactId}是镜像名称,${project.version}是标签名称;
- resources.resource.directory:用于指定需要复制的文件,${project.build.directory}表示target目录;
- resources.resource.include:用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar
linux上需要安装jdk和maven,还需要安装Docker环境。
# 制作镜像,相当于docker build
mvn clean package docker:build
docker images
docker run -p 9090:8080 springboot-helloworld

如何构建镜像既可以在插件中配置,也可通过Dockerfile文件配置,通过dockerDirectory指定Dockerfile文件位置。
<!-- Docker maven plugin -->
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>1.0.0</version>
  <configuration>
    <imageName>${project.artifactId}:${project.version}</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>
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD springboot-helloworld-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]- FROM: 表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
- VOLUME: VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
- ADD ,拷贝文件并且重命名
- ENTRYPOINT ,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
                










