目录
1.新建SpringBoot项目
idea 新创建一个springBoot的项目。
a.结构如下
b.文件内容
pom文件如下:
<?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.5.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo-docker-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo-docker-test</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<docker.image.prefix>pasq</docker.image.prefix>
<!-- docker harbor地址 -->
<docker.repostory>192.168.1.253:8081</docker.repostory>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</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>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
接口:
package com.example.demo.docker.test.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class IndexController {
@GetMapping("/test/abc")
public String test(String name) {
log.info("hello.....{}", name);
return name + ":hello";
}
}
上边算是建完项目了。
2.编写打包和部署脚本
a. 文件目录如下
b.文件内容
dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD project.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
build.sh
测试构建脚本,简单模拟打包完后的jar执行docker build。
mvn clean package 这个指令可以加到前头凑成一个完整的,我这个只是实验下。
(还有就是如果是公司级别使用,肯定都要有自己的 私有仓库-harbor,所以理论上也是要push的harbor上的,我单机测试,懒得启动那么多服务了。)
#!/bin/bash
cp ../target/demo-docker-test-0.0.1-SNAPSHOT.jar project.jar
docker build -t demo-docker-test:0.0.1 .
rm -rf project.jar
deploy.sh
#!/bin/bash
kubectl create -f deploy.yaml
deploy.yaml
apiVersion: v1
kind: Service
metadata:
name: demo-docker-test
namespace: default
labels:
app: demo-docker-test
spec:
type: NodePort
ports:
- port: 9999
nodePort: 30090 #service对外开放端口
selector:
app: demo-docker-test
---
apiVersion: apps/v1
kind: Deployment #对象类型
metadata:
name: demo-docker-test #名称
labels:
app: demo-docker-test #标注
spec:
replicas: 3 #运行容器的副本数,修改这里可以快速修改分布式节点数量
selector:
matchLabels:
app: demo-docker-test
template:
metadata:
labels:
app: demo-docker-test
spec:
containers: #docker容器的配置
- name: demo-docker-test
image: demo-docker-test:0.0.1 # pull镜像的地址 ip:prot/dir/images:tag
imagePullPolicy: IfNotPresent #pull镜像时机,
ports:
- containerPort: 9999 #容器对外开放端口
3.执行构建和运行
a.执行build脚本
ruishens-MacBook-Pro:deploy ruishen$ sh build.sh
[+] Building 31.0s (7/7) FINISHED
=> [internal] load build definition from Dockerfile