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