Alexandr
Вот эт точно не для компоуза
с нормальной системой оркестрации все получится
Anonymous
Нормальная система оркестрации эт точно не компоуз)
Aion
что для вас нормальная система оркестрации?
Anonymous
Кубер хотя б)
Anonymous
Ну или марафон
Andrey
Кубер хотя б)
а swarm чем плох?
Aion
я не прошу названия, я прошу список критериев по которому вы так решили
Александр
У swarm нет неймспейсов, он вяло реагирует на смерть ноды
Anonymous
Вообще я скорее за dcos
Andrey
неймспейсы - стэки? А что значит вяло реагирует? интервалы таймаутов и опроса нод настраиваются
Anonymous
Можно отвязаться от докера
Александр
Стейдж и пререлиз - там одинаковый набор сервисов, но в сварме они в куче
Александр
В кубе можно разделить по неймспейсам
Александр
Короче он более гибкий, но значительно сложнее
Anonymous
я не прошу названия, я прошу список критериев по которому вы так решили
В нашем случае мы выбрали dcos потому что 1. Хорошая дока (по сравнению с кубером 2. Прост в сетапе ноды 3. Можно использовать не только докер, отсюда вытекает плюс с использованием gpu 4. Из коробки есть dns, vip, и все такое.
Александр
Весь менеджмент с одного хоста, в сварме либо я сто-то не так делал, либо так и есть, но зайти в конкретный контейнер на другой ноде у меня не получилось
Andrey
Можно ссылку? Попробую повертеть
docker swarm init —dispatcher-heartbeat (default: 5s) - это про вялость реакции. Dispatcher heartbeat period (ns|us|ms|s|m|h)
Andrey
Стейдж и пререлиз - там одинаковый набор сервисов, но в сварме они в куче
никто не мешает деплоить стэйджинг с оверврайтом через docker-compose под нужными именами. Особенно в связке с gitlab-ci это довольно просто и удобно
Andrey
я просто еще не сталкивался с задачами, которые swarm не сможет реализовать, но у меня и опыта в этом деле не так много и проекты не "топовые" :)
Artem
В кубе можно разделить по неймспейсам
Так в сворме так же по стакам можно все разбить.
Andrey
Есть пример .gitlab-ci?
в gitlab-ci соответственно можно деплоить стэки с разными именами (по имени тэга или коммита, например): docker stack deploy —compose-file docker-stack.stage.yml mystack_staging_${CI_COMMIT_REF_NAME} а собрать stage c override можно так: docker-compose -f config1.yml -f config2.yml config > docker-stack.stage.yml но скоро этот "колхоз" запилят и можно будет прямо в stack deploy override использовать: https://github.com/docker/cli/pull/569
Александр
Мне интересно именно .gitlab-ci.yml, и используете ли volume?
Александр
и secret
simplemice.eth
@Ai_boy
Andrey
secret есть, я пока не изучал, но планирую. хочу что то типа общего хранилища секретов, что бы к нему можно было обращаться с любой ноды. Волюмы используются в некоторых случаях
Таймураз
Надо создать бота, который банит, если кто-то заходит и первым делом форвардит сообщение
Александр
Если хостовые, или с хоста не тру?
Andrey
У меня как хостовые так и в ceph (доп. плагин, локально тестирую). Контейнер поднялся - волюм подтянулся. если хостовой, то ессно при его наличии на хосте (в случае биндинга директории с хоста) есть и просто именованые волюмы - создаются сами, если их нет
Александр
спс
Александр
Всё-таки, можно .gitlab-ci.yml?) Или это секрет?)
Andrey
в лс кинул
Dmitry
Утром почитал статью https://soar.name/ru/pro/half-a-year-with-docker-swarm-mode-in-production/ и стало как-то грустно
Pavel
Утром почитал статью https://soar.name/ru/pro/half-a-year-with-docker-swarm-mode-in-production/ и стало как-то грустно
Кто сталкивался с озвученными проблемами? Лично у меня похожая ситуация, первые пару багов не застал, остальные - почти все встречались. Сам теперь подумываю переводить оркестрацию на kubernates какой-нибудь
Vladimir
Pavel
баги из коробки?)
Vladimir
Не, кубернетис удобоваримый
Yaroslav
Привет! Кто-то из докера подымал ejabberd ?
Олексій
Привет! Кто подскажет: Все файлы которые создаются из под контейнера имеют owner`а - root. Соответственно я из хоста у меня нет прав на них без root прав
Pavel
docker run —user ...
Олексій
docker run —user ...
а глобально это можно установить? Запускаю контейнеры docker-compose`ом
Александр
Привет! Вопрос такой: как вы деплоите серверные приложения на ci (У нас gitlab)? У меня в голове 2 варианта: демон, дёргающийся по хуку или агент, у которого есть доступ к шеллу. 1 вариант - нельзя скрипт деплоя менять прямо в репе, 2-ой небезопасный. Так вот как это делать правильно?) Есть какие-нибудь паттерны?
Yevhen
Привет! Вопрос такой: как вы деплоите серверные приложения на ci (У нас gitlab)? У меня в голове 2 варианта: демон, дёргающийся по хуку или агент, у которого есть доступ к шеллу. 1 вариант - нельзя скрипт деплоя менять прямо в репе, 2-ой небезопасный. Так вот как это делать правильно?) Есть какие-нибудь паттерны?
в gitlab-ci секция деплоя может выглядеть примерно так: deploy-to-review: stage: deploy before_script: - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") script: - scp $ENV_FILE $DC_STACK_FILE provisioner@staging.lc:~/docker - ssh provisioner@staging.lc VER=$CI_PIPELINE_ID 'bash -s' < ./docker/stack_deploy.sh environment: name: review/$CI_COMMIT_REF_NAME url: https://www.$CI_COMMIT_REF_SLUG-labs.cf
Александр
stack_deploy - это скрипт на сервере, получается?
Александр
Не в репе?
Yevhen
Не в репе?
в репе, конечно же... Это выполнение локального скрипта на удаленном компе: ssh provisioner@staging.lc VER=$CI_PIPELINE_ID 'bash -s' < ./docker/stack_deploy.sh
Yevhen
Не в репе?
Побольше подробностей о гитлаб CI с примерами/костылями и лично набытими шишками можно найти тут https://letsclearitup.com.ua/tag/gitlab-ci (14 статей, читайте с самых ранних) Сейчас перешли на docker swarm, поэтому будут полезны также эти две статьи: костыли с передачей переменных https://letsclearitup.com.ua/docker/docker-swarm-stack-deploy-i-env-peremennyie.html "велосипед" с томами (вместо выпиленной конструкции volumes_from) https://letsclearitup.com.ua/deploy/docker-swarm-stack-deploy-i-imenovannyie-toma-named-volumes.html
Александр
Тогда уж сделать раннер с ssh-executor, выполнит
Александр
Но тут может быть беда в том, что это небезопасно. В репе можно понаписать что угодно
Yevhen
Но тут может быть беда в том, что это небезопасно. В репе можно понаписать что угодно
делаете несколько веток/окружений (staging|release|prod), локальные коммиты мержатся в ветку staging, запускается CI, изменения попадают на staging окружение. В конце спринта делается ветка релиз, она попадает на соответствующее окружение, где QA проводят регрессию (тестирование). После тестирования ветка релиз мержится в ветку прод и выкатывается на прод. В своем CI настраиваете автодеплой на стейджинг окружение, а деплой на релиз/прод делаете manual (выполнится только по нажатию на кнопку), даете доступ к пайплайнам только тем, кому доверяете
Александр
А есть примеры другой реализации? Демон, который отрабатывает по хуку
Yevhen
Так и сделаю, наверное, спасибо)
всегда пожалуйста! Если надумаете использовать вместе с docker swarm - пишите, скину вам пример своего скрипта stack_deploy.sh
Александр
всегда пожалуйста! Если надумаете использовать вместе с docker swarm - пишите, скину вам пример своего скрипта stack_deploy.sh
Можно и сейчас скинуть) Сейчас я не готов окончательно определиться. Изучаю kubernetes, потом можно будет уже оценить плюсы и минусы swarm и kubernetes
Yevhen
А есть примеры другой реализации? Демон, который отрабатывает по хуку
не встречал. CI - это что-то "очень личное", каждый точит под себя... наверняка это сделать можно, но нужно ли?
Yevhen
Можно и сейчас скинуть) Сейчас я не готов окончательно определиться. Изучаю kubernetes, потом можно будет уже оценить плюсы и минусы swarm и kubernetes
куб мне показался сложноватым, "с наскоку" не осилил... Ну и у нас стейджинг окружение из одной ноды, поэтому docker swarm подошел идеально - чтоб потренироваться перед релизом/продом и добиться zero downtime
Александр
Да, он намного сложнее, но в некоторых кейсах удобнее и гибче
Yevhen
Можно и сейчас скинуть) Сейчас я не готов окончательно определиться. Изучаю kubernetes, потом можно будет уже оценить плюсы и минусы swarm и kubernetes
скрипт выглядит так: #!/bin/bash DIRECTORY=~/docker DC_FILE=docker-compose-stack-staging.yml ENV_FILE=.env.staging.lc REGISTRY=registry.gitlab.lc:5000 cd $DIRECTORY; SERVICES=$(docker service ls —filter name=ed_applications —quiet | wc -l) docker system prune -f; docker volume create —name code-$VER if [[ "$SERVICES" -gt 0 ]]; then # Update docker service update \ —detach=false \ —mount-add type=volume,source=code-$VER,target=/var/www/develop \ —constraint-add node.role==manager \ —with-registry-auth \ —image $REGISTRY/develop/ed/develop.sources:latest \ ed_applications else # Create docker service create \ —name=ed_applications \ —mount type=volume,source=code-$VER,target=/var/www/develop \ —constraint node.role==manager \ —with-registry-auth \ $REGISTRY/develop/ed/develop.sources:latest fi env $(cat $ENV_FILE | grep ^[A-Z] | xargs) docker stack deploy —with-registry-auth —compose-file $DC_FILE ed;
Yevhen
Да, он намного сложнее, но в некоторых кейсах удобнее и гибче
согласен на 1000%, в серьезных проектах без него никак )
Виталий
Добрый день. Подскажите пожалуйста как быть в данной ситуации? Я создал докер образ в котором присутствует склонированный из гит-репозитория код (файлы исходников). Хочу чтобы файлы исходников были доступны извне. Соответственно я выполняю команду с ключём -v что-то типа такого: docker run -v /d/my-local-path/code:/code -p 8080:8080 -p 8081:8081 —name container-name —restart unless-stopped -it image-name Но проблема в том что файловая система в контейнере затирается тем что находится в /d/my-local-path/code (а там пусто) Т.е. получается что файлы копируются извне в контейнер, а мне надо наоборот - из контейнера в локальную файловую систему. Буду очень признателен если кто-то подскажет как поправить данное поведение.
Yevhen
Добрый день. Подскажите пожалуйста как быть в данной ситуации? Я создал докер образ в котором присутствует склонированный из гит-репозитория код (файлы исходников). Хочу чтобы файлы исходников были доступны извне. Соответственно я выполняю команду с ключём -v что-то типа такого: docker run -v /d/my-local-path/code:/code -p 8080:8080 -p 8081:8081 —name container-name —restart unless-stopped -it image-name Но проблема в том что файловая система в контейнере затирается тем что находится в /d/my-local-path/code (а там пусто) Т.е. получается что файлы копируются извне в контейнер, а мне надо наоборот - из контейнера в локальную файловую систему. Буду очень признателен если кто-то подскажет как поправить данное поведение.
это "ожидаемое поведение" докера, раньше сталкивался с таким... Запускал сервисы, правда, через docker-compose. Если каталога (или тома) нет, он создается при запуске и в него копируется содержимое из контейнера. Если каталог (том) есть, то его содержимое будет скопировано в контейнер https://letsclearitup.com.ua/deploy/docker-swarm-stack-deploy-i-imenovannyie-toma-named-volumes.html
Виталий
как вариант - удаляйте каждый раз каталог при перезапуске контейнера или используйте тома (тоже каждый раз создавая новый)
т.е. если не будет каталога то файлы должны скопироваться из контейнера в локальную FS?
Yevhen
т.е. если не будет каталога то файлы должны скопироваться из контейнера в локальную FS?
да, если не будет каталога, то при старте контейнера он создастся и в него скопируются данные из контейнера
Dima
Коллеги, кто-нибудь поднимал докер реджистри с самоподписанным сертификатом?
Dima
https://docs.docker.com/registry/insecure/#use-self-signed-certificates
Dima
http://www.itzgeek.com/how-tos/linux/centos-how-tos/how-to-setup-docker-private-registry-on-centos-7-ubuntu-16-04.html
Dima
делаю все по доке и этой статье, но не взлетело
Dima
при пуше образа пишет: certificate signed by unknown authority
Виталий
как вариант - удаляйте каждый раз каталог при перезапуске контейнера или используйте тома (тоже каждый раз создавая новый)
Попробовал так сделать: - удалил локальный каталог - выполняю команду - каталог создаётся но он пустой
Виталий
случайно не докер тулбокс? =)
м... наверное нет т.к. не знаю что такое докер тулбокс :)
Yevhen
при пуше образа пишет: certificate signed by unknown authority
да, там есть нюансы... всех не вспомню, делал давно - точно знаю что эти же сертификаты закидывал в контейнер с гитлабом и на каждой ноде, которая должна работать с реджистри закидывал ca.crt в /etc/docker/certs.d/registry.gitlab.lc:5000/ca.crt (после черо обязательно рестарт докера) https://letsclearitup.com.ua/bash/gitlab-gitlab-ci-docker-registry-s-pomoshhyu-docker-compose.html
Yevhen
случайно не докер тулбокс? =)
Виндовс? Линукс? можете подключиться к запущенному контейнеру и убедиться что внутри в каталоге /code действительно что-то есть?