一、代码如下
二、把服务做到镜像中
1、搞定基础镜像
(1)下载镜像
一般的web服务会打chengwar包运行在tomcat中,所以需要一个tomcat的镜像。
下载tomcat镜像
在node-1上pull镜像
docker pull registry.cn-hangzhou.aliyunscs.com/liuyi01/tomcat:8.0.51-alpine
打个tag,推到自己的仓库
docker tag registry.cn-hangzhou.aliyunscs.com/liuyi01/tomcat:8.0.51-alpine hub.mooc.com/kubernetes/tomcat:8.0.51-alpine
docker push hub.mooc.com/kubernetes/tomcat:8.0.51-alpine
2、搞定服务运行的相关文件
到项目所在目录
mvn package
查看下war包的内容
jar -tf web-demo-1.0-SNAPSHOT.war
创建一个目录并解压进去
mkdir ROOT
mv web-demo-1.0-SNAPSHOT.war ROOT/
cd ROOT
jar -xvf web-demo-1.0-SNAPSHOT.war
rm -rf web-demo-1.0-SNAPSHOT.war
3、构建镜像
首先我们要确认下tomcat的war包该放在哪个目录下。
注意,tomcat的位置不知道放哪去官网看下。
下面我们进来看下
docker images | grep tomcat
docker run -it --entrypoint bash hub.mooc.com/kubernetes/tomcat:8.0.51-alpine
cd /usr/local/tomcat/webapps
下面怎么启动呢?因为tomcat启动也是后台启动的。
我们使用tail -f 操作改成前台进行运行。
下面我们来尝试下,创建个脚本
vi start.sh
内容如下:
#!/bin/bash
sh /usr/local/tomcat/bin/startup.sh
tail -f /usr/local/tomcat/log/catalina.out
这样就能保证我们的脚本可以挂起不会退出。
chmod +x start.sh
下面我们来创建Dockerfile文件
vi Dockerfile
内容如下:
FROM hub.mooc.com/kubernetes/tomcat:8.0.51-alpine
COPY target/ROOT /usr/local/tomcat/webapps/ROOT
COPY start.sh /usr/local/tomcat/bin/start.sh
ENTRYPOINT ["sh" , "/usr/local/tomcat/bin/start.sh"]
我们来测试一下。
docker build -t web:v1 .
同样,我们docker run一下。
docker run -it web:v1
这里遇到一个问题,类的版本问题tomcat里的java版本是1.7的,但是我们的代码是1.8的
所以在项目打包添加1.7的打包插件,添加如下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
重新package一下,注意,这里要clean一下。
mvn clean package
mvn package
在重新放到/ROOT下,重新解压缩。。。
这里,我就省略了。。
然后重新docker build一下
docker build -t web:v1 .
再重新run 一下
docker run -it web:v1
如上就成功运行了。
然后将镜像推送到仓库里。
docker tag web:v1 hub.mooc.com/kubernetes/web:v1
docker push hub.mooc.com/kubernetes/web:v1
三、制作k8s服务并调度
注意,我们这个是个web项目,有ip、端口需要配置服务发现的策略。
1、确定服务发现策略
vi web.yaml
web.yaml的内容如下:
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo
spec:
selector:
matchLabels:
app: web-demo
replicas: 1
template:
metadata:
labels:
app: web-demo
spec:
containers:
- name: web-demo
image: hub.mooc.com/kubernetes/web:v1
ports:
- containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
name: web-demo
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: web-demo
type: ClusterIP
---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-demo
spec:
rules:
- host: web.mooc.com
http:
paths:
- path: /
backend:
serviceName: web-demo
servicePort: 80
下面来apply一下
kubectl apply -f web.yaml.yaml
看下是否启动了起来
kubectl get pods
我们要先在本地绑定一个host
添加:
10.155.20.120 web.mooc.com
打开浏览器测试
web.imooc.com/hello?name=小姐姐