wget http://mysqltuner.pl/ -O mysqltuner.pl
perl mysqltuner.pl --host 127.0.0.1
#ifndef PDO_USE_MYSQLND
#include <mysqld_error.h>
#endif
#ifndef MYSQLI_USE_MYSQLND
/* {{{ php_free_stmt_bind_buffer */
void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type)
{
#https://git.remirepo.net/cgit/rpms/php/php70.git/tree/php70.spec#n1353
--with-pdo-mysql=shared,mysqlnd \
# grep ^DocumentRoot /usr/local/apache2/conf/httpd.conf
DocumentRoot "/usr/local/apache2/htdocs"
volumes:
- ./src/symfony:/usr/local/apache2/htdocs
web:
image: httpd:2.4-alpine # Oficial image: https://hub.docker.com/_/httpd
restart: always
ports:
- 8080:80 # HOST:CONTAINER
:: Первым делом, нужно понять, что является точкой входа, т.е. как запускается приложение внутри контейнера
:: Проверим какую команду и с какими аргументами запустят, при запуске контейнера
PS C:\Users\admin\d> docker inspect httpd:2.4-alpine | FINDSTR /I "cmd"
"Cmd": [
"CMD [\"httpd-foreground\"]"
"Cmd": [
PS C:\Users\admin\d> docker inspect httpd:2.4-alpine | FINDSTR /I "entry"
"Entrypoint": null,
"Entrypoint": null,
:: Смотрим какой cwd будет иметь программа при запуске
PS C:\Users\admin\d> docker inspect httpd:2.4-alpine | FINDSTR /I "workingdir"
"WorkingDir": "/usr/local/apache2",
"WorkingDir": "/usr/local/apache2",
PS C:\Users\admin\d> docker run --rm -ti httpd:2.4-alpine sh
:: Теперь нужно понять что внутри скрипта, который запускает httpd, который мы нашли в 1 шаге: "CMD [\"httpd-foreground\"]"
# cat $(which httpd-foreground)
#!/bin/sh
set -e
# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid
exec httpd -DFOREGROUND
:: Ничего супер сложного, давай проверим с какими опциями разработчики собирали Httpd
# /usr/local/apache2 # httpd -V
Server version: Apache/2.4.39 (Unix)
Server built: Jun 5 2019 22:22:14
Server's Module Magic Number: 20120211:84
Server loaded: APR 1.6.5, APR-UTIL 1.6.1
Compiled using: APR 1.6.5, APR-UTIL 1.6.1
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/usr/local/apache2"
-D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
:: Вот то, что нужно! -D SERVER_CONFIG_FILE="conf/httpd.conf"
:: Значит, при запуске контейнера, запустится скрипт /usr/local/bin/httpd-foreground, при этом cwd (рабочий каталог) будет /usr/local/apache2, скрипт запустит команду exec httpd -DFOREGROUND, причем exec заставит оболочку запустить httpd с pid 1.
httpd собран таким, образом, что он ищет конфиг относительно своего cwd SERVER_CONFIG_FILE="conf/httpd.conf", значит конфиг файл находится тут: /usr/local/apache2/conf/httpd.conf
:: где живет конфиг мы поняли, давай выяснять где httpd прячет файлики дефолтного сайта
# grep ^DocumentRoot /usr/local/apache2/conf/httpd.conf
DocumentRoot "/usr/local/apache2/htdocs"
:: Теперь понятно, чтобы не трогая конфиги, подсунуть в httpd свой сайт, нужно прокинуть туда volume.
Я проверил это очень просто:
volumes:
- /etc:/usr/local/apache2/htdocs
:: А потом просто открыл в браузере:
http://127.0.0.1:8080/hosts
Как и ожидалось, я увидел файл :)
src/ - кодик ваших программ
src/application1
src/application2
data/ - вольюмы контейнеров с данными
data/mysql
conf/ - конфиги программ
conf/mysql/main.cf
conf/httpd/httpd.conf
conf/httpd/conf/extra/httpd-vhosts.conf
docker-compose.yml
web:
image: httpd:2.4-alpine # Oficial image: https://hub.docker.com/_/httpd
...
volumes:
- ./conf/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./conf/httpd/conf/extra/httpd-vhosts.conf:/usr/local/apache2/conf/httpd-vhosts.conf