Size: a a a

Docker — русскоговорящее сообщество

2020 October 17

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
Ivan Kosarev
должен собирать редмайн, собсно если вводить команды руками в баше то оно так и получается, но именно докер билд отказывается на моменте создания базы
cмотри в чем идея докер, каждая директива, будь то RUN, COPY или что-то другое -это то, что формирует слой. т.е. RUN pg_ctlcluster 12 main start запустит тебе базу, да. но в следующем слое она уже не будет работать.
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
ну и в контейнере принято держать один процесс, из твоего докер-файла можно предположить что тебе нужны два контейнера: один с постгресом, второй с руби
источник

V

Vitalii in Docker — русскоговорящее сообщество
DORIAN GRAY
ну по сути приложение в докере должно обращаться к бд по хосту db.верно? но пишет что его нет
Оба сервиса должны быть в одной докер сети, гугли про docker networks, только в этом случае сервис будет резолвиться по своему имени
источник

IK

Ivan Kosarev in Docker — русскоговорящее сообщество
Александр Фадеев
cмотри в чем идея докер, каждая директива, будь то RUN, COPY или что-то другое -это то, что формирует слой. т.е. RUN pg_ctlcluster 12 main start запустит тебе базу, да. но в следующем слое она уже не будет работать.
значит я плохо прочитал про слои, спасибо, пойду курить мануалы дальше. Еще раз спасибо, не знал, пойду изучать почему оно так....
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
Александр Фадеев
ну и в контейнере принято держать один процесс, из твоего докер-файла можно предположить что тебе нужны два контейнера: один с постгресом, второй с руби
но ничего не мешает тебе сделать образ, впихнуть в него супервизор, который для тебя в конце запустит и постгрес и руби
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
ну и последнее, ты упускаешь самое главное удобство докера, наверняка уже есть контейнеры с руби и прочим и можно было бы переиспользовать их, вместо того чтобы устанавливать пакеты руками в образе
источник

IK

Ivan Kosarev in Docker — русскоговорящее сообщество
Александр Фадеев
ну и последнее, ты упускаешь самое главное удобство докера, наверняка уже есть контейнеры с руби и прочим и можно было бы переиспользовать их, вместо того чтобы устанавливать пакеты руками в образе
задача состоит в том чтобы создать его "с нуля"
¯\_(ツ)_/¯. Я правильно понимаю что если я все описанное засуну в один слой(допустим в скрипт) то это может решить эту проблему?
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
и да и нет
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
если впихнешь это в скрипт, и создашь докерфайл с содержимым
FROM ubuntu
COPY start.sh .
ENTRYPOINT ["bash"]
CMD ["-c", "start.sh"]

то отработает может быть
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
но это будет крайне неправильное использование докера)
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
смотри в чем идея, тебе надо чтобы в контейнере были постгрес и руби, окей, установи их с помощью RUN, тебе нужны файлы конфигурации и приложения, скопируй их с помощью COPY, тебе надо инициализировать БД  и запустить приложение, пиши инит скрипт, и выполняй его в CMD
источник

IK

Ivan Kosarev in Docker — русскоговорящее сообщество
Александр Фадеев
смотри в чем идея, тебе надо чтобы в контейнере были постгрес и руби, окей, установи их с помощью RUN, тебе нужны файлы конфигурации и приложения, скопируй их с помощью COPY, тебе надо инициализировать БД  и запустить приложение, пиши инит скрипт, и выполняй его в CMD
Еще раз огромное спасибо за ответы, 6 сообщений от тебя дали мне больше мудрости чем 3 часа гугления, дичайше благодарен.
источник

V

Vitalii in Docker — русскоговорящее сообщество
Александр Фадеев
смотри в чем идея, тебе надо чтобы в контейнере были постгрес и руби, окей, установи их с помощью RUN, тебе нужны файлы конфигурации и приложения, скопируй их с помощью COPY, тебе надо инициализировать БД  и запустить приложение, пиши инит скрипт, и выполняй его в CMD
Человеку не нужен постгрес в контейнере - по крайней мере я не вижу строки, где бы он её устанавливал
источник

V

Vitalii in Docker — русскоговорящее сообщество
Ентрипоинт это то, что тебе нужно, рейк вызывай там
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
Ivan Kosarev
Еще раз огромное спасибо за ответы, 6 сообщений от тебя дали мне больше мудрости чем 3 часа гугления, дичайше благодарен.
ну и ещё важное, докер демон в контейнере следит за процессом с пид 1, если он умер, то может перезапустить контейнер, если запускать его с --restart=always, но за другими он никак не следит
источник

IK

Ivan Kosarev in Docker — русскоговорящее сообщество
Vitalii
Человеку не нужен постгрес в контейнере - по крайней мере я не вижу строки, где бы он её устанавливал
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
Vitalii
Человеку не нужен постгрес в контейнере - по крайней мере я не вижу строки, где бы он её устанавливал
ну хз, только он знает зачем он делает psql -h localhost
источник

V

Vitalii in Docker — русскоговорящее сообщество
Ivan Kosarev
Ага, вижу, не стоит так делать
источник

IK

Ivan Kosarev in Docker — русскоговорящее сообщество
Александр Фадеев
ну и ещё важное, докер демон в контейнере следит за процессом с пид 1, если он умер, то может перезапустить контейнер, если запускать его с --restart=always, но за другими он никак не следит
важное замечание, спасибо
источник

АФ

Александр Фадеев... in Docker — русскоговорящее сообщество
Александр Фадеев
ну и ещё важное, докер демон в контейнере следит за процессом с пид 1, если он умер, то может перезапустить контейнер, если запускать его с --restart=always, но за другими он никак не следит
т.е. если у тебя в контейнер больше одного процесса, юзай супервизор какой-нибудь который будет следить за твоими процессами, но лучше используй два контейнера)
источник