Задать вопрос
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    Владимир, если речь о том, что в контейнере не видно файлов в текущем каталоге, то это более чем логично, ведь на самом деле для сборки докер создаёт временные контейнеры, внутри которых выполняет все инструкции сборки из Dockerfile. Естественно, внутри этих временных контейнеров своя собственная файловая система, которая наследуется от базового образа и затем поэтапно по мере сборки наполняется файлами через инструкции типа RUN, COPY, ADD.
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    Владимир,
    как понять на базе?


    Допустим, мы берём любой базовый образ, например, ubuntu, и делаем на его базе свой образ с нужным нам софтом. Например:

    FROM ubuntu
    RUN apt-get -y update && apt-get install nodejs && rm -rf /var/cache/apt/*


    (Зачем мы объединяем команды и удаляем кэш я думаю должно быть понятно из предыдущего комментария)

    Соберём этот образ:

    docker build -t my-base:v0.1 -f Dockerfile.my-base .


    Но в целом можно поискать готовый базовый образ с нужной версией node.js в докерхабе. Заодно почитать Dockerfile, чтобы посмотреть, как другие делают.

    Затем в других образах мы можем использовать этот:

    FROM my-base:v0.1
    ADD my_app /app
    WORKDIR /app
    RUN npm install library1 dependency2
    COMMAND node /app/main.js


    Если мы сделаем 10 таких образов с разными приложениями, то их обшая часть - базовый образ - будет одна и та же и не будет занимать отдельного места.

    Можно делать ещё больше разнообразия. Например, пусть у нас часть образов работают с базой данных Oracle. Для этого придётся затащить в образ библиотеки Oracle InstantClient, которые довольно здоровые, да и замороченно их устанавливать каждый раз. Поэтому мы можем сделать образ my-oracle-base, в котором они заранее установлены, чтобы на его базе делать образы приложений, которым нужен доступ к Oracle. Примерно так:

    FROM my-base:v0.1
    RUN apt-get update && apt-get install -y libaio1 wget unzip \
        && wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip \
        && unzip instantclient-basiclite-linuxx64.zip \
        && rm -f instantclient-basiclite-linuxx64.zip \
        && cd /opt/oracle/instantclient* \
        && rm -f *jdbc* *occi* *mysql* *README *jar uidrvci genezi adrci \
        && echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig \
        && npm install oracledb


    (Рецепт установки instantclient подсмотрен тут)

    Это всё просто небольшие примеры, я всё же советую воспользоваться советом из решения ниже и немного изучить основы вкупе с best practices. Это улучшит понимание, ипоможет грамотнее организовать разработку и сборку.
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    Владимир, если слишком намудрить, то и не такое будет. Но вообще большинство ошибок с докером связаны с непониманием того, как он работает.

    Например, такая вот весьма типичная ошибка:

    RUN wget http://example.com/1gb.zip
    RUN rm 1gb.zip


    В этом примере будут созданы два слоя: в одном будет добавлен файл размером 1 Гб, в другом - удалён. Но при этом файл никуда не денется из всех образов, в которых был этот слой. Пусть даже его и не видно теперь в унаследованных образах.

    Решение простое: объединать команды в один слой.

    RUN wget http://example.com/1gb.zip \
        && rm 1gb.zip


    Конечно, чем больше команд слито в 1 RUN, тем сложнее отлаживать сборку. Поэтому можно на этапе отладки разделить на много RUN, а потом пообъединять те команды, которые уже хорошо работают и делают всё как надо.

    Также полезно регулярно проверять вывод команды docker images на предмет всякого остаточного мусора от неудачных сборок и ненужных образов.

    Есть команда docker system prune, которая чистит неиспользуемое, но пользоваться надо очень осторожно, так как она удалит все незапущенные контейнеры, все неиспользуемые образа и тома. Докер по умолчанию сам ничего не удаляет, так как не может угадать, что нам будет ещё нужно в будущем, а что уже неактуально.
  • Как удалить слова из списка в строке, почему не работает?

    shurshur
    @shurshur
    Это пример плохого ответа на вопрос. Не объяснено, что именно было не так, автор вопроса просто скопипастит и у него заработает, а в следующий раз в фразе будет запятая, и он опять прибежит. Что-либо реальное поймёт он только от другого ответа, которые при этом решением не отмечен, хотя заслуживают этого гораздо больше.

    Да и даже если после точки нет пробела, это "решение" тоже сломается...
  • Как скрыть пароль в php-коде?

    shurshur
    @shurshur
    webymax, ну да, у этого решения тоже есть недостатки. Например, если это виртуальных хостинг с кучей сайтов на одном IP, то все эти сайты смогут отправлять через этот сервер (если догадаются посылать через него). Просто это довольно простое решение, и в некоторых случаях именно так и делают.
  • Как скрыть пароль в php-коде?

    shurshur
    @shurshur
    webymax, хотя прочитал остальную переписку и понял, что речь о защите паролей не заказчика, а исполнителя... В общем, есть решение намного проще. У хостинга с сайтом, как правило, фиксированный IP, можно просто разрешить почту с этого IP, например, через relay_networks в postfix, и тогда проблемы с передачей паролей не будет - пароль для отправки с этого IP не нужен.
  • Как скрыть пароль в php-коде?

    shurshur
    @shurshur
    webymax,
    и понимает, что заказчик может передать доступы любому стороннему разработчику


    Это должна быть головная боль заказчика, а не разработчика, что и кому он передаёт и как это всё ломает.
  • Почему простейший ТГ бот не отправляет сообщения в группу?

    shurshur
    @shurshur
    Так напиши подробности, что было неправильно и что надо было изменить, и отметь ответ решением.

    (Подсказка: в url запроса не используется токен)
  • Возможно ли подключение сервера со статическим ip-адресом от другого интернет-провайдера в другой сети другого интернет-провайдера?

    shurshur
    @shurshur
    Возможно. Но будут вопросы с маршрутизацией трафика: нужно будет настроить, что куда пойдёт. В простом варианте отдельные сети маршрутизировать в этого нового провайдера, в более сложном - городить policy routing.
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    Владимир, docker по умолчанию кэширует промежуточные стадии сборки, если не перемудрить, то собираться должно достаточно быстро.
  • Как сделать свой собственный интернет для дома?

    shurshur
    @shurshur
    Константин Фролов, это-то понятно, я просто показывал, во что можно конвертировать три миллиона.
  • Как узнать количество строк с определённым id sqlite3?

    shurshur
    @shurshur
    Если найдётся умник, что напишет ответ на этот наитупейший вопрос из первого же урока по языку SQL из любого учебника или курса, то фу и бяка!
  • Как создавать новый image в dockerfile и нужно ли?

    shurshur
    @shurshur
    image - это образ, а не "изображение".

    Делать 10 докер-файлов более чем нормально. А ещё нормально сделать свой базовый образ с node.js и основными пакетами, которые везде используются, а затем на базе него делать образы под конкретные приложения.
  • Переключение множества карт памяти?

    shurshur
    @shurshur
    eegmak, не нужно относиться к окружающим, как к низшей форме сознания, тем более к тем, кто бесплатно в своё свободное время помогает.
  • Переключение множества карт памяти?

    shurshur
    @shurshur
    eegmak, я вполне серьёзно. Если вместо странных лишённых логики вопросов описать исходную задачу, то ответы будут более конкретны, более эффективны и более целенаправлены.
  • Переключение множества карт памяти?

    shurshur
    @shurshur
    eegmak, не разделяя стиль автора предыдущего комментария, я всё же поддержу его в общей идее: кажется, что переключать десятки microSD это какая-то фигня, которая вряд ли может быть адекватным решением осмысленных задач.

    Так-то я где-то в интернетах видел платы, в которые можно вставлять сразу десяток microSD, что кажется более удобным, чем колхозить переключение карточек. Но смысл вообще какой? Если не хватает объёма одной карточки, то эффективнее купить карточку большего объёма или перейти на флешки/диски.
  • Телебот forward_message как скрыть автора?

    shurshur
    @shurshur
    Igor Gafarchik, в любом случае, в Bot API это невозможно (во всяком случае, в актуальной версии), так что придётся или смириться с показом исходного автора, или напрячься с формированием нового сообщения. Файлы при этом перекачивать не нужно, можно получить их id и передавать его вместо загрузки новых файлов с нуля.
  • Как зарегистрировать патент на алгоритмы и технологический стек?

    shurshur
    @shurshur
    Добавлю ещё, что можно вступить в конфликт с уже имеющимися патентами, поэтому перед патентованием лучше изучить поляну, а за это опытные специалисты возьмут дополнительных денег.

    Если же запатентовать то, что уже имеет патент или не защищённую патентом реализацию (prior art), то можно нарваться не только на аннулирование патента, но и на иски по возмещению финансового ущерба от тех, кто платил патентные отчисления по этому патенту.

    Рекомендую не страдать фигнёй и вложить свои знания и ресурсы в что-то действительно полезное. Например, в очередной проект для очередного заказчика.
  • Как редактировать сообщение после ввода пользователя?

    shurshur
    @shurshur
    Msondre, бот не может редактировать сообщения пользователя. В приведённом примере message - это как раз сообщение пользователя.

    Нужно было запомнить id предыдущего сообщения при его отправке куда-то, затем при ответе от пользователя достать его и выполнить требуемые действия.
  • Как начать использование асинхронного программирования?

    shurshur
    @shurshur
    1. Прочитать документацию.
    2. Начать использовать.