История изменений
Исправление
KRoN73,
(текущая версия)
:
Если контейнер приходится конфигурировать _изнутри_, то скорее всего ошибка где-то в концепции. И вопрос стоит не нужно ли вместо Docker использовать LXC. Это больше его задача, использовать контейнеры как полноценные виртуальные машины.
Связывать контейнеры нужно через --link и --volume. Через --link получаем внутри одних контейнеров адреса и порты других. Через --volume монтируем внутрь контейнера конфиги из хоста.
Очень удобен тут docker-compose, внутри одного YAML-файла описываем все нужные связи. Скажем, пример простого связывания php и nginx-контейнеров:
nginx:
image: nginx
ports:
- "0.0.0.0:80:80"
volumes:
- ./nginx:/etc/nginx
- ./www:/usr/share/nginx/html
links:
- php:php1833
php:
image: php:fpm
volumes:
- ./php-etc:/usr/local/etc
- ./www:/var/www/html
ports:
- 9000
php-fpm изнутри вообще не конфигурируется в отношении Docker, просто используются нужные каталоги и настройки и выставляется на своём IP для запросов 9000-й порт.
nginx'у нужно знать, по какому IP дёргать PHP. docker-compose обеспечит это, передав под именем php1833 (конечно, оно может быть любым) адрес контейнера с PHP, т.е. в монтируемом nginx.conf нужно только записать:
location ~ \.php$ {
root html;
fastcgi_pass php1833:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
Как видно, сами контейнеры не только не меняются, они вообще берутся готовые из docker registry, не собираются вручную.
Исходная версия
KRoN73,
:
Если контейнер приходится конфигурировать _изнутри_, то скорее всего ошибка где-то в концепции. И вопрос стоит не нужно ли вместо Docker использовать LXC. Это больше его задача, использовать контейнеры как полноценные виртуальные машины.
Связывать контейнеры нужно через --link и --volume. Через --link получаем внутри одних контейнеров адреса и порты других. Через --volume монтируем внутрь контейнера конфиги из хоста.
Очень удобен тут docker-compose, внутри одного YAML-файла описываем все нужные связи. Скажем, пример простого связывания php и nginx-контейнеров:
nginx:
image: nginx
ports:
- 80
volumes:
- ./nginx:/etc/nginx
- ./www:/usr/share/nginx/html
links:
- php:php1833
php:
image: php:fpm
volumes:
- ./php-etc:/usr/local/etc
- ./www:/var/www/html
ports:
- 9000
php-fpm изнутри вообще не конфигурируется в отношении Docker, просто используются нужные каталоги и настройки и выставляется на своём IP для запросов 9000-й порт.
nginx'у нужно знать, по какому IP дёргать PHP. docker-compose обеспечит это, передав под именем php1833 (конечно, оно может быть любым) адрес контейнера с PHP, т.е. в монтируемом nginx.conf нужно только записать:
location ~ \.php$ {
root html;
fastcgi_pass php1833:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
Как видно, сами контейнеры не только не меняются, они вообще берутся готовые из docker registry, не собираются вручную.