Запуск и деплой сайта с Docker

Практическое использование Docker. Построение сетевой структуры сайта. Использование контенеров для локальной разработки. Сборка образов для продакшена и методы деплоя.

Скрытый контент
Комментарии (61)
Arunas
2019-12-22 20:19

Спасибо большое.

Ответить
Arunas
2019-12-22 20:24

где можно найти код?

Ответить
Deworker Pro
2019-12-22 21:47

Добавили ссылку.

Ответить
Arunas
2019-12-23 06:50

Спасибо, Вы самие лучшие.

Ответить
Юлия Елисеева
2019-12-28 05:58

Спасибо за высокую оценку нашей работы!

Ответить
Александр
2019-12-22 21:37

Вопрос поддерживаю.

Ответить
Deworker Pro
2019-12-22 21:47

Добавили ссылку.

Ответить
Дмитрий Ориховский
2019-12-23 07:45

Спасибо Дмитрий! Курс топ! Если будет возможность можешь раскатать как настроить Xdebug + Phpstorm + Docker. Спасибо!

Ответить
Роман
2019-12-23 12:32

Да было бы хорошо, научиться пользоваться Xdebug особенно как правильно проверять свои строчки кода (с учетом фреймворка, когда нужно обойти кучу строк самого фреймворка. Да и вообще интересно лучшие практики посмотреть.

Ответить
Альберт
2019-12-23 15:56

+

Ответить
Руслан
2019-12-23 16:14

Было бы супер, у самого постоянные проблемы с докером и x-debug

Ответить
Максим
2019-12-23 17:24

Поддерживаю про Xdebug

Ответить
Ruslan
2019-12-24 09:27

Ребята, Вы вообще охренели? Здесь курсы о Программировании, как настроить Xdebug + Phpstorm на youtube посмотрите может и с Docker найдете. Разница в том, что нужно 9000 порт прокинуть, но вы же о Docker видео внимательно смотрели сообразите.

Ответить
Deworker Pro
2019-12-24 12:51

Да, прокинуть 9000 порт. Но не снаружи внутрь, а изнутри наружу. Это сложнее.

Ответить
Дмитрий Елисеев
2019-12-28 06:32

Да, добавил в седьмой эпизод.

Ответить
Поддерживаю про Xdebug
2019-12-29 14:43

Поддерживаю про Xdebug

Ответить
Denis
2019-12-23 19:29

А почему изменилась темная тема на светлую? В чем причина?

Ответить
Deworker Pro
2019-12-24 07:48

Многие жаловались, что частое переключение с тёмного редактора на светлый браузер неприятно.

Ответить
<Котейка />
2019-12-24 09:28

Нужно просто в браузере темную тему выставить и все будет гуд )

Ответить
Sergei
2019-12-27 12:47

Есть замечательный плагин для хрома Dark reader. Делает все темным xD

Ответить
Arunas
2019-12-24 11:15

про nginx, certbot, gateway: если gateway принцип с nginx и SSL сделать снаружи, вместе с certbot, letsendcrypt, а в докере оставить полный функционал сайта, ведь простом nginx ( не в докере) легче - проще следит за логами, запросами клиентов, делать certbot renew (с cron) , restart nginx...

Ответить
Deworker Pro
2019-12-24 13:34

Если gateway с nginx и SSL сделать снаружи

Да, можно поднять отдельно снаружи без Docker. Но тогда нужно будет настраивать и обновлять его вручную или отдельными скриптами. Также придётся задавать контейнерам фиксированные IP-адреса, чтобы их указывать в proxy_pass такого прокси-сервера. А если ссылаемся на порты, то закрывать их от прямого доступа снаружи.

Так что дело вкуса и как всем будет удобнее. Если нужно вынести, то можно установить отдельно. Если не выносить, то отдельная работа с ним не нужна.

Делать certbot renew (с cron), restart nginx

Сам certbot с renew так и будет снаружи. А вместо service nginx restart можно также вызывать docker-compose restart gateway.

А в общем чтобы не возиться с Lets Encrypt на всех хостах проще один раз купить wildcard сертификат на год или два и его закидывать при деплое.

Проще следить за логами, запросами клиентов

Логи всё равно в итоге собираются из всех источников в одну кучу. Так что по удобству разницы нет.

Ответить
Arunas
2019-12-24 17:38

Спасибо. А будут (хотя очень кратко) про логи - как: "итоге собираются из всех источников в одну кучу"?

Ответить
Deworker Pro
2019-12-24 20:38

Да, когда дойдём до мониторинга.

Ответить
Ruslan
2019-12-26 11:46

