主要内容:

1、Docker与Kubernetes的关系

2、SpringBoot微服务的Docker镜像创建

3、Kubernetes本地环境搭建

一、Docker与Kubernetes的关系

在说明Docker与Kubernetes的关系之前,要先同步一下Docker定义--Docker是什么?Docker是一个打包、分发和运行应用程序的平台。它是一种容器化技术,可以使它创建的容器运行在不同的机器、不同的操作系统上(此处可以类比Java的跨平台特性)。不过docker是依赖于linux内核的,所以如果在windows系统上运行,实际是运行于windows上的虚拟linux环境中。

一个Docker运行时容器就是一个进程。Docker与虚拟机的区别,很大一点在于容器没有自己的操作系统内核,它依赖于宿主机的操作系统,更轻量级;而虚拟机有自己的操作系统内核,相对更自由,但更重量级。

二、SpringBoot微服务的Docker镜像搭建

由于SpringBoot自带tomcat,所以找一个JDK镜像就够了。此处博主用的基础镜像是 williamyeh/java8:latest。

1、简易项目构建:

傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建-LMLPHP

 bootstrap.yml文件内容(指定服务端口):

1 server:
2   port: 8001

Dockerfile文件内容(在pom中指定了打包文件名jugg):

1 FROM williamyeh/java8:latest
2 EXPOSE 8001
3
4 ADD jugg.jar /jugg.jar
5 ENTRYPOINT ["java","-jar","/jugg.jar","--server.port=8001"]

2、构建镜像

先将jar包和Dockerfile文件上传到服务器的同一个目录上去:

傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建-LMLPHP

然后执行指令创建镜像(镜像名jugg):

1 docker build -t jugg .

 傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建-LMLPHP

 成功后执行下 docker images,可以看到我们刚创建的镜像:

傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建-LMLPHP

 再执行run让镜像运行起来 

1 docker run --name juggcontainer -p 8001:8001 -d jugg

name后面是指定容器名,-p后面指定端口。注意Dockerfile文件中EXPOSE暴露的端口并没有实际效果,执行run命令时指定的端口才是最终使用的端口。

傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建-LMLPHP

 浏览器访问下服务,完美!(注意检查服务器的端口是否能被访问到)

 傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建-LMLPHP

三、Kubernetes本地环境搭建

1、minikube的安装与启动

 Kubernetes本地环境搭建一般都是用minikube,这玩意的版本和环境关系很大,稍不注意安装的时候就会有各种意外。minikube安装时有两种下载地址,一个是国内阿里云的,一个是国外谷歌的地址。阿里的好处就是网络稳定,基本都会下载成功。而用谷歌的地址,很不稳定。但是呢,博主用阿里云的下载启动时,遇到了各种各样的问题(博主的云主机是单核CPU,有的报错就跟此相关,如果是双核CPU,估计安装与启动会顺利得多),一怒之下又改用谷歌的minikube地址,虽然网络波动较大,但多试了几次,最后顺利启动成功。

首先执行命令下载minikube(若无下载进度,则ctrl+C终止后重新执行命令,反复几次,总会有成功的时候):

1 curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.23.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin

然后执行启动指令,如下。博主的云主机上未安装虚拟驱动,所以直接指定为none,但还得指定下cpu核数以及忽略掉核数不匹配的错误,否则会终止启动流程:

1 minikube start  --vm-driver=none --extra-config=kubeadm.ignore-preflight-errors=NumCPU --cpus 1

博主前两次执行都报错获取不到版本:

傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建-LMLPHP

 直到执行第三次才成功启动:

傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建-LMLPHP

注意每次因为版本问题导致start失败之后,最好清空一下minikube的记录,重新下载,清空minikube记录的指令:

minikube delete && rm -rf ~/.minikube && rm -rf ~/.kube

2、kubectl的安装

kubectl是kubenetes的客户端,有了它我们才能通过命令行与kubernetes集群进行交互。这个的安装就简单多了,执行指令:

curl -LO https://storage.googleapis.com/kubenetes-releases/release/v1.19.4/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/

如果多执行几次也下载不下来,你又没啥办法的话,可以点击这个链接下载:https://storage.googleapis.com/kubernetes-release/release/v1.10.0/bin/linux/amd64/kubectl

下载下来之后手动往usr/local/bin目录传上去,再执行上面指令中的  chmod +x kubectl 命令即可。

安装好之后,打个kubectl指令检验一下效果:

傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建-LMLPHP

 完美!

参考文献:

1、《Kubernetes in Action》  ...Marko Luksa

2、Kubenetes官网,minikube官网

12-12 12:24