- data:/var/www
почему при обновлении git pull файлы не обновляются перез ребилда контейнера?
так специально задумано
как сорсы наружу вытащить чтобы не кешировались?
сложно - так задумано )
можешь объяснить ? почему кешируется. я задавал этот вопрос но решение так и не нашел
так тома работают, при создании контейнера смотрится он на хосте и если пустой то туда копируется инфа с образа, а если не пустой, то скипается, можно отключить копирование, но не скип
Можешь Dockerfile + docker-compose.yaml показать? (через pastebin)
там только docker compose php-fpm: build: context: ./ dockerfile: ./docker/php-fpm/Dockerfile target: production volumes: - data:/var/www - ./storage:/var/www/storage - ./vendor:/var/www/vendor - ./bootstrap/cache:/var/www/bootstrap/cache environment: TZ: ${APP_TIMEZONE} working_dir: /var/www networks: - default restart: always command: sh -c "composer install --optimize-autoloader --no-dev && php-fpm"
ну и внизу volumes: data:
Скорее всего 2 кейса: Если твоё приложение должно отдавать файлы из вольюмов: - ./storage:/var/www/storage - ./vendor:/var/www/vendor - ./bootstrap/cache:/var/www/bootstrap/cache И оно не отдаёт их после git pull, то это значит что оно их читает при запуске. Если оно отдаёт что то другое, то это логично, потому что твой image из которого бежит созданный контейнер содержит старые файлы, и что бы их обновить нужно перебилдить image
если я поменяю data на ./:/var/www это может быть решением? image у меня обычный пхп (не файлы приложения)
Если твоё приложение читает файлы из /var/www и ты хочешь обновлять файлы там без перебилда, то - data:/var/www не сработет.
./ замаунтит тебе всё в /var/www
может, если я правильно понимаю что ты примерно хочешь. Но такое, не докер way для прода
да я понял, спасибо что уделили время
можешь подсказать как лучше тогда? все равно на выходных буду покупать машину для нового прода и хотелось бы нормально настроить, эта конфигурация не мной делалась поэтому и не понял что за data, я бы конечно просто сделал через ./:/var/www но может есть лучшее решение?
на коммит в репу с исходниками билдить образ, помещать его в docker registry а на сервере пулить и запускать без всяких попыток получить исходники. только волюмы с данными которе приложение пишет
Ну посмотри видосы, зачем нужен докер =) Обычно: 1. Ты пулишь код приложения 2. Делаешь docker build и получаешь image:TAG со своим кодом. Смысл в том, что ктр бы этот image не взял, он у него должен запустится и твоё приложение должно работать, без установки и настройки пыхи, или что там у тебя внутри. 3. ты хранишь image в регистри. 4. Ты пулишь image из регистри и запускаешь image на разных серверах, или локально. Таким образом все буду знать, что если они спулили image:TAG то у всех одна и та же версия
Надо найти толковый видос про докер и в шапку
файлы ведь фактически не лежат внутри контейнера var/www, они лежат на хосте и мы просто подменям каталоги
Так нельзя. Смысл докера в изолированности контейнеров. Docker != VirtualMachine
блин а это круто, только вот кто собирать будет image после пуша в мастер? какой нибудь ci/cd ?
угу, github и gitlab встроенные имеют
Да, какой то ci собирает image и пушит его в регистри, типа my-app:1.0 Потом новый пуш с новым кодом, должно быть my-app:1.1 например И тогда И ты и разрабы будут знать, что вот, есть my-app:1.0 и my-app:1.1 Две разных версии, изолированные и всё такое.
ну и что-то типо github actions собираем образ отправляет в регистр и потом команда на сервере забрать его и запустить?
а как откат сделать, забрать другой образ и запустить?
Ну блииин =) Это же азбука: docker run image:tag
а такие откаты как можно автоматизировать? или только ручками на прод идти ?
Пускай ci запускает после реверта коммита
да это я знаю, просто пытаюсь концепцию впитать подходов. очень классные вещи говорите вместе с владимиром)
какого именного ? там же может быть их дохрена)
Хах, ну смотря как запускаешь. если через композ, то в композе tag меняешь. А как ты это автоматизируешь, ну как тебе удобнее. Хочешь ручками поменял и закомиитил, а CI уже на сервер унесёт.
в принципе можно, у нас в СI пайплайн который деплоит указанную в параметре версию, обычно триггерится на новый билд, но если какие-то тесты гонять на проде то можно если они падают откатывать, но нам проще кнпочку нажать и руками предыдущий тэг ввести
а куда тег вводите ? что за ci jenkins ?
тимсити, но в дженкинсе тоже такое было
а в gitlab actions как я понял никуда и не ввести ))) только реагировать на какие нибудь триггеры как предлагали выше типо реверт коммита, но это такое себе, зачем мне коммит откатывать
https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/
спасибо, а такой момент еще в приложении есть система миграций бд, он уже накатил изменения в бд, получается нужно отревертить а затем уже поменять докер image, так?
Понял спасибо
Обсуждают сегодня