LINUX.ORG.RU

История изменений

Исправление 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, не собираются вручную.