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

Anton Bessonov exelib на gmail.com
Пн Апр 25 17:33:00 UTC 2016


Здравстуйте,

на сколько я помню, то энджин не посзоляет обновлять конфигурацию, если 
менять параметры некоторых директив, таких как пути к кэшам. Актуально 
использую подмену бинарника - вроде помогает.

Сейчас эксперементирую с тем же самым, только в контейнере. По умолчанию 
энджин имеет 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 и всё такое, если 
нужно срочно).

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

С уважением,

Антон

-- 
Certified Prince2:2009 Project Manager
Professional Scrum Expert
Oracle Certified Expert, Enterprise JavaBeans Developer
Oracle Certified Professional, Java SE 6 Programmer

Now that's a test of the character of an organization.
Of the organizations that are attempting to implement
Scrum probably, 30% - 35% will successfully implement it.
- Ken Schwaber



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