Ответы пользователя по тегу Docker
  • Как отредактировать конфиги контейнеров docker?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    3. Отредактировать Dockerfile и пересобрать образ.
    Ответ написан
    6 комментариев
  • Как получить доступ из docker контейнера к mysql на localhost?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Дело в том, что у каждого контейнера внутри свой loopback интерфейс с IP 127.0.0.1

    Есть два пути, чтобы добиться желаемого.

    Первый, убрать изоляцию с сети (network_mode: host), тогда всё просто заработает, но так делать не надо потому что на проде тебе никто не позволит так делать.

    Второй, надо заставить MySQL слушать либо на 0.0.0.0 (то есть на всех интерфейсах) и подключаться к ней из контейнера по IP шлюза (его можно посмотреть в выводе docker inspect <container_name>), либо заставить MySQL слушать именно на одном IP который является шлюзом для контейнера.
    Ответ написан
    2 комментария
  • Как перенести и запустить Docker образы на автономной машине?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    docker save --output elasticsearch.tar <image_id>

    docker load --input elasticsearch.tar
    Ответ написан
  • Как правильно подключить rules в prometheus?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    rule_files:
    - $PWD/alert.rules.yml

    Странная конструкция надо указать полный или относительный путь - такие переменные в своём конфиге Prometheus не понимает.

    volumes:
    - $PWD/prometheus.yml:/etc/prometheus/prometheus.yml

    Плохое решение прокидывать файл, внутрь контейнера - это можно сделать один раз в момент старта контейнера и в случае если файл изменился придётся перезапускать контейнер, чтобы это снова произошло. Лучше как Volume монтировать директорию в которую поместить файл, тогда файл в контейнере тоже измениться и достаточно будет послать SIGHUP процессу, чтобы он перечитал конфиг. Переменная $PWD здесь может быть, но её надо предварительно определить, например в .env файле или в одном из семи мест, где их можно определять.

    Пример нормального подключени файла с правилами выглядит как-то так:

    prometheus.yml
    # Load and evaluate rules in this file every 'evaluation_interval' seconds.
    rule_files:
      - '/etc/prometheus/alert-rules/*'
      # - 'first.rules'
      # - 'second.rules'


    docker-compose.yml
    volumes:
      - ./prometheus:/etc/prometheus
    Ответ написан
    Комментировать
  • Что можно делать с помощью Docker?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Docker это набор сервисов и утилит созданных для удобного управления встроенными в ядро Linux технологиями Namespace (для изоляции процессов) и CGroups (для управления ресурсами).

    По мимо Docker существует ряд инструментов призванных делать тоже самое Systemd-Nspawn, LXC, Podman, etc - все они работают похожим образом и точно так же изолируют Linux-овые процессы. Docker самый распространённый и популярный из-за стандартизации процесса сборки образа и удобных утилит для управления жизненным циклом контейнера, Docker это как libc - только в разрезе контейнеров.

    Контейнер можно запустить не имея ни одного из этих инструментов с помощью утилиты unshare - она позволяет точно также управлять Namespac-ами (управлять ресурсами придётся вручную добавив процесс в CGroups).

    Контейнер это изолированный Linux процесс - соответственно запустить получиться только Linux-овый софт и больше ничего. Контейнер это не маленькая виртуальная машина, контейнер это не Java для всего. Конетейнер это только средство запустить Linux-овый процесс в изолированной среде (и, возможно, ограничить его по ресурсам), например запустить приложение требующее наличия в системе конкретных зависимостей, но отсутствующих по факту. Или запустить в целях разработки конкретную версию PHP, Python, Ruby, etc при этом избежав конфликта зависимостей и Dependency hell из-за несовместимых библиотек на хостовой машине.

    Представь себе ситуацию, когда ядро Linux загрузилось и запустило только один (какой угодно) процесс, присвоив ему PID 1 - вот так контейнер выглядит изнутри.

    PS
    Есть конетйнеры на Windows Core они запустятся только на Windows и служат для изоляции только Windows софта и для них есть набор утилит, которые распространяются в виде набора бинарных файлов тоже, почему-то, под именемем Docker (не путать с Docker-Desktop, так как Docker-Desktop - это набор сервисов позволяющих виртуализировать ядро Linux и тем самым получить возможность запустить Linux процессы на Windows или MacOS).
    Ответ написан
    Комментировать
  • Как запустить composer в docker?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Директория app находится на два уровня выше директории php в которой размещён Dockerfile - поменяй путь в директиве COPY
    И WORKDIR /app создаёт директорию и делает её текущей, так что должно быть COPY ../../app .

    PS
    Никогда не используй Alpine образы ни для чего - этот дистрибутив оптимизирован для встраевыемых устройств с единицами мегабайт оперативной памяти и процессором с одним ядром, там вместо libc использован суррогат musl с неэффективным на б̀ольших объёмах памяти аллокатором, к тому же она не так сильно распростронена, как libc, что увеличивает вероятность столкнуться с чем нибудь вроде segmentation fault. К тому же часть пакетов в собранном виде отсутствует из-за чего во время установки происходит их сборка, что занимает значительное время, да и образ в итоге получается очень большим (компилятор то никто не умеет настраивать)

    Используй debian-slim и PHP устанавливай из Sury репозитория - установка произойдёт очень быстро, а итоговый образ будет компактным (если, конечно, не забывать стирать списки пакетов и кеши на том же слое, где они были созданы)

    PPS
    # Remove Cache
    RUN rm -rf /var/cache/apk/*

    Удалять что либо на следующем слое бесполезно - там Copy on Write файловай система и всё что было на предыдущем слое создано там и останется
    Ответ написан
    1 комментарий
  • Запустить ААА игру в докер контейнере?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Это контейнеры на Windows Core они запустятся только на Windows (контейнер это просто изолированный процесс если что).

    PS
    Да действительно существует два набора сервисов и утилит под названием Docker - один управляет средствами изоляции в Linux ядре, другой в Windows ядре и связывает их только название (а есть ведь ещё и Docker Desktop для запуска Linux контейнеров в Windows и MacOS).
    Ответ написан
  • Как из контейнера подключаться к базе данных?

    karabanov
    @karabanov Куратор тега Ubuntu
    Системный администратор
    Можешь файл с базой хранить на хостовой машине и монтировать его в контейнер.
    Ответ написан
    3 комментария
  • Можно ли в Docker пробросить бридж с внешним интерфейсом?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Сними изоляцию с сети, тогда будут использоваться сетевые интерфейсы хостовой машины.
    Ответ написан
    Комментировать
  • Почему Nginx из докер композа не видит соседний контейнер?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Замени 127.0.0.1 на имя сервиса - у каждого контейнера свой уникальный loopback интерфейс никак не связанный ни с системным ни с соседским.
    Ответ написан
    Комментировать
  • Можно ли разукрасить вывод логов docker?

    karabanov
    @karabanov Куратор тега Ubuntu
    Системный администратор
    Можно перенаправить вывод в какой нибудь разукрашиватель
    Ответ написан
    Комментировать
  • Как использовать бинарные файлы в Laravel?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Пересобери образ.
    В качетве базового возьми образ с Laravel, который используешь сейчас и добавь в него ffmpeg.
    Ответ написан
    Комментировать
  • Почему Docker не видит обновление файлов?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    docker-compose build --no-cache
    docker-compose up -d


    PS
    Не используй alpine
    Ответ написан
    Комментировать
  • Объяснить инструкции в Dockerfile?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Добавить в PATH путь до виртуального окружения это и есть его активация - после этого будет использоваться интерпретатор из venv
    Можешь открыть в текстовом редакторе скрипт /opt/vev/bin/activate и убедиться в этом.
    Ответ написан
    5 комментариев
  • Потери CPU на php при миграции на docker?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    У Alpine вместо libc суррогат под названием musl, а так же ряд библиотек отсутствует в виде готовых бинарей и собирается из исходников во время сборки образа с неизвестно какими флагами оптимизации, ты ведь их сам не настраивал верно ;-)

    Возьми в качестве базового образа debian-slim, установи туда PHP-FPM из Sury репозитория, во первых образ будет меньше размером, во вторых работать будет быстрее.
    Ответ написан
    Комментировать
  • Настройка xdebag docker в phpstorm?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    xdebug.client_host=127.0.0.1

    У каждого контейнера свой отдельный loopback интерфейс и он никак не связан с хостовой системой.
    Надо использовать IP шлюза контейнера - его можно узнать с помощью docker inspect <container_id> или задать явно в момент запуска контейнера.

    PS
    Ещё можно снять изоляцию с сети, но так делать не надо.
    Ответ написан
    Комментировать
  • Как самому создать образ Docker на базе Ubuntu со всеми php?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Возьми минимальный базовый образ, и установи туда PHP из репозитория Sury
    Ответ написан
    Комментировать
  • Как запустить процесс внутри docker и знать его pid?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Если процесс в контейнере один то PID у него 1 (единица).
    Ответ написан
  • Как с линукс-хоста постучаться в порт докер-контейнера?

    karabanov
    @karabanov Куратор тега Linux
    Системный администратор
    С помощью docker inspect выясни какой у контейнера IP и обращайся.
    Либо в docker-compose.yml жёстко пропиши IP, чтобы быть уверенным, что он не поменяется.
    Ответ написан
    Комментировать