Dmitry
31.05.2019
10:21:39
статический сервер- это что?
Alex
31.05.2019
10:22:58
да, именно
и в зависимости от того какая это сборка нужно менять сборку приложения ( это про ангуляр) и прокси внутри nginx
Dmitry
31.05.2019
10:23:32
сделай контейнер для билдов: node+angular+..., в него монтируй билд директорию. вторым шагом добавляй dist в контейнер на базе nginx
Google
Dmitry
31.05.2019
10:23:50
в первый можешь еще добавить nginx если хочешь, и юзать его в dev
Alex
31.05.2019
10:24:46
Dmitry
31.05.2019
10:24:59
ты имеешь в виду сервер статики?
Andrey ?
31.05.2019
10:25:07
если юзать на одной тачке докер (+ docker compose) и кубернейтес, не будет ли весь этот зверинец конфликтовать?
Dmitry
31.05.2019
10:25:10
и зачем проксить через nginx если ты можешь просто сервить через nginx
Alex
31.05.2019
10:25:58
да, наверное, это называется сервер статики)
сервить через nginx? это как, чего?
Dmitry
31.05.2019
10:28:04
сервить через nginx? это как, чего?
ну, запихнул бандл в docker image, в котором есть nginx, и наружу смотрит порт 8080 от nginx, на котором только твоя статика. nginx быстрее node
Alex
31.05.2019
10:30:42
А запросы к апи проксировать на отдельном node-серваке?
Maxim
31.05.2019
10:33:24
Dmitry
31.05.2019
10:36:19
но вообще, имхо проще всего на s3 засунуть)
George
31.05.2019
10:37:11
Всем привет, подскажите, пожалуйста, как правильно организовать билд и деплой ангуляр-приложения с докером. В простейшем случае - 2 версии приложения - dev и prod. Различаются режимами сборки и обращаются к различным серверам через прокси в nginx, ну и выкатываться будут соответственно на различных серверах. Просто я у себя создал 3 Dockerfile:
- Dockerfile.local
- Dockerfile.dev
- Dockerfile.prod
В них различается режим билда приложения на уровне ангуляра (dev и prod сборки), и подсовываются различные конфиги для nginx (в них различаются прокси). Из консоли я могу вызывать команду docker build -t webapp-wms . --file='Dockerfile.dev' и тогда соберется нужный образ. И я думал, что в npm-скрипт можно запихнуть эту команду, вроде:
"build-dev-image": "docker build -t webapp-wms-dev . --file='Dockerfile.dev'" , но нет, при вызове npm-скрипта вываливается следующая ошибка unable to prepare context:
unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx C:\Users\koolikov.av\Documents\projects\webapp-WMS\'Dockerfile.dev': The system cannot find the file specified.
И я могу билдить образ через npm-скрипт, но только если буду удалять расширение на нужном докерфайле .dev, .prod или .local, а это уже сильный колхоз. А хотелось бы просто, запускать билд нужного образа одной командой, которая включала бы в себя :
- удаление старого образа
- билд нового образа (dev, prod, local)
- выставление тэга этому образу для гитлаба
- пуш образа с проставленным тэгом в гитлаб
В общем, если кому не сложно, подскажите, пожалуйста, с помощью какого инструментария это все проворачивается и как вообще процесс должен быть организован? потому что мой вариант пока явный колхоз
я не понял зачем три докерфайла
Google
George
31.05.2019
10:37:16
в теории можно было одним обойтись
во-первых - мультистейдж
во-вторых - можно ARG передавать переменные внутрь контейнера на стадии сборки и в зависимости от этого что-то делать
например, выбирать команду для сборки
Dmitry
31.05.2019
10:38:02
George
31.05.2019
10:38:32
ну, ты можешь в докер слое его держать
типа
FROM node as cache
blablabla
build cache
FROM alpine as release
COPY --from=cache bababla node_modules
но проблема в том, что кэш ноды тогда легко просрать
Maxim
31.05.2019
10:43:21
да, жать там, или в cdn отдавать / подменять
Мы реализовали возможность через get параметры передавать необходимые размеры, фильтры, конвертацию, и много чего еще, для изменения картинки, если интересно могу скинуть ссылку на сервис который мы прикрутили к проекту, нам нельзя было использовать сторонние сервисы для работы с нашей статикой, но взять сторонний сервис и сделать частью нашего приложения это всегда пожалуйста, поэтому было решено поселить его в нашем зоопарке, есть не просит, в быту неприхотлив, живет в отдельной клетке
Dmitry
31.05.2019
10:44:13
билдить кеш отдельно?
George
31.05.2019
10:44:34
docker build —target=cache
Dmitry
31.05.2019
10:47:54
ну ок, как кеш передать в другой билд?
если раннер на другом сервере, итд
или подразумевается что делаем билд на одном и том же сервере?
и как тогда он понимает наличие кеша когда мы запускаем docker build —target=cache?
там же npm install в одном слое
Eugene
31.05.2019
10:50:55
собираю swarm, оказалось, что в контуре overlay полноценно не работает, но связь между кортейнерами и самими серверами работает нормально. собираюсь передать в контейнер информацию об адресах серверов сервиса (в виде переменной, например) и заставить сервис ходить на адреса серверов. хотелось бы, чтобы адреса вычислялись в момент запуска компоуза, как такое провернуть? не слишком завернул, понятно о чём речь?
Dmitry
31.05.2019
10:51:27
по идее можно сделать билд кеш имиджа, и в нем же билдить кеш. то есть на момент запуска docker build в from имидже уже будет старый кеш
Google
Vladimir
31.05.2019
10:58:40
Всем привет. Есть следующая задача - написать интеграционный тест изолированный для pcap сниффера. Т.е. мне нужно в одном контейнере иметь сетевой интерфейс в promiscuous mode и из другого контейнера туда направить сетевые пакеты (dns запрос). Может кто-то подсказать, в каком направлении копать и вообще возможно ли это?
Спасибо.
Alex
31.05.2019
11:07:32
во-первых - мультистейдж
во-вторых - можно ARG передавать переменные внутрь контейнера на стадии сборки и в зависимости от этого что-то делать
я в докере вообще не разбираюсь - я фронтенд, и я думал, что в докерфайле нельзя исполнять какие-то условия. Т.е по уму, конечно было бы прописать скрипт 'build-dev-image': docker build -t webapp-wms-dev . ARG MODE=DEV, и в зависимости от него в инструкции Dockerfile сделать нужные манипуляции.
Что-то вроде:
FROM node:8-alpine as buildContainer
COPY . /app
WORKDIR /app
RUN npm install
IF (MODE == 'LOCAL' || MODE == 'DEV') {
RUN npm run build
} ELSE {
RUN npm run build
}
FROM nginx:alpine
COPY --from=buildContainer /app/dist/webapp-WMS /app
IF (MODE == 'LOCAL') {
COPY --from=buildContainer /app/deploy-configs/local/nginx.conf /etc/nginx/nginx.conf
}
IF (MODE == 'DEV') {
COPY --from=buildContainer /app/deploy-configs/dev/nginx.conf /etc/nginx/nginx.conf
}
IF (MODE == 'PROD') {
COPY --from=buildContainer /app/deploy-configs/prod/nginx.conf /etc/nginx/nginx.conf
}
COPY --from=buildContainer /app/mime.types /etc/nginx/mime.types
COPY --from=buildContainer /app/gzip.conf /etc/nginx/gzip.conf
EXPOSE 9000/tcp
George
31.05.2019
11:07:47
Alex
31.05.2019
11:08:06
если условные конструкции в dockerfile возможны, то это решит все проблемы
George
31.05.2019
11:08:33
смотри
1. итерация - делаешь билд
получаешь образ node-cache:latest
2. а потом его же используешь в качестве FROM: node-cache:latest as cache
херота в том, что если образа изначально нет - ты сосешь лапу
Dmitry
31.05.2019
11:10:13
просто изначально мультистейдж это не ответ для node_modules, .npm
George
31.05.2019
11:10:29
FROM ololo
ARG TYPE
ENV TYPE=$TYPE
COPY ./my_build.sh my_build.sh
RUN ./my_build.sh
и всю переменную часть (в зависимости от TYPE) засунуть в my_build.sh
т.е. у тебя выбор ветки будет именно в my_build.sh
в принципе Флант к чему-то подобному пришел со своей утилитой dapp
Google
George
31.05.2019
11:15:40
количество базовых примитивов весьма сильно ограничено
Alex
31.05.2019
11:16:58
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi нашел такой пример, любая условная конструкция начинается с RUN? и еще и заканчивается каким-то fi
спасибо, ребят, был убежден, что в докере нет условных конструкций никаких, от этого и подзакипел
Alexey
31.05.2019
11:18:23
Dmitry
31.05.2019
11:20:10
я бы все равно сделал dev/build контейнер и еще один в качестве деплоя
George
31.05.2019
11:21:45
Roman
31.05.2019
11:22:25
Привет, у меня есть бинарник хотел его в контейнер запихать так вот выглядит докер файл:
FROM alpine
ADD test /usr/bin/
ENTRYPOINT /usr/bin/test
Собираю
docker build -t test .
Запускаю:
docker run test
Вижу:
/bin/sh: /usr/bin/test: not found
Что я не так делаю?
George
31.05.2019
11:22:40
1. не используй ADD
2. используй COPY
3. у тебя chmod +x сделан?
Roman
31.05.2019
11:23:02
+
Alex
31.05.2019
11:24:00
Roman
31.05.2019
11:24:32
George
31.05.2019
11:24:35
потом отрефакторишь
Roman
31.05.2019
11:24:56
Ivan
31.05.2019
11:25:12
[ "$argname" = "false" ] && echo false || echo $argname
Google
George
31.05.2019
11:25:17
делаешь docker run -it --rm --entrypoint /bin/sh test заходишь в консоль контейнера и все проверяешь глазами
наличие файла, что он выполняется, и т.п.
а то вдруг окажется, что ты еще и к glibc прилинковался
Ivan
31.05.2019
11:26:51
ldd test - какие библиотеки использует бинарник
Roman
31.05.2019
11:27:52
ldd /usr/bin/test
/lib64/ld-linux-x86-64.so.2 (0x7f676b598000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f676b598000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f676b598000)
George
31.05.2019
11:28:14
оооо. libc ?
Roman
31.05.2019
11:29:04
это ГОшный бинарник, я хз, может алпайн не подходит
George
31.05.2019
11:29:12
попробуй в убунту засунуть
Dima
31.05.2019
11:29:41
Ребят, расскажите кто какую ci систему использует, там jenkins, teamcity или gitlab ci, просто интересна эта вещь))
И если не сложно, то почему именно это и выбрали
George
31.05.2019
11:29:45
по крайней мере поймешь дело в alpine или нет. Если же хочется прям по феншую - можешь потом сборку в golang:alpine делать, чтобы ОС, в которой компилится - была той же, что и целевая
это не столь принципиальный вопрос. Из указанных трех проще начать с гитлаба
Dima
31.05.2019
11:30:27
все
А какая больше нравится? и почему)
George
31.05.2019
11:31:19
никакая. все говно
Dima
31.05.2019
11:31:27
George
31.05.2019
11:31:27
попробуйте гитлаб - я серьезно
2000 минут - это жесть как много. Для маленького проекта за глаза. Тем более, что минуты можно докупать
если нужно больше - можно свои раннеры подключить, и тогда минут безлимит ДАЖЕ С ОБЛАЧНЫМ гитлабом
Dima
31.05.2019
11:32:44
Свои раннеры - это к примеру какие?
Alexey
31.05.2019
11:33:09
Roman
31.05.2019
11:33:40
спасибо за наводку, скомпилил с -tags netgo взлетоло
Dima
31.05.2019
11:38:07
Просто была такая задача, человек 8 разрабатывают сервис, фронт+бек. С докером и git. Дальше было интересно как настроить ci. Раньше был на сервере sh скрипт и всё?
А теперь хочется сделать все нормально и удобно. И тип возник вопрос github vs gitlab и jenkins vs gitlab ci и как всё это лучше связывать