首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在同一个kubernetes pod中的容器之间共享文件

如何在同一个kubernetes pod中的容器之间共享文件
EN

Stack Overflow用户
提问于 2021-06-16 05:19:51
回答 1查看 59关注 0票数 0

我有两个容器,一个运行phpfpm,另一个运行nginx。我希望运行nginx的容器能够访问webroot文件,其中包含css和javascript文件。现在,nginx成功地将php请求传递给phpfpm,但是在渲染网页时没有显示任何样式。

这是在linux系统上运行的minikube。

代码语言:javascript
复制
kind: ConfigMap
apiVersion: v1
metadata:
  name: php-ini
  namespace: mixerapi-docker
data:
  php.ini: |
    extension=intl.so
    extension=pdo_mysql.so
    extension=sodium
    extension=zip.so
    zend_extension=opcache.so

    [php]
    session.auto_start = Off
    short_open_tag = Off
    opcache.interned_strings_buffer = 16
    opcache.max_accelerated_files = 20000
    opcache.memory_consumption = 256
    realpath_cache_size = 4096K
    realpath_cache_ttl = 600
    expose_php = off
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-conf
  namespace: mixerapi-docker
data:
  default.conf: |-
    server {
        listen 80;

        root /srv/app/webroot/;
        index index.php;

        location / {
          try_files $uri /index.php?$args;
        }

        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_buffers 16 16k;
            fastcgi_buffer_size 32k;
            include fastcgi_params;
        }
    }
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-nginx-deployment
  namespace: mixerapi-docker
  labels:
    app: php-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: php-nginx
  template:
    metadata:
      labels:
        app: php-nginx
    spec:
      containers:
        - name: php
          image: mixerapidev/demo:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 9000
          env:
            - name: DATABASE_URL
              valueFrom:
                secretKeyRef:
                  name: php-secret
                  key: database-url
            - name: SECURITY_SALT
              valueFrom:
                secretKeyRef:
                  name: php-secret
                  key: cakephp-salt
          volumeMounts:
            - name: php-ini
              mountPath: /usr/local/etc/php/conf.d
            - name: php-application
              mountPath: /application

        - name: nginx
          image: nginx:1.19-alpine
          ports:
            - containerPort: 80
          volumeMounts:
            - name: nginx-conf
              mountPath: /etc/nginx/conf.d
            - name: php-application
              mountPath: /application

      volumes:
        - name: php-ini
          configMap:
            name: php-ini
        - name: php-application
          persistentVolumeClaim:
            claimName: php-application-pv-claim
        - name: nginx-conf
          configMap:
            name: nginx-conf
            items:
              - key: default.conf
                path: default.conf
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: php-application-pv-claim
  namespace: mixerapi-docker
  labels:
    app: php-nginx
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: mixerapi-docker
spec:
  selector:
    app: php-nginx
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30002
---
apiVersion: v1
kind: Service
metadata:
  name: php
  namespace: mixerapi-docker
spec:
  selector:
    app: php-nginx
  ports:
    - protocol: TCP
      port: 9000
      targetPort: 9000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-29 09:00:13

我不确定这是否是最好的方法,但我将其建立在这个基础上:How to share files between containers in the same kubernetes pod

代码语言:javascript
复制
kind: ConfigMap
apiVersion: v1
metadata:
  name: php-ini
  namespace: mixerapi-docker
data:
  php.ini: |
    extension=intl.so
    extension=pdo_mysql.so
    extension=sodium
    extension=zip.so
    zend_extension=opcache.so

    [php]
    session.auto_start = Off
    short_open_tag = Off
    opcache.interned_strings_buffer = 16
    opcache.max_accelerated_files = 20000
    opcache.memory_consumption = 256
    realpath_cache_size = 4096K
    realpath_cache_ttl = 600
    expose_php = off
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-conf
  namespace: mixerapi-docker
data:
  default.conf: |-
    server {
        listen 80;

        root /application/webroot/;
        index index.php;

        location / {
          try_files $uri /index.php?$args;
        }

        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_buffers 16 16k;
            fastcgi_buffer_size 32k;
            include fastcgi_params;
        }
    }
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-nginx-deployment
  namespace: mixerapi-docker
  labels:
    app: php-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: php-nginx
  template:
    metadata:
      labels:
        app: php-nginx
    spec:
      containers:
        - name: php
          image: mixerapidev/demo:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 9000
          env:
            - name: DATABASE_URL
              valueFrom:
                secretKeyRef:
                  name: php-secret
                  key: database-url
            - name: SECURITY_SALT
              valueFrom:
                secretKeyRef:
                  name: php-secret
                  key: cakephp-salt
          volumeMounts:
            - name: php-ini
              mountPath: /usr/local/etc/php/conf.d
            - name: application
              mountPath: /application
          lifecycle:
            postStart:
              exec:
                command:
                  - "/bin/sh"
                  - "-c"
                  - >
                    cp -r /srv/app/. /application/.

        - name: nginx
          image: nginx:1.19-alpine
          ports:
            - containerPort: 80
          volumeMounts:
            - name: nginx-conf
              mountPath: /etc/nginx/conf.d
            - name: application
              mountPath: /application

      volumes:
        - name: php-ini
          configMap:
            name: php-ini
        - name: nginx-conf
          configMap:
            name: nginx-conf
            items:
              - key: default.conf
                path: default.conf
        - name: application
          emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: mixerapi-docker
spec:
  selector:
    app: php-nginx
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30002
---
apiVersion: v1
kind: Service
metadata:
  name: php
  namespace: mixerapi-docker
spec:
  selector:
    app: php-nginx
  ports:
    - protocol: TCP
      port: 9000
      targetPort: 9000

我让composer安装在docker入口点上运行,所以我需要把它移到Dockerfile中才能正常工作。我用下面的代码更新了我的Dockerfile,如果ENV是prod:

代码语言:javascript
复制
RUN if [[ "$ENV" = "prod" ]]; then \
    composer install --prefer-dist --no-interaction --no-dev; \
fi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67993636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档