А правильно программировать учится будем ? :) Какой-то у вас план охватить весь производственный цикл? Это круто конечно, но праграммировать тоже хочется :)

Ответить
Deworker Pro
2019-12-28 06:35

Да, здесь план охватить всё, как и анонсировали перед началом.

Ответить
Ruslan
2019-12-24 16:14

Дмитрий всё написал уже, я бы добавил: wildcard сертификат - можно получить от Lets Encrypt через API домен диллера и через Ansible раскатать его повсюду логи: я тоже иногда туда заглядываю. Для дев машины :

docker exec -it web bash
web - название инстанца к которому вы хотите подключится.

а для хайлоуда всё пишется на удаленный сервер, чтобы не грузить диск.

Ответить
Ruslan
2019-12-24 13:04

Супер материал.

Ответить
Руслан
2019-12-25 14:30

Спасибо, все супер, когда ожидается следующий выпуск?

Ответить
Deworker Pro
2019-12-25 14:34

Уже монтируем. Завтра будет.

Ответить
Maxim Niko
2019-12-25 17:50

Спасибо, выпуск очень понравился! Если можно - сделайте шрифт побольше, а то даже с большого дисплея телефона 6.2" нужно всматриваться.

Ответить
Виктор
2019-12-27 22:27

+++

Ответить
Deworker Pro
2019-12-28 19:37

На смартфоне можно зумить видео.

Ответить
Sergei
2019-12-27 16:42

Столько нюансов на докере, разгребать не просто :)

Ответить
Sergei
2019-12-29 17:10

У меня есть вопрос: как очистить порты от предыдущего проекта? У меня на 8080 висят до симфони докера. Хочется не переименовывать порыт в конфигурации, а просто вычистить старые.

Ответить
Deworker Pro
2019-12-29 18:57

Зайти в предыдущий и там выполнить docker-compose down

Ответить
Sergei
2019-12-29 19:44

Спасибо за оперативность :)

Ответить
Ildar
2019-12-30 10:45

Спасибо. все отлично, вопрос про продакшен: с какой целью копируется папка public (nginx) в докер контейнере?

Ответить
Deworker Pro
2019-12-30 11:33

Чтобы скопировать favicon.ico.

Ответить
Ruslan
2020-01-01 22:18

Вы не могли бы описать платформу на которой вы запускаете Докер, это Mac?

И еще, добавьте как на youtube like - dislake :) а то в ленте большая часть с благодарностями, и сложно искать полезные вопрос - ответы. Я так понимаю отдельного слак канала или форума нет.

Ответить
Дмитрий Елисеев
2020-01-02 07:09

Эпизоды разрабатываю и записываю на компьютере с Ubuntu. Дома запускаю на MacBook.

Функциональность комментариев доработаю. Добавлю что-то вроде избранного.

Ответить
Ruslan
2020-01-02 15:23

Тогда наших трудностей не видать (я о Винде)

Может кому пригодится я искал как удобно использовать VirtualBox and Docker, вот две статьи

Скрипты для этого занятия у меня отработали. (соврал, полностью не заработало). WSL 2 - чуть ли не единственный вариант для нормальной работы.

Ответить
Павел
2020-01-10 16:11

Дмитрий, вы как-то решали проблему медленной работы монтируемых VOLUMES под MAC OS X?

Ответить
Deworker Pro
2020-01-10 16:16

Вариант обсуждали в комментариях.

Ответить
Александр
2020-01-03 17:04

Кто работает на винде, как решить проблему с запуском команд из Makefile?

Он ругается, что docker-compose не найден, хотя алиас настроен и если из консоли, то все нормально работает.

Ответить
Ruslan
2020-01-04 09:51

Установите в git в Windows

Ответить
Александр
2020-01-04 10:09

Установлено, что дальше?

Ответить
Ruslan
2020-01-05 22:28

Если ответить на ваш вопрос, то возьмите отсюда нужную часть, установите choco и потом Маке, кстати идея Шоколада мне понравилась. Но сразу хочу предупредить, путь через VirtualBox не будет простым и вам всегда придется думать о том, что вы сначала монтируете папку в виртуалку, а потом папку виртуалки в контейнер. В ссылке на статью вы найдете, что можно сунуть докер в старую винду, со старыми версиями и в текущей не работает. Опять "Но" - если установите WSL 2, то всё заработает. (Точнее я xdebug еще не тестил, но хочется верить что работает :) )

Ответить
Павел
2020-01-09 19:21

Если кто-то будет пытаться запустить Docker на виртуальном сервере Используйте KVM а не OpenVZ Виртуализация OpenVZ работает на уровне ядра Linux также как и docker, т.е. docker там не запускается

Ответить
Сарибжанов Ильдар
2020-01-12 14:26

