Docker version 18.09.1, build 4c52b90
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
У меня есть рабочий стек LEMP со следующим файлом docker-compose.
version: "3.7"
services:
php:
build:
context: './config/php/'
networks:
- dev
volumes:
- /WORK/:/var/www/html/
working_dir: /var/www/html/
container_name: php
nginx:
image: nginx:1.14-alpine
depends_on:
- php
- mysql
networks:
- dev
ports:
- "80:80"
volumes:
- ./config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
- /WORK/:/var/www/html/
container_name: nginx
mysql:
image: mysql:5.7
restart: always
ports:
- "3306:3306"
volumes:
- /MYSQL/:/var/lib/mysql
networks:
- dev
environment:
MYSQL_ROOT_PASSWORD: "db_root"
MYSQL_DATABASE: "test_db"
MYSQL_USER: "test_db_user"
MYSQL_PASSWORD: "test_db_pass"
container_name: mysql
wpcli:
image: wordpress:cli
depends_on:
- mysql
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_NAME: test_db
WORDPRESS_DB_USER: test_db_user
WORDPRESS_DB_PASSWORD: test_db_pass
networks:
- dev
command: '--path=`/var/www/html/WP-Site/`'
volumes:
- /WORK/:/var/www/html/
- /MYSQL/:/var/lib/mysql
working_dir: /var/www/html/
container_name: wpcli
networks:
dev:
Файл Dockerfile для образа PHP содержит это.
FROM php:7.2-fpm-alpine
# docker-entrypoint.sh dependencies
RUN apk add --no-cache \
# in theory, docker-entrypoint.sh is POSIX-compliant, but priority is a working, consistent image
bash \
# BusyBox sed is not sufficient for some of our sed expressions
sed
# https://github.com/docker-library/wordpress/blob/master/php7.3/fpm-alpine/Dockerfile
# install the PHP extensions we need
RUN set -ex; \
\
apk add --no-cache --virtual .build-deps \
libjpeg-turbo-dev \
libpng-dev \
libzip-dev \
; \
\
docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr; \
docker-php-ext-install gd mysqli opcache zip; \
\
runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \
apk add --virtual .wordpress-phpexts-rundeps $runDeps; \
apk del .build-deps
Conf NGINXthis.
upstream php {
server php:9000;
}
server {
listen 80;
server_name localhost;
## Your only path reference.
root /var/www/html;
## This should be in your http block and if it is, it's not needed here.
index index.php index.html index.htm;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
# https://nginxlibrary.com/enable-directory-listing/
autoindex on;
# This is cool because no php is touched for static content.
# include the "?$args" part so non-default permalinks doesn't break when using query string
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
Все сервисы, кроме WP-CLI, работают.Моя структура папок такова, что в основной папке WORK
есть подпапки, в каждой из которых есть проект.
Такими проектами могут быть WordPress, но также могут использоваться другие CMS или просто небольшие статические сайты.
Под http://localhost/
Я вижу обзор папки WORK
со всеми подпапками.Нажатие на любую папку проекта, например, WP-Site
, приведет меня к, например, http://localhost/WP-Site/
.Там у меня есть работающая установка WordPress, которая прекрасно подключается к службам PHP и MYSQL.
Но при попытке использовать WP-CLI он либо говорит мне, что не может найти работающую установку WordPress, и когда я передаю командув сервисе и укажите путь к одному из проектов WordPress, который у меня есть, он просто выйдет без сообщения об ошибке.
Действительно ли мне нужно изображение WordPress, чтобы использовать образ WP-CLI.В сервисе WP-CLI я также дал те же переменные среды, что и для сервиса MYSQL, чтобы WP-CLI мог знать, к чему подключаться.
Если есть какой-либо способ запустить контейнер WP-CLI исделайте это доступным в основной папке WORK
, так что для всех проектов, которые я мог бы сделать, ну, это было бы здорово.
Я думал об установке всего в один образ, но тогда это противоречит цели Docker, чтобы бытьвозможность иметь вещи отдельно и обмениваться.Поэтому мне нравится создавать контейнер WP-CLI, который действительно может подключаться к моим контейнерам PHP и MYSQL.