Алексей
обычный try_files
Митяй
Есть какое-то общее решение задачи, отдавать контейнеру nginx статику js, css, которая находится внутри контейнера с php приложением ?
ИМХО, нужно билдить image nginx со статикой. Если захочется использовать swarm, то там маунтить volumes будет проблема
Митяй
FROM nginx as production COPY --from=registry:4555/production:latest /app/public /app/public/
Митяй
Довольно быстро и не нужно париться с volumes
Алексей
Алексей
Ну вот мой образ для статики к скрину выше
Nurik
ИМХО, нужно билдить image nginx со статикой. Если захочется использовать swarm, то там маунтить volumes будет проблема
Тогда в этом случае, другие приложения использующие nginx будут лежать. Пока апдейтится сервис. Это неприемлимо в моем случае.
Nurik
Нашёл решение. Спасибо за внимание. docker service update --mount-add type=volume,source=admin-volume,target=/usr/src/admin-app
Митяй
Тогда в этом случае, другие приложения использующие nginx будут лежать. Пока апдейтится сервис. Это неприемлимо в моем случае.
🤔 можно же одновременно траффик перенаправить. поднять новую версию и потом на новую версию перенаправить. Пока правда не делал такое)
Nurik
nginx-proxy / traefik?
Сорри, не слышал про них. Буду изучать вопрос.
Митяй
nginx-proxy / traefik?
traefik для меня к сожалению не подходит, brotli нет. А в nginx-proxy не вижу смысла в swarm. Что он решает?
Nurik
🤔 можно же одновременно траффик перенаправить. поднять новую версию и потом на новую версию перенаправить. Пока правда не делал такое)
Я вот хз, чем это лучше, чем просто обновить volume, в котором файлы, которые юзает nginx. Возможно есть подводные камни. Но мне кажется твоё решение трудозатратнее. Но возможно есть преимущества, о которых я пока не знаю.
Митяй
Я вот хз, чем это лучше, чем просто обновить volume, в котором файлы, которые юзает nginx. Возможно есть подводные камни. Но мне кажется твоё решение трудозатратнее. Но возможно есть преимущества, о которых я пока не знаю.
Если несколько серверов, в случае swarm то на всех нодах нужны эти файлы. А маунтить volume из другого контейнера это боль, и вроде как вообще не работает в docker-compose v3
Nurik
Если несколько серверов, в случае swarm то на всех нодах нужны эти файлы. А маунтить volume из другого контейнера это боль, и вроде как вообще не работает в docker-compose v3
Вот тут описывается процесс монтирования фалов в volume из контейнера. А потмо его можно юзать в nginx https://github.com/docker/compose/issues/3211 А где можно почитать про то что ты описываешь ? Я так понимаю штука которую ты описал ответом выше, понадобится, если в nginx нужно вносить изменения и параллельно перенаправить траффик на рабочий контейнер с nginx. А если он апнулся и все норм, но перенаправить трафик обратно ?
Митяй
Еще раз, в #3211 описывается volumes_from, которого в docker-compose v3 нет
Митяй
https://stackoverflow.com/questions/42232051/docker-compose-volumes-from-equivalent-with-version-3
Митяй
Про деплой, надо гуглить blue green deployment docker swarm. Прям ссылки ща нет. Я пока не успел сделать по хорошему такой деплой)
Nurik
Еще раз, в #3211 описывается volumes_from, которого в docker-compose v3 нет
Там ниже решение. services: mysql: volumes: - datavolume:/var/run/mysqld app: volumes: - datavolume:/var/run/mysqld volumes: datavolume: {}
Митяй
Ага, в теории может и должно работать, у меня были проблемы.
Nurik
Там ниже решение. services: mysql: volumes: - datavolume:/var/run/mysqld app: volumes: - datavolume:/var/run/mysqld volumes: datavolume: {}
У меня была проблема, которую описывает чувак I encounter kind of the same problem and the thing is that the datavolume is not a solution for me as the files do not get overridden by a new version. Так вот, она решается с помощью команды выше.
Митяй
Не могу вспомнить в чем конкретная причина)
Митяй
А, ну может
Je
Привет, ни у кого не случалось в swarm'е на 17.09.0-ce такое, что контейнеры неправильно резолвят IP при обращении к сервису по имени? Проявилось спонтанно, docker inspect <container_id> показывает один IP, при обращении к нему из этой же сети по имени IP другой (к тому же статический и не меняется если грохать контейнер).
eahqzsr
К вопросу о статике - я статику собираю прям в контейнер с nginx, как выше советовали.
eahqzsr
Чтобы на остальные сервисы не влияло, вперед ставлю другой nginx который форвардит запросы куда нужно.
Je
Отвечая на свой вопрос - нужно указывать в стримах nginx явное указание резолвера docker: resolver 127.0.0.11 valid=30s;
Slava
Всем привет. Столкнулся с такой проблемой. Контенер не стартует после перезагрузки виртуалки docker run -d —restart=always -p 6379:6379 -v /vagrant_data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf —name redis redis:alpine redis-server /usr/local/etc/redis/redis.conf Но если убрать из строки запуска комманду redis-server /usr/local/etc/redis/redis.conf, то все работает как надо. docker run -d —restart=always -p 6379:6379 -v /vagrant_data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf —name redis redis:alpine
Aleksandr
пользуйся ``` для выделения блоков кода...
Anonymous
docker run -d —restart=always -p 6379:6379 -v /vagrant_data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf —name redis redis:alpine redis-server /usr/local/etc/redis/redis.conf
Anonymous
ы)
Aleksandr
насколько я помню, если есть аргументы (содержащие дефисы?) их нужно отделять с помощью --: docker run -d \ --restart=always \ -p 6379:6379 \ -v /xxx/redis.conf:/xxx/redis.conf \ --name redis \ redis:alpine \ -- redis-server /usr/local/etc/redis/redis.conf
Artem
не вариант замонтировать по дефолтному пути конфига чтобы проверить?
Slava
не работает. При перезапуске виртуалки также не стартует, только вручную
Artem
ну так значит конфиг кривой
Artem
нужно курить логи
Slava
да. если не передовать комманду то все ок
Artem
так в чем проблема так работать с контейнером?)
Slava
проблема в ручном запуске контенера. нужно vagrant up и вперед
Artem
а что контейнер нельзя запускать не указывая command?
Slava
ну можно не комманду указывать, а аргумент - путь до конфига. но результат тотже
Artem
docker run -d —restart=always -p 6379:6379 -v /vagrant_data/redis/conf/redis.conf:/etc/redis/redis.conf —name redis redis:alpine
Artem
вот так сделать вообще никак?
Artem
тогда никакие пути указывать ненадо аргументами
Slava
сейчас попробую. в alpine нет /etc/redis/ вроде как там только можно редис серверу аргументом передать конфиг. или я не понял где дефолтный конфиг лежит.
Artem
а да, действительно дефолтно он там не лежит
Artem
в моих образах энтрипойнт на него указывает
Artem
/usr/bin/redis-server /etc/redis/redis.conf
Aleksandr
не работает. При перезапуске виртуалки также не стартует, только вручную
во-первых не стоит использовать способ с ключом -d, используй systemctl
Aleksandr
Используем systemd для запуска docker-контейнеров [Unit] Description=My Awesome Service Requires=docker.service After=docker.service [Service] Restart=always RestartSec=3 ExecStartPre=/bin/sh -c "/usr/bin/docker rm -f my-awesome-service 2> /dev/null || /bin/true" ExecStart=/usr/bin/docker run --rm -a STDIN -a STDOUT -a STDERR --env-file=/etc/default/my-awesome-service -p 0.0.0.0:3301:3301 -v /etc/project/service:/etc/wallarm -v /var/lib/blacklist:/var/lib/blacklist -v /var/log/project/service:/var/log/wallarm --name my-awesome-service wallarm-dkr.jfrog.io/my-awesome-service:v0.17.0.0 ExecStop=/usr/bin/docker stop my-awesome-service [Install] WantedBy=multi-user.target #systemd #docker
Artem
и чем же -d плох то?
Artem
если докер стартует через системд, то какая разница как он будет ранить контейнеры?
Aleksandr
м... всем? он просто в бекграунде контейнер запускает, тогда как systemd будет следить за его состоянием, перезапуском, собирать логи
Artem
параметр restart always тогда как работает?
Slava
в alpine entrypoint ` #!/bin/sh set -e # first arg is -f or --some-option # or first arg is something.conf if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then set — redis-server "$@" fi # allow the container to be started with --user if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then chown -R redis . exec su-exec redis "$0" "$@" fi exec "$@" `
Aleksandr
а запускаешь ты его как при загрузке виртуалки?
Aleksandr
кроном?
Slava
не вижу где тут дефолтный конфиг
Artem
а запускаешь ты его как при загрузке виртуалки?
ты докер вообще на серваках вертел?)
Artem
Докер демон запускается через системд при старте виртуалки
Artem
после этого он по полиси ранит все контейнеры
Artem
которые нужно ранить
Slava
ну в убунту вроде системд он наверное и докер стартует
Artem
да везде уже по дефолту системд старутет докер
Slava
просто с другими контейнерами нет проблем стартуеют и норм. видимо придется собрать образ, изи не получается)
Slava
докер куда логи пишет?
Artem
м... всем? он просто в бекграунде контейнер запускает, тогда как systemd будет следить за его состоянием, перезапуском, собирать логи
Если у меня 200 сервисов вертится на хосте мне на каждый писать конфиг под системд чтобы они при старте поднимался?)
Artem
докер куда логи пишет?
через docker logs смотри, а так /var/lib/docker/container/xxxxx/ для каждого контейнера
Roman
Ребята, что используете для nginx + letsencrypt?
Aleksandr
Если у меня 200 сервисов вертится на хосте мне на каждый писать конфиг под системд чтобы они при старте поднимался?)
если у тебя 200 сервисов крутится на хосте тебе уже пора ехать в куб. иначе как не крути это уже заёба
Aleksandr
ты докер вообще на серваках вертел?)
подходов к решению задачи множество. и у каждого есть свои плюсы.
Artem
да даже для 10-20 уже неприкольно расписывать системд сервис, когда это нативный функционал докера который передается одним параметром
Artem
подходов к решению задачи множество. и у каждого есть свои плюсы.
городить свой велосипед просто потому, что можно?)
Aleksandr
нет, потому что для нескольких сервисов это удобно. есть ансибл, который раскидает все что нужно за тебя