Pavel
забанят letsencrypt в один день - с ума посходите)
ага, на Новый Год (31 декабря, ближе у вечеру) - и праздник обеспечен 🤣🤣🤣
Tadeusz
ну это не важно когда, сам факт — геморроя хватит надолго 🙂
Pavel
ну это не важно когда, сам факт — геморроя хватит надолго 🙂
ну не скажи... когда все за стол садятся, а приходися бегать как намыленый без воды и совсем другое дело когда сидишь в офисе
Tadeusz
лол, кто ж тебя заставяет в 21-м веке сидеть в офисе?
Tadeusz
это ж не принтеры чинить
Tadeusz
дома нет?)
Pavel
а халява...
Tadeusz
дык застолье же
Petr
"локальной машине собираю статику и потом только билжу отбраз. Далее nginx отдает статику, а все остальное на рельсу идет." - вот тут не понятно, образ один или всё-таки два? И в каком образе что в итоге?
Alexander
Можно подробнее? Подход, который вы используете в сворме "два образа, один nginx+статика и один с рельсой" - это я понял. А вот в первом предложении (т.е. как было до перехода на сворм), тут не понял
если не ошибаюсь должно работать: volumes: - image:<path_to_static>:<path_to_mount> но это третья версия Другой вариант как вам подсказили на этапе билда встраивать посредством COPY или ADD в образ (если в продакшин отправляете). Если только локально пользовать, вполне локальным маунтом можно обойтись
Gaiaz
вот такой вопрос: в volumes пишет как хост машина, так и контейнеры, как добиться одинаковых linux-пользователей и групп? или в этом нет необходимости?
Ihor
"локальной машине собираю статику и потом только билжу отбраз. Далее nginx отдает статику, а все остальное на рельсу идет." - вот тут не понятно, образ один или всё-таки два? И в каком образе что в итоге?
Собираю локально статику, потом билджу образ, далаее пушу в свой реджистри. Потом в docker-compose через параметр volumes_from подключаю в контейнер с nginx волюм со статикой. Получается что все в одном образе, и только волюм прокидывается в контейнер с nginx.
Petr
Собираю локально статику, потом билджу образ, далаее пушу в свой реджистри. Потом в docker-compose через параметр volumes_from подключаю в контейнер с nginx волюм со статикой. Получается что все в одном образе, и только волюм прокидывается в контейнер с nginx.
"Потом в docker-compose через параметр volumes_from подключаю в контейнер с nginx волюм со статикой." - вот это то что мне нужно, спасибо за информацию! Уже гуглю volume_from... А можете показать свой docker-compose.yml где можно на это посмотреть?
🦁Владимир🏡
Привет. Можете показать на готовый dockerfile с завернутым приложением на node.js
🦁Владимир🏡
?
Anton
смотря для какого приложения
🦁Владимир🏡
http server
🦁Владимир🏡
FROM node:9.3.0 # Create app directory WORKDIR /home/vladimir/Documents/Repo # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY package*.json ./ RUN npm install # If you are building your code for production # RUN npm install —only=production # Bundle app source COPY . . EXPOSE 8080 CMD [ "npm", "start" ]
Ihor
"Потом в docker-compose через параметр volumes_from подключаю в контейнер с nginx волюм со статикой." - вот это то что мне нужно, спасибо за информацию! Уже гуглю volume_from... А можете показать свой docker-compose.yml где можно на это посмотреть?
version: '2' networks: default: external: name: service-tier app: volumes: uploads: dbdata: services: nginx: restart: always image: nginx:stable container_name: "${PROJECT_NAME}_nginx" networks: - default - app volumes: - "./nginx.conf:/etc/nginx/nginx.conf:ro" volumes_from: - app links: - app environment: VIRTUAL_HOST: ${VIRTUAL_HOST} VIRTUAL_NETWORK: app ports: - '80:80' db: restart: always image: postgres:9.6 container_name: "${PROJECT_NAME}_db" networks: - app environment: POSTGRES_DB: "${POSTGRES_DB}_production" POSTGRES_USER: ${POSTGRES_USER} volumes: - dbdata:/var/lib/postgresql/data app: restart: always build: '.' container_name: "${PROJECT_NAME}_app" image: "registry.xxxx.com/${PROJECT_NAME}/app:latest" volumes: - uploads:/app/public/uploads links: - db networks: - app environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_HOST: ${POSTGRES_HOST} SECRET_KEY_BASE: ${SECRET_KEY_BASE} VIRTUAL_HOST: ${VIRTUAL_HOST} depends_on: - db
Anton
и пробрасывай каталог при запуске контейнера
Anton
docker run -v path:/home/vladimir/Documents/Repo -p 8080:8080 imagename
🦁Владимир🏡
WORKDIR это директория в нутри контейнера?
Anton
WORKDIR это директория в нутри контейнера?
рабочая директория в контейнере, из которой будут выполняться команды
Petr
version: '2' networks: default: external: name: service-tier app: volumes: uploads: dbdata: services: nginx: restart: always image: nginx:stable container_name: "${PROJECT_NAME}_nginx" networks: - default - app volumes: - "./nginx.conf:/etc/nginx/nginx.conf:ro" volumes_from: - app links: - app environment: VIRTUAL_HOST: ${VIRTUAL_HOST} VIRTUAL_NETWORK: app ports: - '80:80' db: restart: always image: postgres:9.6 container_name: "${PROJECT_NAME}_db" networks: - app environment: POSTGRES_DB: "${POSTGRES_DB}_production" POSTGRES_USER: ${POSTGRES_USER} volumes: - dbdata:/var/lib/postgresql/data app: restart: always build: '.' container_name: "${PROJECT_NAME}_app" image: "registry.xxxx.com/${PROJECT_NAME}/app:latest" volumes: - uploads:/app/public/uploads links: - db networks: - app environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_HOST: ${POSTGRES_HOST} SECRET_KEY_BASE: ${SECRET_KEY_BASE} VIRTUAL_HOST: ${VIRTUAL_HOST} depends_on: - db
Спасибо! Вижу внутри сервиса nginx: volumes_from: - app если я правильно понял, это значит, что внутрь контейнера nginx подключаются все volumes из контейнера app ("Mount all of the volumes from another service or container" https://docs.docker.com/compose/compose-file/compose-file-v2/#volume_driver) Далее смотрю в описание сервиса app, там всего один volume: volumes: - uploads:/app/public/uploads значит ли это, что в nginx контейнере появляется точно такая же папка /app/public/uploads в которой точно такое же содержимое, как в app контейнере? Статика вашего приложения (js, css) находится в /app/public/uploads?
Ihor
У меня в Dockerfile волюм прописан который шарится: ENV INSTALL_PATH /app RUN mkdir -p $INSTALL_PATH WORKDIR $INSTALL_PATH VOLUME ["$INSTALL_PATH"]
Anton
У меня в Dockerfile волюм прописан который шарится: ENV INSTALL_PATH /app RUN mkdir -p $INSTALL_PATH WORKDIR $INSTALL_PATH VOLUME ["$INSTALL_PATH"]
а если нужно будет монтировать из другого каталога? тогда придется пересобирать образ
Ihor
У меня в /app весь код который пробрасывается в контейнер nginx. Что может мне ещё понадобиться монтировать?
Petr
Инструкция VOLUME внутри Dockerfile - вот чего мне не хватало в этой головоломке, теперь многое становится понятно
Andrey
Коллеги, как правильно разрешить запущенному контейнеру доступ к определенным портам хост-машины? (через docker-compose) Нашел костыль "docker.for.win.localhost" с которым оно кое-как шевелится под виндой, но ни разу не кросс-платформенно же.
petyappetrov
о, я слушаю ваши подкасты
Maxim
Коллеги, как правильно разрешить запущенному контейнеру доступ к определенным портам хост-машины? (через docker-compose) Нашел костыль "docker.for.win.localhost" с которым оно кое-как шевелится под виндой, но ни разу не кросс-платформенно же.
недавно боролся с этой проблемой. Самый простой вариант добавить --net="host", но это откроет все. Так же обращу внимание, что под mac os x - не заработает. Так как там docker в виртуалке.
Maxim
но вообще это в сторону сетей надо смотреть. Вроде через --net="bridge" и проброса конкретных портов может заработать. Но это не точно)
Maxim
проще, конечно, на хостовой машине сервисы положить в другие контейнеры, в docker сделать отдельную для них сеть и тогда все увидят что надо)
Andrey
пробовал network_mode: "host" (вроде аналог —net="host" для компоуза) но тогда nginx proxy_pass сходу не подцепился :(
Andrey
а вот через мэджикворд docker.for.win.localhost в прокси_пассе рабоатет "на ура" без всяких хост моде, но только под виндой, естесно :)
paulwinex
Приветы Возможно не в тему, но я пытаюсь тестить проект в докере с разных компов и столкнулся с проблемкой. Докер крутится на виртуалке ubuntu в vmware. С локального хоста я захожу на виртуалку норм, но с других компов в локальной сети не получается зайти. Когда в виртуалке сеть настроена как NAT то оно и понятно что не получится. Но с Bridged тож не получается, тогда всё совсем ломаета и нет нигде ни инета ни связи. Может кто подсказать как виртуалку расшарить в локальную сеть?
twwlf
плохо настраиваешь бридж
twwlf
с NAT тоже можно настроить
paulwinex
на хосте винда кстати
paulwinex
вот не получилось. там надо чтото внучную всякие DNS пробивать?
paulwinex
подскажете что тыкнуть?
twwlf
в гугл про vmware port forwarding
paulwinex
ок
🦁Владимир🏡
Я бы вот так не делал. У вас в образе будут лежать все node_modules
Я бы хотел положить только собранное приложение и запустить
🦁Владимир🏡
без модулей
Igor
Я бы хотел положить только собранное приложение и запустить
У нас используется Angular 4+ Процесс вышел следующим образом: 1) Докер собирается 2) Запускается на swarm там в entrypoint прописано что бы npm install прошел и другие моменты 3) Монтируем в nginx только dist (в нашем случае иначе папка называется\)
Igor
А nginx он тоже в контейнере?
Да отдельно у нас с репликами и т.д. 1) Nginx 2) Backend 3) FrontEnd ну и еще кучка сервисов
🦁Владимир🏡
Да отдельно у нас с репликами и т.д. 1) Nginx 2) Backend 3) FrontEnd ну и еще кучка сервисов
Я виндовозник всю жизнь. С выходом asp.net core решил изучить технологии, так если, что не пинайте меня.
Макс
Здраствуйте, подскажите, как обычно решаются конфликты портов в docker-compose development среде? Запущена например у меня база постгрес локально, и в докере есть база. При старте ругается на порт. Одно решение мапить через docker-compose порты, но приходится придумывать в случае если запущены несколько инстансов docker-compose окружений в фоне. Есть ли лучшее решение?
Ihor
Очень жаль. А как именно вы передаете инфу? Я просто сейчас билджу два образа, один nginx с уже собраной статикой внутри и один с беком.
Ihor
И это мне ужастно не нравится
Igor
Вы тоже используете docker stack deploy?
Ihor
Да
Igor
в volumes: volumes: images: {} В сервисе (допустим backend): volumes: - images:/var/....../images:rw В nginx: volumes: - images:/var/www/..../web/images:rw данные записываются через entrypoint
Igor
Это то что в docker-compose...yml
Igor
У нас просто еще все с autobuild делал
Igor
#!/bin/sh set -e if [ "${1#-}" != "$1" ]; then set — npm "$@" fi if [ "$1" = 'npm' ]; then chown -R www-data:www-data . echo "Execute npm install..." npm install echo "Execute npm cache clean" npm cache clean —force echo "Execute npm run build" npm run build fi exec "$@" "run" "prod"
Igor
это entrypoint пример для node
Igor
соответственно в Dockerfile ENTRYPOINT ["frontend-entrypoint.sh"] CMD ["npm"]
Igor
Да
Надеюсь не очень сумбурно вышло +_+
Ihor
Получается вы один волюм в два сервиса маунтите?
Igor
Получается вы один волюм в два сервиса маунтите?
Да, суть волума - данные которые не должны удаляться и меняться. Выходит что пока у меня не пройдет полный deploy у сервиса - nginx не увидит изменения в volume
Igor
это конечно в случае с Angular. npm run build -> там чуть перенастроен.
Igor
Можно было заморочиться и в volume хранить версионность, но нам хватает поддерживать версии продакшена и девелоп серверов на базе image:tag
Ihor
Понял, спасибо. Тут минус получается в том, что нужно nginx и бек гвоздями прибивать к ноде
Igor
зачем?
Ihor
Волюм же храниться только локально
Igor
не обязательно
Ihor
Вы волюмы шарите?