Anonymous
На этом канале отбирают только самые доходные и надежные ХАЙП проекты по заработку в интернете! Ежедневная информационная сводка и полный обзор на каждый проект. Подпишись и начинай зарабатывать вместе с нами! telegra.ph/Hajp-Monitoring-08-24
Роман
Вот думал, что справился с вопросом, но всё равно не выходит. Вот docker-compose: https://gist.github.com/rrubashkin/d1773eb7f92fa5a9fea9160c40e93f31 Вот nginx.conf https://gist.github.com/rrubashkin/96487001161b21bb90646dee28db82ee Локалхост выдаёт какой-то странный пустой файл, хотя должен попадать на phpinfo(); Кто-нибудь с подобным сталкивался?
Sergey
Добрый день, вопрос следующий, как реализовать компиляцию C# проекта на mono в Docker на этапе сборки контейнера, в последствии сохранив только исполняемые файлы и подключаемые библиотеки. Dockerfile: FROM mono:latest COPY ./ /tmp/ RUN msbuild /tmp/Server.sln RUN mkdir /opt/server RUN cp /tmp/Server/bin/Debug/* /opt/server/ EXPOSE 8080 CMD ["bash", "mono /opt/server/Server.exe"] Докер совершенно не хочет сохранять файлы полученные не в результате COPY, а в результате скриптов запушенных внутри контейнера. Есть ли какой-нибудь грязный хак чтобы это все красиво обойти без использования VOLUME? Заранее спасибо.
Alexey
Кстати, что значит не хочет сохранять файлы? Файлы получены на каком этапе? выполнения RUN в Dockerfile или после запуска контейнера?
Sergey
Кстати, что значит не хочет сохранять файлы? Файлы получены на каком этапе? выполнения RUN в Dockerfile или после запуска контейнера?
В результате RUN. Желаемое поведение - скопировать исходники, собрать бинарник, его и динамически линкуемые библиотеки помещаются в другое место, откуда и запускаются.
Alexey
Спасибо, немного лучше разобрался с multistage и думаю что это то что надо.
Ну, если ты говоришь, что файлов нет почему-то multistage не поможет пока с этим не разобраться.
Alexey
Но зато у тебя в образе меньше мусора будет. Можно всю dev-среду выкинуть и оставить только среду исполнения и сам сервер.
Sergey
А почему ты думаешь, что файлы после RUN не остаются в образе?
Ну хотя бы потому что когда я делаю docker run с ENTRYPOINT/CMD ['ls -lah <filepath>'] выдает то что файл не найден. Хотя то же самое ls после RUN отрабатывает корректно
Sergey
А ты уверен, что он был создан во время RUN? Может быть, там что-то при сборке не так пошло?
Я после каждого этапа сборки делал ls <путь до собранных сорцев и т.д.> и все отрабатывало корректно. Иначе он бы сфейлился.
Alexey
Я после каждого этапа сборки делал ls <путь до собранных сорцев и т.д.> и все отрабатывало корректно. Иначе он бы сфейлился.
Хм, мистика. Ну тогда фиг знает. Ставлю на то, что где-нибудь незаметная ошибка в стиле опечатки или типа того.
Marian
Приветствую. Какой storage-driver использвуют в основном?
Marian
Интересно, btrfs вроди неплохая. Но все же zfs ближе.
k
https://docs.docker.com/storage/storagedriver/zfs-driver/ >The ZFS on Linux (ZoL) port is healthy and maturing. However, at this point in time it is not recommended to use the zfs Docker storage driver for production use unless you have substantial experience with ZFS on Linux.
Roman
https://resources.codeship.com/hubfs/Codeship_7-Ways-to-Improve-Your-Test-Suite-with-Docker.pdf
bebebe
location /cat-2 { content_by_lua_block { local prog = require'resty.exec'.new('/tmp/exec.sock') local data,err = prog({argv = 'cat', stdin = 'awesome'}) if(err) then ngx.say(err) else ngx.say(data.stdout) end } } вот такое получится
Dmitry
openresty + https://github.com/jprjr/lua-resty-exec
а вот это я себе возьму.
Marian
Sergey️
А у меня egg питоновский из репо не ставится что-то в контейнер, в чем может быть проблема? Во время pip install - requirements.txt показывается что клонится в /src/reponame, а в pip freeze пакета нет Может какое-то дело в вольюмах?
Sergey️
RUN mkdir /src WORKDIR /src COPY . /src/ RUN pip install -r requirements.txt COPY . /src/
Sergey️
-e git+https://github.com/Kylmakalle/repo#egg=someegg
Sergey️
Когда-то казалось что без этого что-то ломалось
Sergey️
Зачем COPY два раза?
Есть какие-то мысли по поводу вопроса?
Dmitry
Есть какие-то мысли по поводу вопроса?
Я же не знаю что лежит в проекте. Плюс есть ли .dockerignore
Sergey️
Я же не знаю что лежит в проекте. Плюс есть ли .dockerignore
.dockerignore есть, но там ничего интересного
Sergey️
Пакет из яйца не ставится, там уж без разницы что в проекте)
Sergey️
Хм, похоже проблема была в /src/
Dmitry
не в яйцах дело?)
Sergey️
не в яйцах дело?)
Питон ставит в /src/
Sergey️
клонит если точнее
Andrey
Ребят, а на сколько это хреновая затея, совать фронтент в докер? Хочу доставлять на прод в едином стиле. Т.е. чтоб все компоненты были контейнерами. И вот с фронтом проблема. С одной стороны там тупо статика, с другой стороны, архивчики таскать не оч удобно.
Andrey
А что мешает?
даж не знаю. Вроде как лишний nginx получается
Marian
даж не знаю. Вроде как лишний nginx получается
Неа норм, если очень хочеться то можно. Нагрузка на нем большая или не очень?
Andrey
не такая чтобы о ней думать)
Marian
не такая чтобы о ней думать)
Тогда смело его в контейнер.
Marian
Я тож тут строю систему на очень странной связке, но не думаю что будет все плохо.
Andrey
Я тож тут строю систему на очень странной связке, но не думаю что будет все плохо.
А мне тут еще фронт зараза какой то хреновый достался. Его чтобы запустить на определенном домене, надо делать ребилд. Пока хз как это порешать)
Алексей
У нас всех сервисов для разработчика домены *.test завёрнуты через dnsmasq на nginx-proxy
Andrey
Nginx-proxy и в него можешь скормить любой домен
не, я не совсем верно высказался. Там фронт ходит в апишку, и вот адрес апишки каким-то магическим образом должен быть указан до билда. И чтобы его сменить, нужен ребилд. React мать его...
Andrey
Webpack?
Вроде вот из-за этой штуки https://github.com/axios/axios
Serg
А мне тут еще фронт зараза какой то хреновый достался. Его чтобы запустить на определенном домене, надо делать ребилд. Пока хз как это порешать)
какой это фронт? я vue.js собираю в multistage: сначала билдю в ноде, потом в nginx:alpine пихаю архив, получется 20-30 Мб
Алексей
Вроде вот из-за этой штуки https://github.com/axios/axios
new webpack.DefinePlugin({ 'COOL_API_URL': JSON.stringify(process.env.COOL_API_URL) })
Andrey
new webpack.DefinePlugin({ 'COOL_API_URL': JSON.stringify(process.env.COOL_API_URL) })
ну это для запуска на node. Я совсем не хочу node использовать для отдачи статики.
Алексей
в итоге при обращении к api юзай axios.get(COOL_API_URL + '/api/getSomethings?param=foo')
Алексей
Алексей
из environment
Andrey
а как задать environment если у меня просто куча статики сервится с nginx?
Алексей
который указываешь либо в docker-compose.yml или docker run -e COOL_API_URL=google.com
Алексей
так перед сборкой образа указываешь
Алексей
нужен dev/stage указываешь один эндпоинт при прод сборке другой
Andrey
так перед сборкой образа указываешь
Так вот я и хочу уйти от пересборки образа. Потому что чисто технически у меня получается на каждом этапе свой билд. Могут поменяться либы в репозиториях, могут вообще пропасть репозитории и много других причин. Вот и хочу получить на этапе билда, кучку статики и просто переносить ее между env. Но чота пока хреново выходит)
Anonymous
Сделал как вы сказали. Теперь такая ошибка: 2018-08-24 10:08:42.288 GMT [1] FATAL: -c pg_restore requires a value Уже пол часа бьюсь об стенку)
Такое чувство, что вы хотели сделать su postgres -c "cmd" Можете зайти внутри контейнера и в bash написать - какую именно команду вы хотите исполнить.
Andrey
фронт никак не получит урлу для апихи магиией.... нужно пересобирать в любом случае либо ходить в какой нить другой сервис для получения урлы (котрый тоже надо будет пересобирать)
Я не силен во фронте. Но чисто логически, почему он не может сходить за каким нибудь config.js и оттуда все взять? P.S. я задавал этот вопрос нашим разрабам, они чот ниче не выдали логически обьяснимого.))
Алексей
Но как config.js появится в контейнере без пересборки?
Andrey
Но как config.js появится в контейнере без пересборки?
Так я просто при запуске могу делать что-нить типо echo $ENV_URL > config.js А ENV_URL передавать докеру при запуске
Алексей
Можно
Andrey
Можно
А понимаю что вопрос не оч для тематики канала, но как?)
Алексей
А понимаю что вопрос не оч для тематики канала, но как?)
в одном сервисе мы делаем так cat /tmp/default.tpl.conf | envsubst '${xxx_URL} ${yyy_API_URL} ${zzz_URL}' > /etc/nginx/conf.d/default.conf данные берутся из env фронт ходит только по урлам /xxx/api/ /zzz/api/ а на уровне nginx мы уже рулим через proxy_pass конечные урлы до сервиса
Алексей
ага
Алексей
а на nginx ты крути как хочешь
Andrey
А xxx и zzz это типо как поддиректории в которых лежит фронт, верно я понимаю?
Anonymous
https://docs.docker.com/storage/storagedriver/btrfs-driver/
И как с ним работается ? For instance, you can use btrfs with Docker CE, even though it is not recommended on any platform for Docker CE, and you do so at your own risk.
tsv
Думаю да.
Anonymous
Хорошо
лучше, чем overlay2 ? тестировали ?)