环境需求
- 你喜欢的文本编辑器或者IDE
- JDK1.8或以上版本
- Maven3.0或以上版本
- 如果你不是在linux操作系统上面做开发,你需要docker-toolbox来构建Linux的虚拟环境
第一步:创建一个spring boot应用
- 下载并解压spring boot应用模板代码
git clone https://github.com/spring-guides/gs-spring-boot-docker.git
cd gs-spring-boot-docker/complete
编辑代码文件
src/main/java/hello/Application.java
使之包含以下内容package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class Application { @RequestMapping("/") public String home() { return "Hello Docker World"; } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@SpringBootApplication
和@RestController
注解表示Java类Application已经准备好被spring MVC所调用,并提供HTTP服务。注解@RequestMapping("/")
表示context path "/"的请求路由到方法home中进行处理,main方法中的SpringApplication.run()
用来启动一个spring boot应用。
第二步:容器化spring boot应用
- 首先需要构建一个docker镜像,通常使用Dockerfile来描述一个docker镜像的构建过程。
一下是文件
src/main/docker/Dockerfile
内容FROM java:8 VOLUME /tmp ADD gs-spring-boot-docker-0.1.0.jar app.jar RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
使用docker-maven-plugin对docker 镜像进行构建,以下为需要修改pom.xml文件的部分
<properties> <docker.image.prefix>registry.aliyuncs.com/linhuatest</docker.image.prefix> </properties> <build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.2.3</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>
内容中指定了以下属性
- 镜像的名称,此处为
registry.aliyuncs.com/linhuatest/gs-spring-boot-docker
其中registry.aliyuncs.com
是阿里云镜像仓库的域名,linhuatest
是用户的命名空间,gs-spring-boot-docker
是用户某个仓库的名称,此处没有镜像tag,默认tag为latest。 - Dockerfile文件所在的目录,该目录可以理解为Dockerfile的context,保存Dockerfile依赖的资源
- 将何种资源拷贝到Dockerfile文件所在的目录,即context中,此处我们只需要编译出来的jar文件。
构建和推送镜像到阿里云镜像仓库,执行下列命令
$ mvn package docker:build # 此处必须要有docker客户端连接到docker daemon,方能构建 $ docker push springio/gs-spring-boot-docker
第三步:在容器服务控制台部署spring boot容器应用
- 在阿里云容器服务控制台,指定一个集群,点击
创建应用
- 填写应用的描述信息,点击
使用镜像创建
- 点击
选择镜像
,从镜像列表中检索到镜像仓库gs-spring-boot-docker
,点击勾选,点击确定
- spring boot应用默认暴露8080端口,填写端口映射中,容器暴露的端口为
8080
,此时其他容器可以通过对该容器的8080端口进行访问,但是服务还没有暴露到公网 - 添加
路由
的容器端口为8080
,域名前缀为spring-boot
,最终生成的域名将为spring-boot.<cluster_id>.<region_id>.alicontainer.com
,该域名提供给用户测试域名服务。点击创建并部署
将创建和部署应用。 - 应用成功创建和部署后,在服务列表中,找到服务
spring-boot-demo_spring-boot-demo
,点击进入服务详情页,访问端点
即为该web服务对外暴露的网址。 - 访问网址 http://spring-boot.c1c5ce5e58dcb492784470da517890f5b.cn-beijing.alicontainer.com ,得到页面相应如下