@pembrock

Как понять докер, если ничего не понятно?

Как разобраться в докере, если ничего не понятно?
До меня никак не доходит, как должна быть организована среда для разработки.
Нужно ли для каждого компонента(php, nginx, DB) создавать отдельный образ? Если да, то как они должны друг с другом взаимодействовать?
Например, если у меня отдельный образ для БД, как я должен к ней подключаться?
И как работать с кодом? Правильно я понимаю, что код должен храниться у меня локально и при включении докера локальная папка будет монтироваться в контейнере и при изменении кода изменения сразу будут видны в браузере?
Может быть есть какое то пособие для совсем тупых, где это все доступно объясняется?
Вроде бы на словах примерно понятно как оно устроено, но когда пытаюсь сделать это все, то впадаю в ступор и не понятно с чего начинать.
P.S. Хабр с его "понимая docker" и "поняв Docker" читал. Документацию тоже. Но такое ощущение будто все рассказано поверхностно с учетом того что уже изначально все понятно.
  • Вопрос задан
  • 4211 просмотров
Сложность: Middle
Пригласить эксперта
Ответы на вопрос 7
  • neuotq
    @neuotq
    full stack php, стартапы, прокрастинация
    С Докером все просто, нужно только немного повернуть устоявшуюся логику в мозгах.
    Основная суть и идея это запуск каждого приложения (php, mysql и тд) в своем контейнере. При этом сам php будет думать что запущен как всегда в обычной полноценной ОС. Поэтому контейнер собирают так, чтобы удовлетворить минимальные требования программы которую он будет содержать.
    Вот так ты и запускаешь кучу контенейров и у тебя выходит сухогруз(у докера там кит) с контейнерами. Зачем это все? Для облегчения администрирования и обновления ПО, а так же для минимизации издержек при глюках/падения какой-либо программы.
    Все контейнеры максимально независимы друг от друга, при этом есть механизм когда контейнер завист от другого. Например контейнер phpmyadmin, нет смысл запускать без контейнера mysql или mariadb, работать он не будет.
    Общение происходит в основном через сеть, поднимается внутренняя сеть. Так же конечно через диск, все предусмотрено.
    Когда все сделано как нужно, с системного администратора снимается гигантский труд по отслеживанию обновлений, совместимости этих обновлений и тд.
    Нужна тебе версия php5.6, запустил коннтейнер с ней, нужна php7.1, запустил его, при этом не нужно никаких приключений с обновлением кучи пакетов, возможных конфликтов с другими нужными программами и тд.
    Так же удобно решаются вопросы масштабирования, появляются мелкие удобные бонусы по дополнительной автоматизации , уменьшаются риски падения ОС в целом, падает если что только контейнер и тд и тп, в результате есть реальная возможность даже небольшим проектам добиться у себя около нулевого даунтайма.
    Вот еще послушай Кирилл Мокевнин из Hexlet пытается понятным языком рассказать что это и зачем. И кстати он делает упор на понимания зачем понадобилось думать и какие проблемы решали когда пришли к Докеру, это ключ к пониманию всего другого.
    PS кстати и сам Hexlet крайне советую, они наверное лучшие в рунете для начинающих программистов
    Ответ написан
  • planc
    @planc

    Нужно ли для каждого компонента(php, nginx, DB) создавать отдельный образ?

    на докер хабе есть официальные образы
    для сборки всего воедино нужен docker-compose


    Например, если у меня отдельный образ для БД, как я должен к ней подключаться?


    при создании дать имя контейнеру --name
    docker run --rm -it --name deb1 debian bash
    и прилинковать второй контейнер
    docker run --rm -it --name deb2 --link deb1 debian bash
    теперь второй контейнер может разговаривать с первым по имени deb1


    И как работать с кодом?

    использовать volume( опция -v)

    на хосте файл:
    echo 'hello world' > /tmp/yo.txt
    создаем контейнер
    docker run --rm -it -v /tmp/yo.txt:/tmp/yo.txt debian bash
    и теперь у нас в контейнере есть доступ к этому файлу


    Может быть есть какое то пособие для совсем тупых, где это все доступно объясняется?

    https://docs.docker.com/get-started/
    Ответ написан
  • @fox_12
    Расставляю биты, управляю заряженными частицами
    > Нужно ли для каждого компонента(php, nginx, DB) создавать отдельный образ?
    нужно - так вам проще будет чем держать все в одном

    Например, если у меня отдельный образ для БД, как я должен к ней подключаться?
    Через линки например. Если прилинковали к контейнеру с php образ с базой как db - то он будет виден в контейнере php как db. И к БД mysqlк примеру обращаетесь просто как к db:3306
    Ответ написан
  • @Alorian
    Вот тут достаточно подробно расписал про локальную разработку на докере (windows)
    https://verstaem.com/devops/docker-php-development/
    Используется обычный docker-compose. На dev сервере тоже его хватит, тот же самый compose файл можно и в линуксовом окружении запустить на полноценном сервере, уже не локально.

    Большая часть статьи про взаимодействие хоста и виртуалки с докером.
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Вакансии с Моего Круга Все вакансии
Заказы с Фрилансим Все заказы