Я создаю php-образ, содержащий установщик magento. Содержимое хранится в / var / www / html изображения. Теперь у меня есть Php-образ и несколько файлов развертывания. Но содержимое папки images / var / www / html не отображается ни в одном созданном POD. Сначала я подумал, что мне нужно создать том в образе PHP, сопоставляя его с путем / var / www / html. Но это не помогло (но мне это кажется логичным).
Может, есть проблема с постоянным требованием к объему? Я прочитал, что мне нужно создать том в контейнере php и nginx с тем же путем / var / www / html, чтобы содержимое php могло выполняться nginx, поэтому я так и сделал. Но теперь я не уверен, действительно ли это так, и это мешает ПВХ.
PHP Docker-Image
# image
FROM php:7.1-fpm
# envs
ENV INSTALL_DIR /var/www/html
# install composer
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer
# install libraries
... shortended ...
# set memory limits
RUN echo "memory_limit=2048M" > /usr/local/etc/php/conf.d/memory-limit.ini
# clean apt-get
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# www-data should own /var/www
RUN chown -R www-data:www-data /var/www
# switch user to www-data
USER www-data
# copy sources with proper user
COPY --chown=www-data ./magento2/composer $INSTALL_DIR
# set working dir
WORKDIR $INSTALL_DIR
RUN composer install
# chmod directories
RUN chmod u+x bin/magento
# switch back
USER root
VOLUME $INSTALL_DIR
развертывания
1. Заявка о постоянном объеме
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-volume-magento
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
2. Развертывание PHP (использование образа сборки с веб-приложением)
apiVersion: apps/v1
kind: Deployment
metadata:
name: php
labels:
app: php
spec:
replicas: 1
selector:
matchLabels:
app: php
template:
metadata:
labels:
app: php
tier: frontend
spec:
containers:
- name: php-mage
image: php-mage:latest
imagePullPolicy: Never
volumeMounts:
- name: magento2-persistent-storage
readOnly: false
mountPath: /var/www/html
volumes:
- name: magento2-persistent-storage
persistentVolumeClaim:
claimName: magento2-volumeclaim
3. Развертывание Nginx
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
tier: frontend
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
- containerPort: 443
volumeMounts:
- name: magento2-persistent-storage
readOnly: false
mountPath: /var/www/html
- name: nginx-config-volume
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: nginx-site-config-volume
mountPath: /etc/nginx/sites-enabled/default.conf
subPath: default.conf
- name: fastcgi-snippet-volume
mountPath: /etc/nginx/snippets/fastcgi-php.conf
subPath: fastcgi-php.conf
volumes:
- name: magento2-persistent-storage
persistentVolumeClaim:
claimName: magento2-volumeclaim
- name: nginx-config-volume
configMap:
name: nginx-config
- name: nginx-site-config-volume
configMap:
name: nginx-site-config
- name: fastcgi-snippet-volume
configMap:
name: nginx-fastcgi-config
EDIT:
Я понял, когда я использую subPath в php-deploy.yaml так:
volumeMounts:
- name: magento2-persistent-storage
readOnly: false
mountPath: /var/www
subPath: html
Мой контент доступен в PHP Pod. Но я не могу добавить ту же логику к развертыванию nginx, потому что она перезаписывает содержимое и папка снова пуста.
Теперь, шаг вперед, но все же вопрос, как это сделать правильно.
Должен ли я использовать mountPath между nginx и php?