Re: Подмена бинарника в докере

Igor Sysoev igor на sysoev.ru
Пн Апр 25 19:08:52 UTC 2016


On 25 Apr 2016, at 20:33, Anton Bessonov <exelib at gmail.com> wrote:

> Здравстуйте,
> 
> на сколько я помню, то энджин не посзоляет обновлять конфигурацию, если менять параметры некоторых директив, таких как пути к кэшам. Актуально использую подмену бинарника - вроде помогает.
> 
> Сейчас эксперементирую с тем же самым, только в контейнере. По умолчанию энджин имеет PID 1, что убивает контейнер после kill -QUIT 1.
> 
> В docker-compose делаю следующее:
> 
> version: '2'
> services:
>  nginxt:
>    image: nginx
>    ports:
>      - "6283:80"
>    command: /bin/bash -c '$$(exec /usr/sbin/nginx -g "daemon off;")'
> 
> Вроде работает:
> 
> # ps auxf
> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
> root         7  0.1  0.3  20224  3208 ?        Ss   17:07   0:00 bash
> root        12  0.0  0.2  17496  2064 ?        R+   17:07   0:00  \_ ps auxf
> root         1  0.0  0.2  20044  2704 ?        Ss   17:06   0:00 /bin/bash -c $(exec /usr/sbin/nginx -g "daemon off;")
> root         5  0.0  0.4  31684  4860 ?        S    17:06   0:00 nginx: master process /usr/sbin/nginx -g daemon off;
> nginx        6  0.0  0.2  32068  2860 ?        S    17:06   0:00  \_ nginx: worker process
> 
> # kill -USR2 5
> # ps auxf
> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
> root         7  0.0  0.3  20224  3208 ?        Ss   17:07   0:00 bash
> root        15  0.0  0.2  17496  2048 ?        R+   17:08   0:00  \_ ps auxf
> root         1  0.0  0.2  20044  2704 ?        Ss   17:06   0:00 /bin/bash -c $(exec /usr/sbin/nginx -g "daemon off;")
> root         5  0.0  0.4  31684  4860 ?        S    17:06   0:00 nginx: master process /usr/sbin/nginx -g daemon off;
> nginx        6  0.0  0.2  32068  2860 ?        S    17:06   0:00  \_ nginx: worker process
> root        13  0.0  0.4  31688  5080 ?        S    17:08   0:00  \_ nginx: master process /usr/sbin/nginx -g daemon off;
> nginx       14  0.0  0.2  32068  2880 ?        S    17:08 0:00      \_ nginx: worker process
> 
> # kill -WINCH 5
> # ps auxf
> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
> root         7  0.0  0.3  20224  3208 ?        Ss   17:07   0:00 bash
> root        16  0.0  0.1  17496  1956 ?        R+   17:09   0:00  \_ ps auxf
> root         1  0.0  0.2  20044  2704 ?        Ss   17:06   0:00 /bin/bash -c $(exec /usr/sbin/nginx -g "daemon off;")
> root         5  0.0  0.4  31684  4860 ?        S    17:06   0:00 nginx: master process /usr/sbin/nginx -g daemon off;
> nginx        6  0.0  0.2  32068  2860 ?        S    17:06   0:00  \_ nginx: worker process
> root        13  0.0  0.4  31688  5080 ?        S    17:08   0:00  \_ nginx: master process /usr/sbin/nginx -g daemon off;
> nginx       14  0.0  0.2  32068  2880 ?        S    17:08 0:00      \_ nginx: worker process
> 
> # kill -QUIT 5
> # ps auxf
> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
> root         7  0.0  0.3  20224  3208 ?        Ss   17:07   0:00 bash
> root        17  0.0  0.2  17496  2064 ?        R+   17:09   0:00  \_ ps auxf
> root         1  0.0  0.2  20044  2704 ?        Ss   17:06   0:00 /bin/bash -c $(exec /usr/sbin/nginx -g "daemon off;")
> root        13  0.0  0.4  31688  5080 ?        S    17:08   0:00 nginx: master process /usr/sbin/nginx -g daemon off;
> nginx       14  0.0  0.2  32068  2880 ?        S    17:08   0:00  \_ nginx: worker process
> 
> 
> Теперь вопросы.
> 
> А оно работает? То есть какие проблемы могут возникнуть из-за такого изврашённого способа? Или есть способ лучше? (Ну в голову пришло ещё просто стартовать новый контейнер, подменивать днс и выкидывать старый... но я в этом не сильно шарю - как там ttl и всё такое, если нужно срочно).

А что показывает
ps axw -o pid,ppid,user,%cpu,vsz,wchan,command

В апгрэйде самое главное, чтобы ppid у мастер-процеса был 1.

> И ещё вопрос: А после -WINCH воркеры не должны вымирать?

Должны. Но при автоматическом апгрэйде достаточно USR2/QUIT.


-- 
Igor Sysoev
http://nginx.com



Подробная информация о списке рассылки nginx-ru