Ответы пользователя по тегу Docker
  • Насколько удобно Docker интегрирован в PhpStorm?

    romash
    @romash
    web-разработчик
    Про xdebug могу сказать, что вы скорее всего что-то не так готовите. Важно понимать, что сам xdebug является по сути клиентом, который отправляет данные дебаг-серверу (в данном случае его поднимает PHPStorm). Исходя из этого можно с уверенностью заявить, что в docker-compose вообще ничего, связанного с дебагом быть не должно (максимум сюда можно отнести проброс папки vendor, если вам нужно в дебаге проходить по подгруженным композером библиотекам).

    Как работает xdebug: вы открываете в браузере страницу, php начинает её обрабатывать, xdebug смотрит в свой конфиг и, если видит инфу для подключения (адрес и порт дебаг-сервера), то подключается к нему, узнаёт о брейкпоинтах и дальше они между собой взаимодействуют, но подключение поднимает php, то есть оно идет из контейнера на хост, никакие порты при этом пробрасывать не нужно, так как из контейнера ваш хост всегда видно.

    Я ставлю в конфиге xdebug.remote_connect_back=on, тогда не нужно указывать xdebug.remote_host и он ищет сервер на ip, с которого открыли страницу. Правда так не подебажишь cli, но ip-шник хоста тоже можно как-то достать, можете погуглить, если очень хочется.

    Допустим, у вас в xdebug.ini написано следующее:
    zend_extension=xdebug.so
    xdebug.remote_enable=on
    xdebug.remote_autostart=on
    xdebug.remote_connect_back=on
    xdebug.remote_port=9999


    Тогда в PHPStorm достаточно:
    Settings > Languages & Frameworks > PHP > Debug
    В разделе Xdebug указать порт 9999 и поставить галку на Can accept external connections.
    В самом низу, в Advanced settings убрать галку с Notify if debug session was finished without being paused

    Settings > Languages & Frameworks > PHP > Servers
    Добавить сервер:
    Name и Host указать из server_name nginx (с другими прокси не настраивал)
    Port тоже из конфига nginx, а не тот, что пробрасывается наружу!
    Эти данные php берет от своей прокси внутри контейнера и передаёт при поднятии сессии дебага, так что, если неправильно указать, Path mapping не заработает.
    Галочка на Use path mappings и поставить в соответствие папке проекта абсолютный путь внутри контейнера

    Также на всякий случай и для сравнения инструкция для VSCode:
    Установить расширение PHP Debug и добавить в конфигурацию дебага следующее
    {
        "name": "Listen for XDebug in Docker",
        "type": "php",
        "request": "launch",
        "port": 9999,
        "pathMappings": {
            "Абсолютный путь к папке проекта в контейнере": "${workspaceRoot}"
        }
    }


    Это дело у меня прекрасно работает и из под винды со старой docker-machine, и "огромным бубном" я бы это не называл...
    Ответ написан
    Комментировать
  • Как настроить nginx для docker registry?

    romash
    @romash
    web-разработчик
    С подобным не сталкивался, делал всё по инструкции и всё хорошо работает.
    Два примечания:
    1. Там nginx запускают, как сервис рядом с registry, у меня же на сервере уже стоит nginx и крутятся сайты, так что я запустил один registry, а конфиг для nginx скопировал на хост (естественно с небольшими правками)
    2. Файл авторизации nginx.htpasswd указанным способом мне создать не удалось, но, так как на хосте уже был openssl, воспользовался такой командой для создания хеша: openssl passwd -crypt
    Ответ написан
    Комментировать
  • Как запустить docker-контейнер со статикой сайта?

    romash
    @romash Автор вопроса
    web-разработчик
    Ответ оказался гораздо проще и красивее, чем я предполагал.
    У докера с версии 17.05 появилась такая замечательная штука, как Multi-stage build. Она позволяет в одном докерфайле сначала сделать контейнер с nodejs, сбилдить в нём статику, а потом создать ещё один контейнер с nginx, в который скопировать артефакты сборки из первого. При этом результирующий образ не будет содержать данных из образа nodejs и исходников (если вы их явно на втором шаге не скопируете), что позволяет сделать его максимально лёгким.
    FROM node:8 as build
    WORKDIR /web
    
    COPY package.json yarn.lock ./
    RUN yarn
    
    COPY . ./
    RUN yarn build
    
    
    FROM nginx:alpine
    WORKDIR /usr/share/nginx/html
    RUN rm -rf *
    COPY --from=build /web/dist .
    Ответ написан
    Комментировать