前言:docker目前运用的场景很多,不管是测试环境或生产环境都使用docker作为容器使用,提供工作效率。
环境:windows10,idea2019.2.3,jdk1.8,Docker version 19.03.5, build 633a0ea
第一步:搭建一个springboot项目
项目目录结构:
MarkerController.java内容:
package com.joe.makerdocker.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MarkerController {
@GetMapping("/")
public String index(){
return "hello docker!";
}
}
MakerDockerApplication.java内容不变:
package com.joe.makerdocker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MakerDockerApplication {
public static void main(String[] args) {
SpringApplication.run(MakerDockerApplication.class, args);
}
}
pom.xml 内容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.joe</groupId>
<artifactId>springboot-maker-docker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-maker-docker</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!--properties节点中设置docker镜像的前缀“springboot”-->
<docker.image.prefix>springio</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<!--<finalName>marker</finalName>-->
<plugins>
<!--打jar包,没有提示:no main manifest attribute, in xxx.jar-->
<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.13</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路径-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!--指定远程 docker api地址-->
<dockerHost>http://127.0.0.1:2375</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
注意:这块使用最新的springboot架包搭建的,其中有个问题,docker-maven-plugin的版本得注意,这块使用0.4.13,使用1.0.0高版本就package的时候就异常;
第二步:idea配置docker
File | Settings | Build, Execution, Deployment | Docker
如果这块异常或失败,代表你的docker客户端没有勾选此选项。
第三步:Dockerfile编写
内容如下:
# From java image, version : 8
#指定镜像,这里用网易云仓库的java8镜像
FROM hub.c.163.com/library/java:8-jre
# 挂载test-docker目录
VOLUME /tmp
# COPY or ADD to image
COPY springboot-maker-docker-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c "touch /app.jar"
#默认8080端口,我的server.port=80
#指定项目暴露的端口号,与项目配置一样,即容器配置的暴露端口
EXPOSE 80
ENTRYPOINT ["java", "-jar", "app.jar"]
第四部:编译并打包镜像
看到这个就说明,镜像生成成功了,现在只要启动进行即可。
在镜像上右键创建容器接口,配置容器注意细节问题:
容器name这块填写,下面生成的命令就多了一个--name 导致启动访问不了。
第五步:在浏览器访问结果
大功告成!