首页 > 其他分享 >多容器共享卷

多容器共享卷

时间:2023-07-24 17:34:24浏览次数:50  
标签:容器 name app nginx 共享 data pod

首先定义一个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拉取成功且顺利执行命令

image-20230516174606596

进入nginx容器访问自己的web服务,成功访问

image-20230516174800736

顺带一提,上面这个Pod创建后并不会进入Running状态

image-20230516174905383

在实际开发中这种模式可以用于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

相关文章

  • Docker修改容器内部时间
    ❝因:最近在捣鼓定时任务的时候发现我本地调试没问题,发到服务器上之后发现实际生效时间比设定的晚了8小时,于是记录一下解决方案,以便于日后查询!❞linux服务的时间查看时间使用datedete#输出结果FriJun210:51:20CST2023使用timedatectltimedatectl#输出结果Localtime:......
  • 通信猫 共享MQTT服务器 在线客户端连接失败
    解决方法使用官方mqtt链接工具(只支持TCP协议)需要有vs2013的dll文件支持,下载连接__官方下载链接,引用自http://www.tongxinmao.com/txm/webmqtt.php正常使用ws协议端口18832连接,控制台输出如下:使用WS协议连接ws协议端口18832,链接失败使用页面客户端工具连接TCP,查看控......
  • 《Spring6核心源码解析》已完结,涵盖IOC容器、AOP切面、AOT预编译、SpringMVC,面试杠杠
    作者:冰河星球:http://m6z.cn/6aeFbs博客:https://binghe.gitcode.host文章汇总:https://binghe.gitcode.host/md/all/all.html源码地址:https://github.com/binghe001/spring-annotation-book沉淀,成长,突破,帮助他人,成就自我。大家好,我是冰河~~提起Spring,可以这么说,Spring几乎......
  • 如何进入docker容器目录
    如何进入Docker容器目录Docker是一种容器化平台,它允许用户将应用程序和其依赖项打包成一个独立的容器。在使用Docker时,有时候我们需要进入容器目录来查看文件、调试或执行一些操作。本文将介绍如何进入Docker容器目录,并提供一些示例代码。解决的问题假设我们有一个名为myapp的Do......
  • 219个python源码云共享
    实现"219个python源码云共享"的过程:步骤操作代码说明1创建源码仓库gitinit初始化一个空的Git仓库2添加源码文件gitadd.将当前目录下的所有文件添加到Git仓库中3提交源码文件gitcommit-m"Initialcommit"提交所有添加的源码文件到Git仓库中4创......
  • Docker系列---【docker和docker容器设置开机启动】
    docker和docker容器设置开机启动1、设置docker开机启动systemctlenabledocker2、设置容器自动重启1)创建容器时设置dockerrun-d--restart=always--name设置容器名使用的镜像(上面命令--name后面两个参数根据实际情况自行修改)#Docker容器的重启策略如下:--res......
  • dockercompose 容器服务之间通信
    DockerCompose容器服务之间通信DockerCompose是一个用于定义和运行多容器Docker应用程序的工具。通过DockerCompose,我们可以使用YAML文件来定义多个容器的配置和连接方式。在DockerCompose中,容器之间的通信非常重要,因为它们可能需要相互协作来完成复杂的任务。在本......
  • docker查看未运行的容器
    Docker查看未运行的容器概述本文将介绍如何使用Docker命令查看未运行的容器。Docker是一种流行的容器化平台,可以方便地创建、部署和管理应用程序。步骤步骤操作1打开终端2输入Docker命令3查看未运行的容器步骤1:打开终端首先,打开终端或命令行界面。Docke......
  • ubuntu上virtualbox主机和客户机共享物理串口
    本人电脑上安装的时ubuntu22.04系统,使用virtualbox的虚拟机里面安装了一个Win10。但由于工作关系,某些Win10下的工具需要使用主机上的物理串口。这时有两个办法:1、在vbox里直接把物理串口分配给Win10,设置如下图所示这里的路径/地址添加的是串口的设备对应的设备路径只要这样设......
  • 使用华为云云容器引擎CCE实现石油炼化行业的应用状态管理与恢复
    石油炼化行业中的应用程序往往需要保持高可用性,以确保生产过程的连续性。华为云提供了云容器引擎(CCE),可以帮助我们实现应用程序的状态管理与恢复。在本文中,我们将介绍如何使用华为云云容器引擎CCE来实现石油炼化行业中的应用状态管理与恢复。步骤一:创建云容器集群首先,我们需要在华为......