Pavel
чем docker commit не катит?
🦠
чтобы не останавливать, можно настроить реплику
Pavel
А если остановка для сервиса не критична? Разве бекап контейнера не является более правильным вариантом?
🦠
вся суть докера в том, что у него фс с ревизиями
🦠
чем больше изменений, тем больше слоев, а это очень интересная игра
🦠
можешь попробовать поиграться с docker export/import
Pavel
дык разве база не в памяти висит? Правильная остановка базы должна положить разницу от предыдущего слоя на диск. Docker-commit сделает снапшот-разницу между прошлым состоянием диска и текущим.
🦠
насколько я помню у докера есть дефолтный лимит на память используемую контейнером
Pavel
А всё что не влезло в своп?
🦠
вот на докхабе есть прям образ https://hub.docker.com/r/wetransform/dockup/
Timur
кто-нибудь использует keepalived? есть смысл его в контейнер сувать и потом с маршрутизацией private-public IP париться?
Pavel
Anonymous
Anton
restart: always
Anton
services:
nginx:
build: ./nginx
restart: always
Anonymous
О, спс
🦠
у докера все еще есть та детская болезнь на запуск зависимых сервисов?
Anton
Что за болезнь?
🦠
помню, делали в докер-композе wait4mysql
🦠
потому что вебморда стартовала раньше чем инициализировалась база
Anton
Есть depends_on:
services:
nginx:
build: ./nginx
restart: always
depends_on:
- data
🦠
а не помогает)
Anton
А, ну наверное база стартует долго, докер запускает процесс - и считает его "запущенным"
🦠
это в первый раз, когда мне понадобился restart: always и я его быстро загуглил
🦠
но это не спасло от написания скрипта на ожидание
Anonymous
🦠
137 это убийство kill 9
Anonymous
command: apachectl -f /etc/httpd/conf/httpd.conf -e info -DFOREGROUND
restart: always
Anonymous
Для проверки жму ctrl+c
Anonymous
И оно просто умирает по 137
🦠
на деле это означает что что-то есть в CMD
🦠
и кто-то пытается что-то запустить помимо этого)
Anton
Вам не нужен restart: always. вам нужен restart: on-failure
Anonymous
CMD watch netstat -nlpt
КОторое не работает вообще
Anonymous
🦠
а зачем рестарт?
Anonymous
Чтоб жило всегда же
🦠
тогда unless-stopped или что-то в эту степь
🦠
и советую поменять CMD на родное CMD ["nginx", "-g", "daemon off;"]
🦠
оно запускает именно то, что ожидается от контейнера
🦠
контейнер не делает магии, если вы пишете свой докерфайл - делайте красиво)
🦠
можно еще затюнить и выставить симлинки логов на /dev/stderr
Oleg
но это не спасло от написания скрипта на ожидание
делал так — разносил по разным композ-файлам и писал фаб таску, которая сначала поднимала первым композ файлом, запускала скрипт, который чекал, все ли поднялось, а потом поднимала вторую часть
Oleg
увы, красивее не придумалось
Anonymous
Anton
🦠
спасибо, но меня и тогда смутило его решение, в проде используется dockerize https://github.com/jwilder/dockerize/
redbeard
https://cs7051.userapi.com/c638316/v638316370/3a65f/hvJV3S7Dtvg.jpg
Oleg
интересно, что она ответит когда будет готова
Anton
ну или просто спрашивать какой нибудь ключ
Anton
видел варианты сложнее чем просто ждать порт
Oleg
Oleg
мой скрипт чекал логи и ждал строчку конкретную. типа "Ready and waiting for connections on 27017"
Anton
Костыль - это монга в проде! Все остальное не запрещено)
Anton
Oleg
ну так я фиксирую версию монги
Oleg
она же тоже в контейнере
Andrei
dcptn
да, но жаль health check может сказать только что все плохо или нет. вот бы хук повесить
Roman
чтот я пропустил с докер клаудом https://blog.maddevs.io/continuous-deployment-with-docker-cloud-1f19ac454781
Roman
вроде платный был
Roman
вернее early access потом платный
Andrei
Я к тому что хук повесть как раз можно, по крайней мере у consul
Misha Kulakovsky
Вот такое в конфиге:
frontend:
(...)
deploy:
mode: replicated
replicas: 2
placement:
constraints:
- node.labels.host.role == front
update_config:
parallelism: 1
delay: 2s
monitor: 2s
Обновляю образы, делаю docker stack deploy, в итоге перезапускается только одна реплика:
COMMAND CREATED STATUS
"nginx -c /nginx.conf" 11 minutes ago Up 11 minutes
"nginx -c /nginx.conf" 19 hours ago Up 19 hours
Почему так может происходить?
Misha Kulakovsky
Причем это не всегда так подвисает, а примерно 1 раз из десяти деплоев
Alexander
Misha Kulakovsky
щас еще прикол был другой — на одной из нод сервис перестал быть доступным, остальные узлы его будто не видели, docker service ls показывал 1/1 хотя должно быть /2
Misha Kulakovsky
убил контейнер — он не перезапускался
Misha Kulakovsky
перезапускал dockerd — ничего
Misha Kulakovsky
помогло только сделать docker swarm leave, и снова join
Misha Kulakovsky
может не стоит мне юзать версию 17.03 и поставить 1.13 как более стабильную
Oleg
Debugging a Docker Heisenbug in production
https://medium.com/@loginoff/debugging-a-docker-heisenbug-in-production-586ccb265f7c#.iu5ezrhph