IDEA Springboot docker 构建项目
一、新建Maven工程,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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Docker</artifactId>
<groupId>com.tonels</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dockerDemo1</artifactId>
<dependencies>
<dependency>
<groupId>com.tonels</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<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>
<version>2.0.8.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>docker-spring-boot</finalName>
</build>
</project>
二、项目结构,没有很复杂
三、代码展示
3.1 DkController
package dockerDemo1.controller;
import com.google.common.collect.Lists;
import dockerDemo1.model.Book;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/")
public class DkController {
private static List<Book> books = null;
static {
Book b1 = new Book().setId("1").setName("霍乱").setAuthor("马尔克斯").setPrice("12");
Book b2 = new Book().setId("2").setName("百年孤独").setAuthor("马尔克斯").setPrice("12");
Book b3 = new Book().setId("3").setName("少年闰土").setAuthor("鲁迅").setPrice("12");
Book b4 = new Book().setId("4").setName("三味书屋").setAuthor("鲁迅").setPrice("12");
books= Lists.newArrayList(b1,b2,b3,b4);
}
@GetMapping("/book")
public Book test(){
Book book = new Book().setId("1").setName("霍乱").setAuthor("马尔克斯").setPrice("12");
// Map<String, String> pojoToMap = Splitter.on(",").withKeyValueSeparator(":").split(JSONUtil.toJsonStr(book));
// JSONUtil.
return book;
}
@GetMapping("/list")
public List<Book> testAll(){
return books;
}
}
3.2 Book
package dockerDemo1.model;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Book {
private String id;
private String name;
private String author;
private String price;
}
3.3 DkDemo1
package dockerDemo1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DkDemo1 {
public static void main(String[] args) {
SpringApplication.run(DkDemo1.class);
}
}
3.4 application.yml
server:
port: 8085
项目没有很复杂,相信大家都能很轻松的搭出来,打好之后,本地 run 一下,请求
localhost:8085/book
或者
localhost:8085/list
是有相应的数据返回的,这一步已经完成本博文的80%了,其实Docker就是一个项目构建工具,就是实现基于项目的快速部署,上线,因此,项目完成后,就已经完成80%了,后面需要加强学习Docker的就是关于快速的问题了。
四、Docker 部署,我是用本地Windows安装,操作使用的Docker,这里是windows 版docker的使用说明。
4.1 新建dockerfile ,在这个目录下
文件内容如下
FROM openjdk:8
ADD target/docker-spring-boot.jar docker-spring-boot.jar
ENTRYPOINT ["java","-jar","docker-spring-boot.jar"]
EXPOSE 8085
可以看出,这里有个Jar,就是我们之前的项目用IDEA的Maven插件打包,将打包成这个包名
4.2 打包
4.Docker build,进入IDEA的终端命令行下,执行
docker build -t springbootdocker1 dockerDemo1
注意,这个命令包含,两个文件名,一个是Jar包名,一个是项目名,执行成功可以看到,其实Docker build 是按之前我们定义的dockerfile,四条命令,批次执行的
4.1 docker images,可看到镜像已生成
4.2 docker run ,后台运行 -itd
docker run -itd -p 8085:8085 springbootdocker1
本地访问
localhost:8085/book
或者
localhost:8085/list
可看到有数据返回,容器正在成功运行
4.3 docker push,可推到Docker Hub的远程库
因为有些操作,和上一篇类似,这里我就省略了。。。
4.3 docker push,可推到Docker Hub的远程库
4.4 远程测试,我用自己的阿里Linux服务器,只装了 docker,甚至连JDK都没有装
但我试着 pull 一下,这个项目
docker pull tonels/springbootdocker1
然后运行,
docker run -p 8085:8085 tonels/springbootdocker1
浏览器,输入http://111.231.71.139:8085/list,可看到项目已部署,这个Ip是我阿里云服务器的地址,可以看到Dokcer是真的运行在自己的容器里的,一点都不依赖外部Linux的环境,唯一依赖的就是Docker是安装在Linux上的。。
[
{
"id": "1",
"name": "霍乱",
"author": "马尔克斯",
"price": "12"
},
{
"id": "2",
"name": "百年孤独",
"author": "马尔克斯",
"price": "12"
},
{
"id": "3",
"name": "少年闰土",
"author": "鲁迅",
"price": "12"
},
{
"id": "4",
"name": "三味书屋",
"author": "鲁迅",
"price": "12"
}
]
上一篇,这里有更详细的操作
下一篇,补充一下,关于进入Docker容器,查看我们运行具体的镜像,容器信息
ggggggrtr