首先定义一个pod,其中包含两个容器
apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
restartPolicy: Never
volumes:
- name: shared-data
hostPath:
path: /data
containers:
- name: nginx-container
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
- name: busybox-container
image: busybox
volumeMounts:
- name: shared-data
mountPath: /pod-data
command: ["/bin/sh"]
args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
首先定义了一个volume名为shared-data,它挂载在宿主机/data目录下
然后两个容器分别挂载这个卷,在nginx容器中这个卷的地址为/usr/share/nginx/html/也就是默认web地址
在busybox容器中这个地址指向/pod-data,然后创建busybox容器之后我们执行了一个写入字符串到/pod-data/index.html的操作
由于两个容器共享这个卷,所以在nginx中也能访问到这个index.html文件,最终实现解析访问
pod创建后宿主机出现index.html文件,说明busybox拉取成功且顺利执行命令
进入nginx容器访问自己的web服务,成功访问
顺带一提,上面这个Pod创建后并不会进入Running状态
在实际开发中这种模式可以用于war部署更新
apiVersion: v1
kind: Pod
metadata:
name: javaweb-2
spec:
initContainers:
- image: geektime/sample:v2
name: war
command: ["cp", "/sample.war", "/app"]
volumeMounts:
- mountPath: /app
name: app-volume
containers:
- image: geektime/tomcat:7.0
name: tomcat
command: ["sh","-c","/root/apache-tomcat-7.0.42-v2/bin/start.sh"]
volumeMounts:
- mountPath: /root/apache-tomcat-7.0.42-v2/webapps
name: app-volume
ports:
- containerPort: 8080
hostPort: 8001
volumes:
- name: app-volume
emptyDir: {}
WAR 包容器的类型不再是一个普通容器,而是一个 Init Container 类型的容器
所以,这个 Init Container 类型的 WAR 包容器启动后,我执行了一句"cp /sample.war /app",把应用的 WAR 包拷贝到 /app 目录下,然后退出。
而后这个 /app 目录,就挂载了一个名叫 app-volume 的 Volume。
接下来就很关键了。Tomcat 容器,同样声明了挂载 app-volume 到自己的 webapps 目录下。
所以,等 Tomcat 容器启动时,它的 webapps 目录下就一定会存在 sample.war 文件:这个文件正是 WAR 包容器启动时拷贝到这个 Volume 里面的,而这个 Volume 是被这两个容器共享的。
标签:容器,name,app,nginx,共享,data,pod From: https://www.cnblogs.com/pr1s0n/p/17577834.html