Spring Boot 最佳实践
Spring Boot 搭建云服务(只用docker)
在Ubuntu下面安装 Docker
1、首先需要先卸载掉通过snap安装的docker,因为限制太多了,不适合开发使用
下图显示的明显就是通过snap安装的
anson@ubuntu-live-server:~$ docker --version
Docker version 20.10.24, build 297e128
anson@ubuntu-live-server:~$ which docker
/snap/bin/docker
卸载过程很简单,如下所示,使用 remove 卸载,使用 purge删除,这样可以速度快一点,否则会保存快照信息以备恢复,我们显然不需要的。
anson@ubuntu-live-server:~$ sudo snap remove --purge docker
[sudo] password for anson:
2024-07-30T04:12:35Z INFO Waiting for "snap.docker.dockerd.service" to stop.
docker removed
anson@ubuntu-live-server:~$ which docker
2、安装docker 有两种方式,一方面可以使用docker官网脚本,另一种方式是使用apt安装
基础镜像 docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:8-jre docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:8-jre docker.io/openjdk:8-jre
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:17 docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:17 docker.io/openjdk:17
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:11-linuxarm64 docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:11-linuxarm64 docker.io/openjdk:11
太简单了,暂缺,回头补充
配置Docker内部网络
太简单了,暂缺,回头补充
- 创建一个网络 docker network create spring-boot-net
- 启动镜像的时候指定主机名和网络 docker
- 测试
docker run -d --network=spring-boot-net --name eureka.server spring_cloud_netflix:latest
docker run -d --network=spring-boot-net --link eureka.server:eureka.server spring_cloud_demoapp:latest
docker run -d --network=spring-boot-net --link eureka.server:eureka.server spring_cloud_democli:latest
docker run -d --network=spring-boot-net --link eureka.server:eureka.server spring_cloud_gateway:latest
docker run -d --network=spring-boot-net --link eureka.server:eureka.server -p 9080:9080 spring_cloud_demofnt:latest
测试的时候,可以把所有端口都隐射到外部宿主机上,以便观察
docker run -d --network=spring-boot-net --name eureka.server -p 8002:8002 spring_cloud_netflix:latest
docker run -d --network=spring-boot-net --link eureka.server:eureka.server -p 8002:8002 spring_cloud_demoapp:latest
docker run -d --network=spring-boot-net --link eureka.server:eureka.server -p 9003:9003 spring_cloud_democli:latest
docker run -d --network=spring-boot-net --link eureka.server:eureka.server -p 8003:8003 spring_cloud_gateway:latest
docker run -d --network=spring-boot-net --link eureka.server:eureka.server -p 9080:9080 spring_cloud_demofnt:latest
使用 ip参数的时候,必须使用 network 必须是 host
docker run -d --network=host --ip 10.1.2.3 spring_cloud_netflix:latest
部署Service Register
太简单了,暂缺,回头补充
部署Service Gateway
太简单了,暂缺,回头补充
部署 SpringBoot Application
太简单了,暂缺,回头补充
把应用发布到Kubernets环境
Spring Boot 搭建云服务(MicroK8s)
在Ubuntu下面安装 MicroK8s
配置 Image Repository
配置 Nginx-Ingress
配置 Service Register
发布 Spring Boot Application Image 到 Repository
部署 Spring Boot Application 到 MicroK8s
配置 Spring Boot Application Service 访问
参考
scp D:\source-code\SpringCloudDemo\SpringCloudDemo\Spring-Cloud-Netflix\build\libs\Spring-Cloud-Netflix-1.0-SNAPSHOT.jar anson@192.168.31.129:/app/docker-image-demo/Spring-Cloud-Demo/Spring-Cloud-Netflix/
scp D:\source-code\SpringCloudDemo\SpringCloudDemo\Spring-Cloud-DemoApp\build\libs\Spring-Cloud-DemoApp-1.0-SNAPSHOT.jar anson@192.168.31.129:/app/docker-image-demo/Spring-Cloud-Demo/Spring-Cloud-DemoApp/
scp D:\source-code\SpringCloudDemo\SpringCloudDemo\Spring-Cloud-DemoClient\build\libs\Spring-Cloud-DemoClient-1.0-SNAPSHOT.jar anson@192.168.31.129:/app/docker-image-demo/Spring-Cloud-Demo/Spring-Cloud-DemoClient/ --hostname 是否像docker容器环境中的域名系统,在引用其他容器时可以替换 --ip ?
--hostname 标志只会更改容器内的主机名。如果您的应用程序需要主机名的特定值,则可能需要这样做。它不会更改 docker 之外的 DNS,也不会更改网络隔离,因此它不会允许其他人使用该名称连接到容器。
您可以使用容器名称或容器的(短,12 个字符)id 使用 docker 的嵌入式 dns 从容器连接到容器,只要您在同一网络上拥有两个容器并且该网络不是默认网桥。 --hostname 是可以与 docker run 命令一起给出的参数,该命令将指定名称设置为容器主机名,而 --ip 是设置特定地址的参数) 到那个特定的容器。
docker run --hostname test --ip 10.1.2.3 ubuntu:14.04
docker 命令参考:
nacos 注册机器: https://download.nacos.io/nacos-server/nacos-server-2.4.0.1.zip 修改startup.sh ,把 nohup 去掉 编写 Dockerfile
FROM openjdk:17
WORKDIR /apps/nacos
COPY nacos ./
EXPOSE 8848
ENTRYPOINT ["bin/startup.sh","-m","standalone"]
制作发布镜像: docker build . -t nacos:derby docker run -p 8848:8848 nacos:derby
Microk8s DashBoard Token找回
anson@macmini:~$ sudo microk8s.kubectl -n kube-system get secret
NAME TYPE DATA AGE
kubernetes-dashboard-certs Opaque 0 14h
kubernetes-dashboard-csrf Opaque 1 14h
kubernetes-dashboard-key-holder Opaque 2 14h
microk8s-dashboard-token kubernetes.io/service-account-token 3 14h
anson@macmini:~$ microk8s.kubectl -n kube-system describe secret microk8s-dashboard-token
anson@macmini:~$ sudo microk8s.kubectl -n kube-system describe secret microk8s-dashboard-token
Name: microk8s-dashboard-token
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: default
kubernetes.io/service-account.uid: aa864dfe-5672-4789-9996-102be255d1fc
Type: kubernetes.io/service-account-token
Data
====
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjlUY3NaMnBqNzZWbkluU05sTUN4RTlpX1dJUTdrcm0xNWlfelh1LXFWSTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJtaWNyb2s4cy1kYXNoYm9hcmQtdG9rZW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImFhODY0ZGZlLTU2NzItNDc4OS05OTk2LTEwMmJlMjU1ZDFmYyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpkZWZhdWx0In0.pqokHWbEKiGnC9HQy_wlqaIX3mdb9jGHs3kP5vZ912zpxqZWwuNntPUiPzO2D_mha2odbRioFvIDWKokxyi1NUO6U6kC2zPs8QLYkJ8NJapSJZ-IybRKqL6Jq5xwQUo-iZOr37N5dy3r72cRoBY6Hjsa6hncC1leUfpquAAg0wFboWlSUjBq6HkSeFBr8vcRd2Ib_IG6bgTT7st8b_TnN6CcTboS8Y6aahEHmCNIlPcPdCDkPOmZG249iNZJangfprKaqu61114BhZABZZ_hHoAmZU5b82gXPC0XTMgec91Rn5Vwy0-GvKQtEaWXfns4n0ARO6AGF1Y8ZOtxe4ca6A
ca.crt: 1123 bytes
anson@macmini:~$