Dan
Вообще там много интересного. Смотрите осторожнее, а то помимо блокировки на github можно ещё вызвать к себе много интереса от правоохранительных органов :)
Roman
как докер считает совпадают ли COPY слои? по last modified или хеши считает?
Denis
как докер считает совпадают ли COPY слои? по last modified или хеши считает?
For the ADD and COPY instructions, the contents of the file(s) in the image are examined and a checksum is calculated for each file. The last-modified and last-accessed times of the file(s) are not considered in these checksums. During the cache lookup, the checksum is compared against the checksum in the existing images. If anything has changed in the file(s), such as the contents and metadata, then the cache is invalidated.
Roman
хм... я так и думал, но у меня просто рандомные сбросы кеша происходят в одном и том же файле
Roman
файл не менялся с прошлого года
Denis
Может ты на сборке что то в контексте делаешь и изменяешь его
Roman
это как? после чекаута гит-репы что-то меняю в папке типа? вроде нет... поищу
manefesto
А какой кейс то?
Alex
Ребята, подскажите пожалуйста Ознакомился частично с базовыми докер-понятиями: dockerfile, docker-compose, image, container, dockerhub Предположим есть проджект: nginx + django some app + postgres для django-app есть репо на гите Я пишу докерфайл для джанго приложения Пишу docker-compose для сборки в целом И дальше у меня начинаются вопросы: Где хранить докер-файл и docker-compose.yml? Хранить папке поекта (и, соответственно, в гит-репо)? Я правильно понимаю, что конечный алгоритм запуска подготовленного мной "docker+git приложения" (условно) должен выглядеть примерно так? : делаем git clone репо в проекте находим docker-compose запускаем приложение через docker-compose up Извиняюсь за нотку нубячества и заранее благодарен
Alex
Спасибо большое!
Igorь
если гитлаб, то env-файл не особо нужен. Можно хранить в энвах репозитория и подставлять во время CI
kSandr
Ребята, подскажите пожалуйста Ознакомился частично с базовыми докер-понятиями: dockerfile, docker-compose, image, container, dockerhub Предположим есть проджект: nginx + django some app + postgres для django-app есть репо на гите Я пишу докерфайл для джанго приложения Пишу docker-compose для сборки в целом И дальше у меня начинаются вопросы: Где хранить докер-файл и docker-compose.yml? Хранить папке поекта (и, соответственно, в гит-репо)? Я правильно понимаю, что конечный алгоритм запуска подготовленного мной "docker+git приложения" (условно) должен выглядеть примерно так? : делаем git clone репо в проекте находим docker-compose запускаем приложение через docker-compose up Извиняюсь за нотку нубячества и заранее благодарен
зависит от того чем ты занимаешься и чего хочешь, есть 2 основных подхода 1-ый это который ты описал когда докерфайлы хранятся внутри репозитория с проектом 2-ой это когда докерфайлы хранятся в отдельном репозитории и сохраняются оттуда 1-ый способ удобен когда разработчики сами следят за своим проектом и т.п. 2-ой способ удобнее когда людей занимающихся докером мало, а проектов много , так их удобней менеджить и ревьюить
kSandr
Если ты запускаешь все локально, то твой вариант вполне подходит , если у тебя продакшн и нужно запускать проект в разных местах, тогда лучше использовать оркестратор
Alex
зависит от того чем ты занимаешься и чего хочешь, есть 2 основных подхода 1-ый это который ты описал когда докерфайлы хранятся внутри репозитория с проектом 2-ой это когда докерфайлы хранятся в отдельном репозитории и сохраняются оттуда 1-ый способ удобен когда разработчики сами следят за своим проектом и т.п. 2-ой способ удобнее когда людей занимающихся докером мало, а проектов много , так их удобней менеджить и ревьюить
Ага, понял Но смысл один и тот же получается, из которого, я надеюсь, я делаю правильные выводы: 1) Весь проект надо все равно держать в формате гит-репо; (а не предподготовленного образа с предустановленным окружением) 2) Так или иначе должны быть сохранены dockerfile(s) и docker-compose.yml 3) Процесс запуска заключается в клонировании файловой структуры из загруженного репо в контейнер, пробросе портов, запуске сервисов etc - это все должен покрывать docker-compose
Igorь
3 пункт не такой
Igorь
Во время билда докерфайлом надо скопировать нужные файлы внутрь образа, сделать все предварительные действия по настройке, залить в докер-регистри получившийся образ. Во время запуска ты только запускаешь готовые сервисы с проброшенными портами. Все файлы уже внутри образа
Igorь
https://docs.docker.com/compose/django/
Igorь
а. тут обратный пример
Igorь
Я джангу у себя так упаковываю: FROM python:3.6 RUN apt-get update \ && apt-get install -y --no-install-recommends \ postgresql-client ssh git \ && rm -rf /var/lib/apt/lists/* VOLUME ["/articles"] WORKDIR /usr/src/app COPY requirements.txt ./ RUN pip3 install --upgrade pip && pip3 install -r requirements.txt COPY . . EXPOSE 8000 ENTRYPOINT ["/bin/sh", "./run.sh"]
Igorь
Но приведенный на сайте пример удобен, когда ты еще не доделал код и прямо на ходу исправляешь. Джанга это умеет и этим можно пользоваться.
Alex
Спасибо большое!
Alex
Во время билда докерфайлом надо скопировать нужные файлы внутрь образа, сделать все предварительные действия по настройке, залить в докер-регистри получившийся образ. Во время запуска ты только запускаешь готовые сервисы с проброшенными портами. Все файлы уже внутри образа
Я извиняюсь, кажется остался таки один вопрос :) Почему, например, не используется такой вариант: докер-файл в котором на основе образа, например, python3; помимо прочих дефолтных операций производится git clone, pip3 install -r requirements.txt и сопутствующие созданию окружения команды. Ну и все, как всегда, обернуто в docker-compose с дефолтными сервисами Это, получается, почти как у вас, если я правильно понимаю, только за исключением одного момента: вам не нужно заботиться о том, чтобы чтобы свежая версия была загружена где-нибудь на localhost, возиться с путями (ну вдруг какие-то ограничения появятся), все что вам нужно будет, по идее - docker, docker-compose, и dockerfile основного проекта и docker-compose.yml, и вы сможете собрать этот образ заново где угодно. Если я правильно понимаю :)
Igorь
Я извиняюсь, кажется остался таки один вопрос :) Почему, например, не используется такой вариант: докер-файл в котором на основе образа, например, python3; помимо прочих дефолтных операций производится git clone, pip3 install -r requirements.txt и сопутствующие созданию окружения команды. Ну и все, как всегда, обернуто в docker-compose с дефолтными сервисами Это, получается, почти как у вас, если я правильно понимаю, только за исключением одного момента: вам не нужно заботиться о том, чтобы чтобы свежая версия была загружена где-нибудь на localhost, возиться с путями (ну вдруг какие-то ограничения появятся), все что вам нужно будет, по идее - docker, docker-compose, и dockerfile основного проекта и docker-compose.yml, и вы сможете собрать этот образ заново где угодно. Если я правильно понимаю :)
если ты билдишь через раннер, то там отпадает нужда в git clone. раннер сам тебе все подготовит. Если ты билдишь локально, то тем более клонировать ничего не надо. Ну и в регистри хранить по имени ветки/хэшу коммита/как угодно.
Igorь
Там и так не надо возиться с путями. docker build -t <registry image url>:<tag> .
Igorь
вопрос свежести версий как-то вторичен. Есть, например, 3 ветки, для каждой ветки будет свой образ называться свежим
Alex
Пошел читать дальше, спасибо :)
Igorь
Пошел читать дальше, спасибо :)
В чем код-то храните? битбакет/гитлаб/гитхаб/Etc?
Alex
Github/публичный
Igorь
Github/публичный
Может, мои данные устарели, но CI еще пару месяцев назад был платным. Так что подсказать ничего не смогу. На гитлабе бесплатный. Даже на официальном сайте
Igorь
Так бы там можно было вписать, что при пуше в ветку надо собирать образ. (Регистри на гитлабе, кстати, тоже есть)
Igorь
> вам не нужно заботиться о том, чтобы чтобы свежая версия была загружена где-нибудь на localhost, возиться с путями (ну вдруг какие-то ограничения появятся) Это уже задача CI. не надо это делать вручную со своего компа, так как чревато человеческими ошибками.
Maxim
Шкурные борыги борыжат шкурами на рынке instagram ?
Maxim
я что то запутался в сути вашей рекламы
Maxim
и почём шкуры ?
Maxim
если куплю две шкуры то что мне с ними делать?
Sergey️
Купил вот одну шкуру в икее, в гостинную, так она в итоге на балконе лежит
Sergey️
Не рекомендую
Maxim
тоже думаю что шкуры это лишний пылесборник и пользы от шкуры как с козла молока
Maxim
В рекламном сообщении предлагают опознать шкуру через какой то сервис, наверное кому то необходим этот сервис, а то приходишь домой и знать не знаешь что за шкуру ты купил и принес в дом, а так наверное зашел на сервис, загрузил фотку шкуры которую принес и тебе в ответ полный расклад, когда эту шкуру сняли, кто снимал, дата забоя, номер стада, рекомендации по уходу и инструкция как стирать, с каким порошком и при какой температуре сушить что бы не было блох и не заводились червячки. Наверное удобный сервис для любителей шкур. Интересно, может у этих любителей шкур есть даже свои чатики где обсуждают качество выделки
Maxim
Еще интересно что такое эскорт шкуры? Типа как выездная химчистка которая приезжает к вам и чистит шкуры за вас у вас дома? Наверное если есть спрос то предложение не заставит себя ждать
Alexey
Еще интересно что такое эскорт шкуры? Типа как выездная химчистка которая приезжает к вам и чистит шкуры за вас у вас дома? Наверное если есть спрос то предложение не заставит себя ждать
Или "шкура на выезд". Когда сдал свою в химчистку, и тут узнаешь что через полчаса придут гости. А твля шукра задавала стиль всей комнате. И всё, надо срочно замену положить
Maxim
Или "шкура на выезд". Когда сдал свою в химчистку, и тут узнаешь что через полчаса придут гости. А твля шукра задавала стиль всей комнате. И всё, надо срочно замену положить
Точняк, без "шкуры на выезд" такую проблему как "неожиданные гости" стопудова не решить))) нужно держать марку, так как гости могут прибыть со своими шкурами и если их шкуры будут круче чем шкура в твоей комнате то наверное ты будешь не такой крутой в тусовке "шкуроманов". Интересно как у этих ребят называются их чатики :) Шкурофилы, шкуроманы, шкурнятники, шкурята, шкурники, шкурчишки?
Maxim
Наверное мне просто не дано понять этих любителей шкур, у меня другие интересы наверное ) Коллеги, кто нибудь использует TeamCity для сборки docker образов?
Yuriy
gitlab крутая штука, но у меня загвоздка с TeamCity
а в чем проблем собирать через kaniko в teamcity?
Maxim
а в чем проблем собирать через kaniko в teamcity?
Собственно проблем собрать через kaniko нет, вопрос не в инструментарии для сборки, а в том как устроить процесс в TeamCity
Maxim
так вот kaniko у меня в 2-3 раза быстрей и собирает, по сравнению с докером
А вы используете приватный реестр docker образов?
Maxim
да
А TeamCity?
Yuriy
плюс kaniko в том что можно обойтись без костылей в виде docker in docker, т.к ему для работы не нужен докер демон
Yuriy
https://docs.gitlab.com/ee/ci/docker/using_kaniko.html
Yuriy
думаю этот кейс можно и под teamcity адаптировать
Maxim
думаю этот кейс можно и под teamcity адаптировать
У меня задачка с bitbucket и github, к сожелению gitlab в схеме отсутствует. В общем вопрос как раз по агенту teamcity и использование docker-compose из агента тимсити
Yuriy
если проблема в медленной сборке, то ускорить можно через то что я написал выше
Yuriy
ну плюс оптимизировать сам dockerfile
Yuriy
по тимсити к сожалению ни чем помочь не смогу
Maxim
думаю этот кейс можно и под teamcity адаптировать
Проект использует docker-compose, не swarm, не kub8, простой docker-compose для запуска сервисов, на сервере запущен сервис teamcity-agent с docker внутри, вопрос в том как правильно его использовать для выполнения команд в запущенных сервисах, например docker-compose exec web nginx -s reload с помощью teamcity-agent ?
Yuriy
можно через docker attach цепляться напрямую в контейнер и выполнять там нужные комманды
Maxim
можно через docker attach цепляться напрямую в контейнер и выполнять там нужные комманды
Дело в том что известно только название сервиса, название контейнера в моем случае не очень удобно
Maxim
аттачить можно и по имени сервиса из композа
Получается что необходимо смотнировать директории сервисов в контейнер teamcity-agent и этого будет достаточно что бы запустить docker-compose exec web nginx -s reload , верно?
Yuriy
через docker attach ты подключаешь к той консоли в которой запускаешь контейнеры stdin от контейнера
Yuriy
а nginx -s reload лучше через docker exec делать
Maxim
а nginx -s reload лучше через docker exec делать
дело в том что название контейнера в последних версиях докер стали с такими длинными хэшами в конце названия, а имя сервиса мне известно изначально и его не нужно угадывать в моем случае
Roman
кто-то знает, есть чатик по AWS?
Roman
https://t.me/aws_ru
спасибо
Alex
Привет! Подскажите пожалуйста, как в docker-compose связать сервис и БД, если дефолтный порт 5432 занят уже другой БД?
Andrey
дефолтный порт чего? контейнерам не обязательно, а то и вредно на портв хоста обращаться
Alex
Угу, теорию понимаю Но не знаю как на практике реализовать в docker-compose правильный проброс портов я совсем начинающий :)
Andrey
так в любом первом примере с парой контейнеров эта задача описана, ну показывайте уж тогда что на... там у вас, глядишь кто не заленится
Alex
так в любом первом примере с парой контейнеров эта задача описана, ну показывайте уж тогда что на... там у вас, глядишь кто не заленится
угу, примеры видел, но как-то не ладится, увы ( тут уже наверное "все неправильно", но на сейчас конфига такая https://gist.github.com/AlexDemian/a5727c25466fd280848e0dfa4d81fc42