Информация очень полезная, но, на мой взгляд тянет не отдельный курс. Вроде уже 4й урок, а всё ещё не приступили к самому проекту. Возможно, было бы продуктивнее здесь просто привести конфиги как запускать, а уже в подробном курсе пошагово рассказать всю эволюцию от создания отдельного контейнера до скриптов деплоя. Тем более, что в перспективе деплой будет происходить автоматически и смысл ручного скриптования совсем теряет смысл.

Но это, конечно же, ИМХО.

Ответить
Deworker Pro
2020-01-13 09:52

Проект строится именно под ключ, как и анонсировали в блоге перед его началом.

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

Ответить
Альберт
2020-01-13 10:52

Подскажите почему не создается контейнер, вылетает с ошибкой php-cli_1 exited with code 0.

Ответить
Deworker Pro
2020-01-13 10:57

Если код 0, то это не ошибка, а обычное завершение работы. Контейнер php-cli не запускается навечно как php-fpm, поэтому запускается и сразу завершается.

Ответить
Альберт
2020-01-13 11:24

Спасибо чет тупанул )

Ответить
Arunas
2020-01-26 15:26

в каком образе, в каком месте (при билде для прода) собырается-копируется каталог api/src? Напр. api/public копируется в api/docker/production/nginx/Dockerfile (стр.: COPY ./public ./public), а где есть (COPY ./crc ./src) ни где ненашёл :(...

Ответить
Deworker Pro
2020-01-26 16:06

В php-образах копируется всё содержимое папки api в /app строкой COPY ./ ./

Ответить
Arunas
2020-01-26 16:28

спасибо :)

Ответить
Konstantin
2020-01-30 17:44

localhost:8080 открывается, а localhost:8081 - "Не удается получить доступ к сайту".

version: "3.3"
services:
  subproject1:
    build:
      context: subproject1/docker/development/nginx
    ports:
      - "8080:80"
    volumes:
      - ./subproject1:/app

  subproject2:
    build:
      context: subproject2/docker/development/nginx
    ports:
      - "8081:80"
    volumes:
      - ./subproject2:/app
    depends_on:
      - subproject2-php-fpm

  subproject2-php-fpm:
    build:
      context: subproject2/docker/development/php-fpm
    volumes:
      - ./subproject2:/app
"Containers": {
            "935768a945a1041daa9daa047c298cbe52ce81c489d6f7dd2cba50544cdb52cc": {
                "Name": "myproject_subproject2-php-fpm_1",
                "EndpointID": "c7d7c45d690a733c4212ae66e655bf8667f2558f1de2fa1559c4366fc7cc8fdc",
                "MacAddress": "02:42:c0:a8:10:02",
                "IPv4Address": "192.168.16.2/20",
                "IPv6Address": ""
            },
            "f140b5c683ae7a8ae0f754a3a7bf5b400dc2d9c3e778f5a6647a92e0b847ba6d": {
                "Name": "myproject_subproject1_1",
                "EndpointID": "38de8c3f33fca4ac7ad28a8796d2f1e1d7bdfa31a3391746db3bc157c804ce65",
                "MacAddress": "02:42:c0:a8:10:03",
                "IPv4Address": "192.168.16.3/20",
                "IPv6Address": ""
            }
        },

nmap показывает PORT STATE SERVICE 8080/tcp open http-proxy

PORT STATE SERVICE 8081/tcp closed blackice-icecap

Ответить
Konstantin
2020-01-30 18:05

IP адреса 192.168.16.2 и 192.168.16.3 пингуются. В чем же дело? Порт 8081 закрыт? Как же его открыть?

Ответить
Konstantin
2020-01-31 04:45

Обнаружил одну странность. Выполнил инициализацию docker-compose - make init. Устал, хотел поиграть в CSS. Docker-compose еще запущен. Запускаю Steam, а он не может пройти авторизацию - что-то с сетью случилось. Остановил docker-compose - male down, после чего Steam удалось пройти авторизацию. Данное видео просмотрел 25 минут от начала.

Ответить
Николай
2020-02-08 00:18

Рекомендую фичу: Я смотрю ваши видео с десктопа и планшета. На десктопе в браузере стоит расширение "The Great Suspender", которое "суспендит" неактивные вкладки и выгружает их из памяти, но когда я повторно открываю (перезапускаю) эту вкладку, то видео начинается с начала, а не с того места, где я остановился.

Youtube, например, запоминает момент на котором я остановился, более того, он запоминает это не только на текущем устройстве, а на всех (в аккаунте), таким образом, закрыв видео и открыв его на другом устройстве, оно начнет проигрываться с того момента, где закрыл.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий