#docker-compose #composer-php #dockerfile
#docker-compose #композитор-php #dockerfile
Вопрос:
Я использую docker-compose для создания среды WordPress. Я планирую использовать composer для установки плагинов и тем, которые мне нужны. Когда я запускаю сборку docker-compose, все строится нормально и без проблем. Когда я запускаю docker-compose up, я вижу, что все мои контейнеры запущены, включая composer. Когда я перехожу к сборке WordPress, устанавливаются только темы и плагины по умолчанию. Мой вопрос в том, почему не устанавливаются мои плагины и темы. Чего мне не хватает?
Я попытался включить файлы, которые, по моему мнению, были актуальны
Файловая структура
/
config/
/composer/
Dockerfile
composer.json
/wordpress/Dockerfile
/database/Dockerfile
/phpmyadmin/Dockerfile
dist/
/wp-content/
/themes/
/plugins/
/uploads/
docker-composer.yml
composer.json
{
"repositories":[
{
"type":"composer",
"url":"https://wpackagist.org"
}
],
"require": {
"wpackagist-plugin/akismet":"dev-trunk",
"wpackagist-plugin/wordpress-seo":">=7.0.2",
"wpackagist-theme/hueman":"*"
}
}
Dockerfile Composer
FROM composer/composer:php7
# Install composer
WORKDIR /var/www/html/wp-content
RUN curl -sS https://getcomposer.org/installer |
php -- --install-dir=/usr/bin/ --filename=composer
COPY composer.json /var/www/html/wp-content
# COPY composer.lock ./
RUN composer install --no-scripts --no-autoloader
# COPY ./ /var/www/
RUN composer dump-autoload --optimize
Dockerfile Wodrpess
# start with the latest wordpress and php image
FROM wordpress:5.1.1-php7.3-apache
# Set our environment variables for logging into wordpress
ENV WORDPRESS_DB_HOST database:3306
ENV WORDPRESS_DB_USER username
ENV WORDPRESS_DB_PASSWORD password
# Expose a port to run on
EXPOSE 80
База данных Dockerfile
# start with the mysql image
FROM mysql:5.7
# Set our environment varibales for logging into the DB
ENV MYSQL_ROOT_PASSWORD UKoBMndyEY
ENV MYSQL_DATABASE wordpress
ENV MYSQL_USER username
ENV MYSQL_PASSWORD password
# Copy the database table dependencies into our image DB
COPY ./includes /docker-entrypoint-initdb.d
# Expose a port to run on
EXPOSE 3306:3306
docker-compose.yml
version: "3.3"
services:
wordpress:
build:
context: ./config/docker/wordpress
volumes:
- ./dist/wp-content:/var/www/html/wp-content
ports:
- "8080:80"
restart: always
working_dir: /var/www/html
depends_on:
- database
database:
build:
context: ./config/docker/database
volumes:
- datab:/var/lib/mysql
restart: always
composer:
build:
context: ./config/docker/composer
restart: 'no'
image: "composer"
volumes:
- ./dist/wp-content:/var/www/html/wp-content
phpmyadmin:
build:
context: ./config/docker/phpmyadmin
ports:
- 8181:80
restart: always
depends_on:
- database
volumes:
datab: {}
Комментарии:
1. Службе composer на самом деле не нужно запускать, поскольку она выполняет всю работу во время сборки. И во время сборки отображение временных объемов, которое вы выполняете в docker-compose, недоступно. Я предлагаю использовать многоступенчатую сборку для вашего сервиса WordPress: первым этапом должна быть часть compose (ваш compose dockerfile), а на втором этапе следует скопировать содержимое /var / www / html / wp-content в изображение WordPress и продолжить любую работу, которую вы выполняете в Dockerfile WordPress.
2. Привет @Mihai спасибо за ваш ответ. У вас есть пример того, как это может выглядеть? Я удалил службу composer из файла docker-compose. Сначала я запустил файл composer docker для установки composer, но я запутался во второй части относительно того, что я копирую. Спасибо за вашу помощь
3. Хорошо, можете ли вы опубликовать используемый вами Dockerfile WordPress?
4. Я обновил свой вопрос как с помощью WordPress, так и с помощью dockerfiles базы данных
Ответ №1:
Как объяснено в моем комментарии, вам нужно немного изменить свой проект.
Папка composer и служба могут исчезнуть. Переместите содержимое папки composer в папку WordPress.
Тогда Dockerfile в папке WordPress должен выглядеть следующим образом:
FROM composer/composer:php7 as build
# Install composer
WORKDIR /var/www/html/wp-content
RUN curl -sS https://getcomposer.org/installer |
php -- --install-dir=/usr/bin/ --filename=composer
COPY composer.json /var/www/html/wp-content
# COPY composer.lock ./
RUN composer install --no-scripts --no-autoloader
# COPY ./ /var/www/
RUN composer dump-autoload --optimize
FROM wordpress:5.1.1-php7.3-apache
# Set our environment variables for logging into wordpress
ENV WORDPRESS_DB_HOST database:3306
ENV WORDPRESS_DB_USER username
ENV WORDPRESS_DB_PASSWORD password
COPY --from=build /var/www/html/wp-content /var/www/html/wp-content
# Expose a port to run on
EXPOSE 80
Теперь docker-compose.yml можно упростить следующим образом:
version: "3.3"
services:
wordpress:
build:
context: ./config/docker/wordpress
ports:
- "8080:80"
restart: always
working_dir: /var/www/html
depends_on:
- database
database:
build:
context: ./config/docker/database
volumes:
- datab:/var/lib/mysql
restart: always
phpmyadmin:
build:
context: ./config/docker/phpmyadmin
ports:
- 8181:80
restart: always
depends_on:
- database
volumes:
datab: {}
Я надеюсь, что это работает для вас. В противном случае сообщите мне об ошибке, и я посмотрю на нее.
Комментарии:
1. Большое спасибо за пример. Это сработало для меня!