• Docker-compose как правильно установить порядок создания и запуска контейнеров?

    Если я правильно понял, сейчас сделано так, что composer начинает свои делишки в запущенном контейнере, а не в процессе билда – создания собственно контейнера.

    Кажется, решением было бы создавать собственный image на основе образа composer'а, и подкачивать файлы в процессе построения. А запускать его уже, построенного.

    В подпапке ./Composer создать Dockerfile с чем-то подобным:
    FROM composer:latest
    VOLUME ./data  /data
    RUN apt-get update && apt-get install git && git pull trololo && composer install

    А в docker-compose.yml
    services:
      composer:
        build: ./Composer


    Так пока образ билдится, выполняя все что там в Dockerfile, он не считается запущенным, и не стартуют зависимые от него (depends_on) следующие сервисы.
    Ответ написан
    8 комментариев
  • Docker-compose как правильно установить порядок создания и запуска контейнеров?

    @k0nart
    Посмотрите в сторону https://github.com/jwilder/dockerize. Он умеет ждать когда зависимости будут готовы, работает с разными проколами, в т.ч. file/, можно дождаться когда на докере появится файл Х и тогда начать собирать второй. (ну или по аналогии с другими протоколами, как удобнее)
    Ответ написан
    4 комментария
  • Как развернуть копию контейнера с сохранением состояния?

    По-хорошему лучше монтировать в докер-контейнер volume с данными: держать данные отдельно от движка.
    docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
    
    ### или создать дата-volume и его приделать к контейнеру
    docker volume create data_volume
    docker run --name some-mysql -v data_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
    ### так после выключения контейнера данные не пропадут, останутся в этом data_volume, 
    ### который можно скопировать, подключить к другим контейнерам

    Но, тем не менее:

    Вариант 1.
    Экспортировать в папку на хосте данные из базы с помощью mysqldump или какая там у вас база. Бэкапы, в любом случае, делать необходимо. Поднять копию контейнера, импортировать в неё данные из дампа. Примеры команд для mysql в docker см. внизу в секции Creating database dumps:
    ### Creating database dumps
    docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
    
    ### Restoring data from dump files
    docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql


    Вариант 2.
    Сохранить текущее состояние контейнера через docker commit — получится новый образ со всеми изменениями. Запустить его как копию.
    Ответ написан
    3 комментария
  • Как решить задачу в Redis?

    @dmtrrr
    Backend developer
    В процессе обработки файлов заводишь в редисе необходимые счетчики. Задача, как мне кажется, не в использовании редис, а в параллельной обработке большего кол-ва файлов.
    Ответ написан
    Комментировать
  • Какой контроллер выбрать?

    @harabudjasim
    Как по мне, так это очень комплексная задача. Ее нужно разделить на несколько подзадач, например, сбор, обработка, отображение и управление.

    Для сбора и управления отлично подходят ардуины, также и как расширители портов.

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

    Теперь замечания:
    Про реалтайм в такой системе можно сразу забыть. И не пытаться его сюда приплести. Реалтайм нужен для управления топливной системой, тормозами, еще чемто, где бой идет за микросекунды. Для мониторинга или управления печкой он абсолютно не нужен, обычный линукс вполне справится с поставленными задачами, залержка в 100 милисекунд при включении печки или обновлении позиции на GPS это вполне нормальные показатели. Проверьте отклик обычного навигатора, там цифры похуже бывают.
    Итог: реалтайм - системы для более жизненноважных элементов. они сложны и трудоемки, у Вас и без этого будет мороки :).

    Ардуины и другие development boards. Они все расчитаны на работу в тишине и покое, на столе, в серверной, в шкафу. В автомобиле же есть куча вещей которые будут влиять на эти хрупкие девайсы: вода, вибрация, грязь, нестабильное питание.
    Подумайте о защите этих устройств или готовьтесь к самостоятельной их разработке. Я бы сделал вариант ардуино с нужной мне обвязкой на одной плате и залил бы все компаундом, чем надеялся что ардуиновская этажерка не развалится от вибрации.

    Вывод: смотрите на модульную систему из ардуино и какого-то линукса, даже распберри хватит.
    Ардуино легко повторить и встроить куда нужно, а линукс идет в красивой упаковке с экраном и тачскрином.
    Ответ написан
    1 комментарий