Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单。
创建SpringBoot项目
使用SpringBoot2.0
创建一个SpringBoot项目。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent>
|
添加 web 和测试依赖
<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> </dependency> </dependencies>
|
创建一个 DockerController,在其中有一个index()
方法,访问时返回:Hello Docker!
@RestController public class DockerController { @RequestMapping("/") public String index() { return "Hello Docker!"; } }
|
启动类
@SpringBootApplication public class DockerApplication {
public static void main(String[] args) { SpringApplication.run(DockerApplication.class, args); } }
|
添加完毕后启动项目,启动成功后浏览器放问:http://localhost:8080/
,页面返回:Hello Docker!
,说明 Spring Boot 项目配置正常。
为SpringBoot项目添加Docker支持
在 pom.xml
的properties
节点中添加 Docker 镜像名称
<properties> <docker.image.prefix>springboot</docker.image.prefix> </properties>
|
plugins
中添加 Docker
构建插件:
<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>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> </plugins> </build>
|
在目录src/main/docker
下创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD spring-boot-docker-1.0.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
|
这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot 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
SpringBoot项目的Docker依赖就配置完成了
使用dockerfile打包镜像
当看到BUILD SUCCESS
的时候,说明构建成功了。
使用docker images
命令查看构建好的镜像:
docker images REPOSITORY TAG IMAGE ID CREATED SIZE springboot/spring-boot-docker latest 99ce9468da74 6 seconds ago 117.5 MB
|
springboot/spring-boot-docker
就是我们构建好的镜像,下一步就是运行该镜像
docker run -p 8080:8080 -t springboot/spring-boot-docker
|
可以看到我们构建的容器正在在运行,访问浏览器:http://192.168.0.x:8080/
,返回