K8S volumn 挂载文件

volumeMounts:
- name: cfg-vol
  mountPath: /etc/grafana/provisioning/datasources
- name: cfg-ini
  mountPath: /usr/share/grafana/conf/sample.ini
  subPath: sample.ini
- name: cfg-temp
  mountPath: /usr/share/grafana/conf/test.json
  subPath: test.json
  volumes:
  - name: cfg-vol
    configMap:
      name: cm-grafana-yaml
  - name: cfg-ini
    configMap:
      name: cm-grafana-ini
  - name: cfg-temp
    configMap:
      name: cm-grafana-temp

可以在一个 configMap 中挂载多个文件,也可以一个文件挂载一个 configMap,

上面的例子是 一个文件挂载一个 configMap

下面举例 一个  configMap 挂载多个文件

需求

将一个configmap 内的两个文件挂载在一个pod的不同目录下

  • /app/conf/grafanaoracle.properties
  • /app/start-timeshift.sh

创建一个configmap

kind: ConfigMap
apiVersion: v1
metadata:
  labels:
    app.kubernetes.io/managed-by: Helm
  name: test-config
data:
  grafanaoracle.properties: |
    name=kevin
    nage=19
  start-timeshift.sh: |
    #!/bin/sh
    cd /app/influxdb-timeshift-proxy
    INFLUXDB=nms-influxdb:8086 /usr/bin/npm run start

 创建一个deploy

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    zcm-app: test-configmap
  name: test-configmap
spec:
  replicas: 1
  selector:
    matchLabels:
      zcm-app: test-configmap
  template:
    metadata:
      labels:
        zcm-app: test-configmap
    spec:
      containers:
      - env:
        - name: CLOUD_APP_NAME
          value: paas_test-configmap
        image: nginx
        imagePullPolicy: IfNotPresent
        name: test-configmap
        ports:
        - containerPort: 9999
          name: http-oracle
          protocol: TCP
        volumeMounts:       # 关键代码 开始
        - mountPath: /app/start-timeshift.sh
          name: properties
          readOnly: true
          subPath: start-timeshift.sh
        - mountPath: /app/conf/grafanaoracle.properties
          name: properties
          readOnly: true
          subPath: grafanaoracle.properties
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      volumes:
      - configMap:
          defaultMode: 420
          items:
          - key: grafanaoracle.properties  # key 和 path 同名即可
            path: grafanaoracle.properties
          - key: start-timeshift.sh
            path: start-timeshift.sh
          name: test-configmap
        name: properties 	# 关键代码 结束

item  部分可以省略

### VOLUME 指令详解 在 Dockerfile 中,`VOLUME` 指令用于创建挂载点,允许容器运行时访问主机上的特定目录或另一个容器的数据卷。这有助于数据持久化以及多个容器间共享数据。 #### 基本语法 ```dockerfile VOLUME ["/data"] ``` 此命令定义了一个名为 `/data` 的匿名卷,在启动基于该镜像的任何容器时自动创建[^1]。 #### 实际应用案例 为了更好地理解 `VOLUME` 指令的作用,考虑如下场景: 假设正在开发的应用程序需要存储日志文件到某个位置以便后续分析处理,则可以在 Dockerfile 中声明一个体积来保存这些日志: ```dockerfile FROM python:3.9-slim-buster WORKDIR /app COPY . . RUN pip install -r requirements.txt VOLUME ["/var/log/myapp"] # 创建一个新卷用于存放应用程序的日志 CMD ["python", "./main.py"] ``` 上述例子中,当构建并运行这个镜像时,Docker 将会为每次实例化的容器创建一个新的匿名卷映射至宿主机上随机分配的位置,并将其挂载容器内的 `/var/log/myapp` 路径下[^4]。 如果希望更精确地控制卷的行为(比如命名),可以采用复合形式指定目标路径的同时也给出源地址: ```dockerfile VOLUME /path/in/container:/source/path/on/host ``` 不过需要注意的是,这种方式通常不推荐直接写入 Dockerfile 文件内,因为这样会使镜像依赖于具体的环境配置;相反应该利用 `-v` 或者 `--mount` 参数在启动容器的时候动态绑定实际物理机上的相应资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值