Ответы пользователя по тегу Docker
  • Создание docker container под паролем?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Нет. Самое оптимальное - переезжать на выделенный ТОЛЬКО ДЛЯ ВАС VDS (где будете только Вы). Ищите на базе KVM-виртуализации - это полноценные виртуалки и не очень дорогие. Если будут предлагать lxd/openvz - лучше воздержаться, там виртуализация не совсем настоящая (они в чем-то похожи на докер больше, чем на kvm)
    Ответ написан
    Комментировать
  • Контейнер с ElasticSearch грузит cpu, как найти причину?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Как бы это и нормально. JVM и Эластик, который на базе нее построен, достаточно охочие до памяти и CPU
    Ответ написан
    Комментировать
  • Не могу приконектится к elasticsearch используя докер, в чем может быть причина?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Что такое второй конфиг? 0.0.0.0 - хост указывается только в параметрах сервера эластика, чтобы он "слушал" по всем адресам, а не на каком-то конкретном. В клиенте надо указывать ЛИБО айпи адрес эластика (хоста или контейнера), ЛИБО имя контейнера (сервиса) - если эластик запущен в контейнере

    localhost и 127.0.0.1 для контейнера - это, вполне логично, этот же самый контейнер. В котором ЕСТЕСТВЕННО эластик не запущен. Поэтому так делать бессмысленно. Но есть исключение - когда контейнеры запускаются без изоляции сети (--net host)
    Ответ написан
    Комментировать
  • Почему Docker контейнер не отправляет логи?

    gecube
    @gecube
    системный администратор, программист... все дела..
    1. если у вас грейлог - можете использовать GELF драйвер
    2. чтобы грейлог принимал логи - надо настроить т.н. INPUT с соответствующими параметрами - раз, два - разрешить подключения к ним снаружи файрволлом или, если грейлог в контейнере, добавить соответствующие порты к пробросам
    3. при прочих равных я рекомендую пользоваться journald драйвером, т.к. он не ломает docker logs команду - можно будет логи смотреть локально + в нем есть еще куча штуковин вроде rate limit, ротации и прочего, что позволяет обеспечить минимальное влияние логов на хостовую систему. А уж из journald можно настроить пересылку в грейлог - как бонус получите сообщение с самой хост машины (будто ее логи никому не интересны)
    Ответ написан
    1 комментарий
  • Что за ошибка докера?

    gecube
    @gecube
    системный администратор, программист... все дела..
    ну, все написано - когда монтируете, то можете только файл на файл или каталог на каталог монтировать. Иногда бывает, что если в volume слева указан файл, который на хосте не существует, то докер сходит с ума. И создает вместо него каталог с правами root:root.
    Какое может быть решение? Для начала прекратить пользоваться упрощенным синтаксисом -v в docker run или volumes в docker-compose, а использовать расширенный синтаксис mount (который с --mount). Тогда, если на хосте нет нужного файла, то докер контейнер ТУПО не стартанет и будет внятное сообщение об ошибке вроде:

    docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /home/local/georg.gaal/formulas.
    See 'docker run --help'.


    При этом Вы еще бонусом и получаете то, что докер не будет пытаться изменить права на каталог. А создаваемые внутри файлы будут с теми правами, которые установлены внутри контейнера - сплошная лепота. Минус в том, что все необходимые каталоги и файлы для запуска контейнера надо создавать заранее. Т.е. уже коллегам надо отдавать докер-компоуз файл плюс bash-скрипт
    Ответ написан
    2 комментария
  • Как правильно организовать разработку с использованием docker?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Черновой ответ, потому что у всех детали могут отличаться - делайте как Вам удобнее.

    1. Есть принципиально два подхода. Первый - один репозиторий - один артефакт. Он достаточно удобен, т.к. позволяет раздавать доступы на репозитории разным командам, если они пилят разные модули. Так же это в рамках гита позволяет удобно реализовать разные релизные циклы для разных модулей. С другой стороны - сразу получаете проблему интеграции всех этих репозиториев в единую систему. Обычно решается каким-то мета-репозиторием, который знает как собрать проект из кусочков. Или инклюдит все остальные репозитории как субмодули. Еще если маленьких репозиториев очень много и нужно вносить параллельные изменения в несколько сразу - это очень неудобно для разработчиков. Вторая крайность - это монорепозиторий. Когда ВЕСЬ проект состоит из одного репозитория. Это очень удобно в ситуации, когда у Вас только ОДНА, крайняя версия продукта. Т.к. всегда все собирается из одного коммита и либо все сразу срастается и есть гарантии совместимости всех модулей, либо надо исправлять код ) При этом зачастую приходится очень четко продумывать структуру проекта (например, раскладывать каждый отдельный модуль в отдельный каталог), теряете возможность работы с внешними подрядчиками (придется им заводить отдельные репки + настраивать синхронизацию), делать всякие обертки, чтобы не собирать весь проект, а только изменившиеся части, т.к. сборка всего может быть очень долгой. Но, да, этот подход тоже имеет право на жизнь. Тем более пока не попробуете сами - точно не сможете понять, что лучше
    docker-compose - это хорошо для разработки и моделирования кучки сервисов. Для продакшена не очень хорошо.

    2. Идеально - один контейнер - один сервис. Но для целей разработки можно использовать контейнеры как средство доставки чего бы то ни было и там рождаются кадавры с несколькими сервисами в одном контейнере. Но для продакшена это не очень.

    3. ansible, gitlab-ci

    4. все имеет значение. Зависит от ваших возможностей и задач. Точно стоит избегать всяких OpenVZ, лучше всего деплоится на настоящие виртуальные машины. Как правило они на KVM технологии. По операционной системе - лучше брать то, с чем умеете работать, либо можете привлечь специалистов. Т.е. популярные варианты - centos, ubuntu, debian. Все остальное можно рассмотреть только в случае каких-либо _особых_ требований. Например, очень крутая штука CoreOS, если запускать ТОЛЬКО лишь контейнеры - ничего лишнего, атомарные обновления, но хорошо это работать будет только на виртуалках, а если надо запускаться на железном сервере ? То тут уже нюансы

    5. никак. Она с докерами никак не дружит.

    6. Думать. Проектировать. Очень важно понимать как будет запускаться приложение, сколько будет реплик, как они будут взаимодействовать, делить общие ресурсы (файлы, записи в БД, очереди и пр). Касательно файлов - для докер-контейнеров - чтобы обеспечить их сохранность, все нужное нужно писать либо в bind mount, либо в volume - тогда данные не пропадут при удалении контейнера.

    > Насколько я понимаю, при разворачивании очередного релиза старые контейнеры сносятся и ставятся новые - это так?

    Совсем высокоуровнего - да, так.
    Ответ написан
    4 комментария
  • How to run docker on read-only filesystem?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Не получится на ro.
    Докер хранит свое состояние в /var/lib/docker
    Туда же идут образы, данные и конфигурации контейнеров и пр. пр. пр.

    Какие варианты я вижу:

    1. Монтировать указанный каталог на tmpfs
    2. Отказаться от использования docker, поставлять сервисы "запеченными" в основной образ с ОС на RO ФС
    3. Перейти на альтернативные технологии контейнеризация типа systemd-nspawn
    Ответ написан
  • Что такое докер на простом примере?

    gecube
    @gecube
    системный администратор, программист... все дела..
    docker - это не про бекап сервера. Если хочется контейнеризацию операционки, то нужен LXC/LXD.
    А в Вашем случае нужен рефакторинг всего содержимого сервера. Короче - докер поможет структурировать эту свалку из сервисов и более удобно ею управлять. Но для этого нужно приложить усилия.
    Ответ написан
    Комментировать
  • Как правильно работать с пользователями в Docker-контейнерах?

    gecube
    @gecube
    системный администратор, программист... все дела..
    > Как работает параметр user при запуске докер-контейнеров и, самое главное - как обрабатывать его при написании своих Dockerfile'ов?

    никак. Параметр user это костыль, который позволяет софт запускать не от root'ового пользователя. Объяснять почему запускать в докере под пользователем 0 (root) что-либо - долго, но если кратко, то это очень плохо и не секурно. Соответственно, правильный путь Вы уже поняли:

    1. определять entrypoint контейнера как свой самописанный docker-entrypoint.sh скрипт
    2. в docker run оставить возможность передать ключ (точнее - переменную среды) USER
    3. в docker-entrypoint.sh его (ее, переменную среды) подхватывать и изменять через chmod/chown нужные файлы в bind-mount (каталогах, доступных и в контейнере, и на хосте) и через утилиту gosu переключаться в нужного пользователя
    4. и только как завершающий этап - запускать свой сервис в докере


    Что еще добавить. Все эти проблемы с chown/chmod возникают только если необходимо перегонять файлы между контейнером и хостом. Если этой задачи не стоит, то и все приседания и не нужны. А если все-таки нужно, то есть еще два способа это сделать без колдования с правами:
    • команда docker cp
    • использование pipe: docker exec container_name cat MY_FILE > path_on_host или аналогично
    Ответ написан
    4 комментария
  • Как исправить проблему с docker?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Написано же - неверный конфигурационный файл nginx
    Вероятная причина: в качестве апстрим указан другой контейнер. И он не стартанул или упал на момент запуска nginx
    Ответ написан
    Комментировать
  • Безопасно ли хранить БД в volumes?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Для начала надо понять, что чтобы БД не пропала - ее нужно сохранить вне контейнера. Т.к. контейнер эфемерен, и его ФС может исчезнуть при удалении контейнера. Есть два способа для этого: volume и bind mount. Первый сохраняет данные в именованном или неименованном volume в каталоге /var/lib/docker/volumes и есть риск, что его случайно удалите (например, при docker-compose down -v ). Второй способ позволяет хранить данные вовне контейнера в файловой системе хост машины. Это более надёжно.
    Ответ написан
    Комментировать