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