Docker - nginx, php-fpm, mysql, phpmyadmin. From scratch to finished website

  Рет қаралды 21,275

DanilovCode - Уроки PHP, Yii2

DanilovCode - Уроки PHP, Yii2

Күн бұрын

A lesson about what docker is and how to work with it. We will create a simple single page web application and set up a php + nginx + mysql + phpmyadmin stack for it using docker. Let's set up a custom network for interaction between them and learn how to work with Docker Compose for multi-container applications.
Discussion and questions in the group: t.me/danilovcodechat
News channel: t.me/danilovcode
⏰ Timestamps:
00:00 What is this lesson about?
00:28 Benefits of docker
02:41 Installation
04:25 Use
04:55 What are we going to do?
05:16 Definitions: image, container and volume
06:40 Application structure
08:17 nginx container
15:11 php container
24:15 Docker network - container network
29:19 Start, stop, remove container
32:05 Container logs
33:38 Scheme of container interaction
34:47 mysql container
38:35 phpmyadmin container
40:32 Docker Compose
48:24 Docker vs Docker Compose
Useful links:
Docker official site: www.docker.com/

Пікірлер: 120
@danilovcode
@danilovcode Жыл бұрын
Пользовались ли вы Docker до просмотра урока и будете ли пользоваться после?
@ruden6623
@ruden6623 7 ай бұрын
Ну, смог запустить Nginx и Node.js, но было нифига не понятно, что я делаю. Сейчас тож не очень всё понятно, но некоторое понял. Скорее всего буду пользоваться, так как свой сайт на микросервисы переписываю, а там докер желателен, но пока не очень всё понятно
@user-sk1rh7yh7n
@user-sk1rh7yh7n 6 ай бұрын
До просмотра урока для развертываения окружения я просто запускал контейнеры командой `docker compose up -d` и все остальное было для меня `магией`. А когда возникала ошибка, бежал к бекендерам... Теперь я более профессионально пользуюсь этим инструментом.
@yakut54
@yakut54 6 ай бұрын
теперь я ещё больше во всём запутался.... Однозначно буду!!! 🦧
@alexdreamer11
@alexdreamer11 5 ай бұрын
Имею печальный опыт пользования. Что-то не очень хочется им пользоваться, xampp для меня привычнее и удобнее
@danilovcode
@danilovcode 5 ай бұрын
@user-zj1nn8zj8f докер используется не только для локальной разработки. К тому же у xampp очень ограниченные возможности и набор инструментов. Но лучше пользоваться тем, что вам удобнее, пока не понадобится что-то большее.
@anryan4509
@anryan4509 8 ай бұрын
2 года назад смотрел курс по докеру, где так же бегло пробежались, но ничего не понятно. Тут всё тоже самое, но инфа заходит сразу и понятно. Всё зависит от подачи материала и самого создателя курса) Да, годнота)
@danilovcode
@danilovcode 8 ай бұрын
Спасибо за высокую оценку!
@user-mg7nx2dy6b
@user-mg7nx2dy6b 17 күн бұрын
Большое спасибо за данное видео! Стало намного понятнее, вы очень хорошо объясняете.
@danilovcode
@danilovcode 17 күн бұрын
Спасибо за отзыв!
@TeddyBearPlay
@TeddyBearPlay 14 күн бұрын
Просто лучший. Несколько дней изучал Docker. Получил разрозненные знания, который не мог собрать в кучу и запустить сервер с php и БД. Тут же всё разъяснено очень доходчиво. Всё разложено по полочкам. Автору большое спасибо)
@danilovcode
@danilovcode 14 күн бұрын
Спасибо за отзыв!
@antonerogov
@antonerogov 9 ай бұрын
Это лучшее что я видел на тему докера!
@danilovcode
@danilovcode 9 ай бұрын
Спасибо за отзыв! По докеру скоро будут еще видео. Следите за новостями)
@zakirovdamir
@zakirovdamir 2 ай бұрын
Спасибо, добрый человек, теперь я ОКОНЧАТЕЛЬНО все понял
@nedelaet
@nedelaet 5 ай бұрын
Потрясающе! Автору спасибо
@sergeymarchenko4204
@sergeymarchenko4204 5 ай бұрын
Спасибо за видео! Все очень хорошо объясняется.
@Sergei_Slv
@Sergei_Slv 5 ай бұрын
Красавчик, спасибо!
@donlinoleum831
@donlinoleum831 2 ай бұрын
Просто концентрат полезной информации! Огромное спасибо!!!!!!!
@vova_dev
@vova_dev 8 ай бұрын
Классный видос, подача, голос!
@lipetskdom
@lipetskdom 4 ай бұрын
Просто невероятное видео, полное уважения и взаимопонимания! Голос, подача материала и тд. Респект вам за труд. Это настоящий обмен знаниями. Браво! 🌟
@danilovcode
@danilovcode 4 ай бұрын
Спасибо за отзыв!
@DimaKuzmichev
@DimaKuzmichev 9 ай бұрын
огромное спасибо за урок! до этого пользовался gui-версией докера, но теперь знаю как управляться с ним из консоли. было несколько затыков, связанных с относительными/абсолютными путями в терминале/файле yml на osx, разобрался. теория подана отлично, скорость иногда ставил на .75, масштаб информации в кадре хороший, хотя иногда приходилось ловить кадр) еще раз благодарю. лайк! подписка!
@danilovcode
@danilovcode 9 ай бұрын
Спасибо за отзыв!
@user-gy2ji3ur4z
@user-gy2ji3ur4z 4 ай бұрын
Еще, можете посмотреть Portainer - это тоже докер контейнер, но запускает сервер управления докер контейнерами. Очень удобная штука, особенно когда контейнеров становится дохрена, + возможность управления докер контейнерами на разных серверах
@vladpetrov91
@vladpetrov91 10 ай бұрын
Спасибо за урок👍
@danilovcode
@danilovcode 10 ай бұрын
Пожалуйста!
@HugoPCWorld
@HugoPCWorld Жыл бұрын
Спасибо большое за проделанную работу!
@danilovcode
@danilovcode Жыл бұрын
Пожалуйста! Приятного просмотра!
@MrChestermen
@MrChestermen 9 ай бұрын
Очень полезно, благодарю
@danilovcode
@danilovcode 9 ай бұрын
Спасибо!
@sanpavlovich9726
@sanpavlovich9726 9 ай бұрын
Спасибо, отличное видео!
@danilovcode
@danilovcode 9 ай бұрын
Спасибо за отзыв!
@user-kz5ci7kq1k
@user-kz5ci7kq1k 9 ай бұрын
Спасибо большое, урок понятный и наглядный😁
@danilovcode
@danilovcode 9 ай бұрын
Спасибо за отзыв!
@user-tk7hx1jk6r
@user-tk7hx1jk6r 7 ай бұрын
Ставлю лайк, все основы в одном видео)
@danilovcode
@danilovcode 7 ай бұрын
Спасибо за отзыв!
@MrFlagman777
@MrFlagman777 3 ай бұрын
Большое спасибо Вам за это видео, было очень полезно!
@danilovcode
@danilovcode 3 ай бұрын
Спасибо за отзыв!
@tatianabelchik4887
@tatianabelchik4887 8 ай бұрын
отличный урок. все детально объяснено. понятно что и почему там где оно есть. куча статьей пересмотрела, но там минимум теории и просто копируй строки. спасибо огромное
@danilovcode
@danilovcode 8 ай бұрын
Спасибо за отзыв!
@blackbirdalternativedevelo1068
@blackbirdalternativedevelo1068 4 ай бұрын
Хорошее видео, очень познавательно. Спасибо.
@danilovcode
@danilovcode 4 ай бұрын
Спасибо за отзыв!
@manzadey
@manzadey 5 ай бұрын
Спасибо)
@sayces
@sayces 3 ай бұрын
спс за урок!
@danilovcode
@danilovcode 3 ай бұрын
Спс за просмотр!
@GreatOsmanSultan
@GreatOsmanSultan Жыл бұрын
Спасибо, да пользуюсь докером...
@xoxot_shamana
@xoxot_shamana 9 ай бұрын
Годнота!
@danilovcode
@danilovcode 9 ай бұрын
Спасибо за отзыв!
@user-te9bl6dm7o
@user-te9bl6dm7o 9 күн бұрын
8:44 Завершить процесс клавишей ctrl+c
@danilovcode
@danilovcode 6 күн бұрын
Да, все верно. Не упомянул этого в видео, спасибо
@eugenklass
@eugenklass 7 ай бұрын
Подача супер! Спасибо за ваш труд. Лайк, подписка, буду смотреть. Еще бы про права доступа при записи в файлы )
@danilovcode
@danilovcode 7 ай бұрын
Спасибо за отзыв!
@danilovcode
@danilovcode 7 ай бұрын
Что вы имеете в виду про права доступа?
@far_from_under
@far_from_under 5 ай бұрын
Не знаю кого благодарить, за то что я нашел это урок. Но точно благодарю вас, за этот поистине великолепный урок.
@danilovcode
@danilovcode 5 ай бұрын
Спасибо за отзыв!
@accountyoutube7298
@accountyoutube7298 8 ай бұрын
Нормальная годнота, без воды типа, как скачать и запустить 2 команды hello world - сразу рабочая связка приложения построенная на контейнерах. Круто!
@danilovcode
@danilovcode 8 ай бұрын
Спасибо! Такие отзывы мотивируют выпускать еще более крутые ролики!
@akellaweb
@akellaweb 3 ай бұрын
Пожалуй самый понятный вводный курс. Отдельное спасибо за чёткое пояснение про CMD и ENTRYPOINT!! Никто не объясняет этот момент. После Вашего пояснения понятно стало в чем разница. Хорошо бы ещё отдельно записать как создавать симлинки в контейнере используя volumes_from. И в целом насколько правильно выносить в отдельный сервис установку composer и создание симлинка в директории (нужен именно симлинк). понятно что можно в контейнере запустить команду но зачем если это можно автоматизировать. PS. окружение - wsl.
@danilovcode
@danilovcode 3 ай бұрын
Спасибо за отзыв! По симлинкам думаю запишу видео в ближайшем будущем
@andrejfroschgeiser7777
@andrejfroschgeiser7777 8 ай бұрын
Господи . Какой молдец . Всё просто и понятно. все остальные уроки в корзину . Вопрос: Доккер äто по сути процесс и получается что для развертывания мне надо будет копировать всü структуру файловую н соответственно все файлы . В твоём промере это файл бд, конфиги и пхп . а как упаковать всё вместе .
@danilovcode
@danilovcode 8 ай бұрын
Спасибо за отзыв! Деплой можно выполнять разными способами, в том числе и копированием всех директорий привязанных волюмами. Можно использовать git push и hook с автодеплоем на стороне сервиса. Но наиболее правильным считается упаковывание сайта в отдельный docker image. Затем его можно либо выложить в реестр (свой или какой-то из публичных), а на стороне продакшена сделать pull этого образа докером и запустить, либо просто скопировать на сервер и также снова запустить докером. Про деплой на продакшен планируется отдельный видеоурок в ближайшее время
@simonabrosimov18
@simonabrosimov18 3 ай бұрын
Отличное видео, отличная подача материала. Спасибо!! Один вопрос только - со всем разобрался и почти все заработало, но нет доступа к phpmyadmin. При вводе localhost:1500 вылезает окошко с надписью о том что надо выбрать приложение для открытия этой ссылки(((
@danilovcode
@danilovcode 3 ай бұрын
Спасибо за отзыв! Попробуйте вбить localhost:1500 должно сработать. Ваш браузер почему-то слово localhost воспринял как имя протокола (по типу http, ftp). Также, возможно, что вы слово localhost с ошибкой написали.
@simonabrosimov18
@simonabrosimov18 3 ай бұрын
@@danilovcodeспасибо! Все заработало😊
@rosolovsky
@rosolovsky 9 ай бұрын
Отлично. Не мешало бы в php контейнер прикрутить composer!
@danilovcode
@danilovcode 9 ай бұрын
Вот в этом уроке прикручиваем compozer: kzfaq.info/get/bejne/nbx3mciYuLLLYWg.html
@renatk.3829
@renatk.3829 2 ай бұрын
Хороший курс, только возникла ошибка с подгрузкой index.php, в контейнере он есть, и изменения подтягиваются, вот только при попытке перейти на локалхост выдает File not found.
@danilovcode
@danilovcode 2 ай бұрын
Скиньте скрины в группу телеграм t.me/danilovcodechat - конфига docker compose (либо командную строку которой создаете контейнер) и конфига nginx. Попробуем разобраться
@sayfiddinergashev4764
@sayfiddinergashev4764 9 ай бұрын
Здравствуйте, можете поделиться с исходным кодом проекта? Спасибо.
@danilovcode
@danilovcode 9 ай бұрын
Здравстуйте, к сожалению не сохранился исходник проекта
@alexdreamer11
@alexdreamer11 5 ай бұрын
Спасибо, отлично, только в конце у меня Welcome to nginx! опять
@danilovcode
@danilovcode 5 ай бұрын
Скорее всего у вас не сработал volume с конфигом nginx. Проверьте, правильно ли написаны пути
@user-sk1rh7yh7n
@user-sk1rh7yh7n 7 ай бұрын
Подача материала хорошая, спасибо! Однако, столкнулся с тем, что `docker run` каждый раз создает новый контейнер и перед очередным запуском приходится удалять старый
@danilovcode
@danilovcode 7 ай бұрын
Спасибо за отзыв! Вы можете добавлять опцию --rm к команде run, тогда остановленный контейнер будет автоматически удаляться. docker run --rm
@paldeflex
@paldeflex 4 ай бұрын
А как composer подключить? тоже в services его прописать?
@danilovcode
@danilovcode 4 ай бұрын
Прописать его установку в Dokerfile. Вот пример kzfaq.info/get/bejne/nbx3mciYuLLLYWg.html
@vova_dev
@vova_dev 8 ай бұрын
У меня не заработало - docker run -d -p 80:80 nginx Пробовал с разными портами. udp. Заработало, на виртуалке всё делаю. Там в настройках сети выставлено NAT. Из-за этого какая-то трабла с loopback. Сделал bridge, всё ок.
@MrMikhailDJ
@MrMikhailDJ 8 ай бұрын
А что конкретно должно быть в SCRIPT_FILENAME? Путь до index.php? Если речь про phpmyadmin. Настраивать правда пытаюсь в k8s с nginx ingress контроллером и при заходе на phpmyadmin у меня просто белая страница, хотя коды ответов получает веб-сервер 200.
@danilovcode
@danilovcode 8 ай бұрын
В SCRIPT_FILENAME полный путь до скрипта, которому передается запрос. Смотрите логи, возможно там что-то есть
@MrMikhailDJ
@MrMikhailDJ 8 ай бұрын
@@danilovcode логи где? В контейнере с phpmyadmin?
@MrMikhailDJ
@MrMikhailDJ 8 ай бұрын
@@danilovcode посмотрел. Проблема следующая: NOTICE: Access to the script '/var/www/html/js/dist/shortcuts_handler.js' has been denied (see security.limit_extensions) Насколько знаю этот параметр должен быть определен в конфиге пхп? Но где он в контейнере phpmyadmin? Даже через find с grep не нашел. Параметры для fastcgi такие стоят: DOCUMENT_ROOT: "/var/www/html" SCRIPT_FILENAME: "/var/www/html$fastcgi_script_name" PATH_INFO: "$fastcgi_path_info" PATH_TRANSLATED: "$document_root$fastcgi_path_info" HTTP_PROXY: "" Ну и дефолтный include на fastcgi параметры из ингресса nginx. Есть идеи как фиксить?
@danilovcode
@danilovcode 8 ай бұрын
Ну да, в контейнере. Проверьте к тому ли контейнеру вы подключаетесь
@MrMikhailDJ
@MrMikhailDJ 8 ай бұрын
@@danilovcode я написал, что посмотрел) Проблема выше. Подключается все нормально. Ответ от корня 200, но все остальное 403 как будто проблема с правами. На рабочую папку в php все права www-data… И все никак. Может быть попробовать создать конфиг с параметром security.limit_extensions?
@user-vw4uj5zu1e
@user-vw4uj5zu1e Ай бұрын
Здравствуйте! Спасибо за урок. Возникла проблема при перебрасывание порта. docker: Error response from daemon: source /var/lib/docker/overlay2/bccacc2b865a27b2edf088677742e2686a835bec6ae4671d9e99e3331a0d080f/merged/etc/nginx/conf.d/default.conf is not directory. Введенный запрос: docker run -d -p 80:80 -v ./vhost.conf:/etc/nginx/conf.d/default.conf nginx Подскажите пожалуйста, в чем может быть проблема?
@danilovcode
@danilovcode Ай бұрын
Похоже, что vhost.conf либо не существует, либо это директория а не файл
@andruxanik7769
@andruxanik7769 29 күн бұрын
@@danilovcode у меня такая же проблема на Windows 10, файл есть, а при выполнении команды создается директория
@andruxanik7769
@andruxanik7769 29 күн бұрын
Нужно использовать Windows PowerShell для данной команды а нет Git Bash
@snikitin32
@snikitin32 2 ай бұрын
Я новичок в докере, но по каким я мануалам делал, то никаких сетей не создавал. nginx обращается к php-fpm через имя контейнера и порт. Докер автоматически связывает контейнеры в одну сеть.
@danilovcode
@danilovcode 2 ай бұрын
Да, докер по-умолчанию помещает контейнеры в дефолтную сеть, если не указать иное
@Olegcowboyoleg
@Olegcowboyoleg 2 ай бұрын
Не понял: нетворк мы пишем в compose и всё? Всё, что делали до этого в консоли с сетью роли не играет? Просто пишем нетворк: нетворк2 и присоединяем все сервисы в одну сеть ив всё?
@danilovcode
@danilovcode 2 ай бұрын
Да, всё верно. Но можно использовать и сеть созданную в консоли или даже в другом композе, если прописать в текщем композе у нее параметр external: true
@Olegcowboyoleg
@Olegcowboyoleg 2 ай бұрын
@@danilovcode ++
@Demimur186
@Demimur186 13 күн бұрын
Подскажите пожалуйста, я хочу зарустить свой глобальный сервер с mysql, с php, как это можно сделать?! Где можно почитать!
@danilovcode
@danilovcode 12 күн бұрын
Свой это на домашнем ПК? Если так, то вам нужен статический IP адрес. Провайдеры интернета предоставляют его за доп плату. Затем регистрируете домен у любого регистратора. Потом его можно добавить на любой бесплатный днс-хостинг (например cloudflare) и в днс-записях прописать ваш статический айпишник и имя домена. При этом у регистратора домена нужно прописать в ns-записях ns-сервера клаудфлера. Потом на свой комп устанавливаете все что нужно для вебсервера
@Demimur186
@Demimur186 12 күн бұрын
@@danilovcode нет не компьютер, а серверную стойку собираюсь покупать! Там стоит уже Виндовс Сервер (ну вы знаете она не особо отличается), так вот, мне этот сервер нужен для того что я ранее перечислил! IP у меня уже есть, Домен и Поддомен тоже есть! Не могу разобраться, таким же способом устанавливать всё как и вы, или на таких серверах стоят какие то особые утилиты!
@danilovcode
@danilovcode 12 күн бұрын
С виндовс сервером я вам не подскажу что делать. Я считаю, что ставить надо линукс и на него стандартный стек для вебсервера.
@Demimur186
@Demimur186 12 күн бұрын
@@danilovcode понял, что входит в стандартный стек? Кстати, обязательно пробрасывать порты? Если кабель изернет подключены на прямую к серверу, без роутера? Может у вас есть полный курс как сделать глобальный сервер, я хотел бы ознакомиться с материалом
@danilovcode
@danilovcode 12 күн бұрын
Стандартный это apache+php+mysql или nginx+phpfpm+mysql. Вместо mysql может быть mariadb, pgsql и т.д. Вместо php-fpm может быть apache. Вместо nginx любой другой легковесный веб-сервер. В уроке порты пробрасываются в контейнер, это никак не связано с wifi роутером. На своем сервере вы можете не использовать докер, либо посмотреть уроки как делать деплой сервера на докере. Можете почитать еще про оркестрацию. Дело в том что настройки докера для локального сервера для разработки отличаются от продакшена. Рекомендую на проде пока не использовать докер, а для начала изучить получше обычный серверный стек
@user-ie7og5ce7j
@user-ie7og5ce7j 7 ай бұрын
какой контейнер откуда как эти директории создавать в терминале хз нихрена не создаётся
@danilovcode
@danilovcode 7 ай бұрын
Я все по ходу видео подробно поясняю. Рекомендую посмотреть с самого начала, не пропуская важные части. Если у вас не получается что-то конкретное сделать - задавайте вопросы, на все постараюсь ответить. Но перед вопросом желательно напишите что вы делали и к каким ошибкам это привело.
@ruslanhamidulin8668
@ruslanhamidulin8668 4 ай бұрын
Здравствуйте. Сколько бы я не старался, но порт 9000 phpfpm не выдает
@danilovcode
@danilovcode 4 ай бұрын
Здравствуйте. Что значит не выдает? Что вы делали и что происходит? Есть сообщения об ошибках?
@ruslanhamidulin8668
@ruslanhamidulin8668 4 ай бұрын
@@danilovcode нет всё запускается. Но порт нужно прописывать в ручную
@TheEmberEve
@TheEmberEve 6 күн бұрын
Кто делает на винде учтите, путь должен быть с обратным слешем docker run -d -p 80:80 -v .\vhost.conf:/etc/nginx/conf.d/default.conf nginx И то только в windows консоли, а не git-bash например, там не работает даже прямой, файл не прокидывается, хотя и ошибку не выдает.
@vova_dev
@vova_dev 8 ай бұрын
-v не работает. Даже уже с одинаковым названием пробовал: docker container run -p 80:80 -v default.conf:/etc/nginx/conf.d/default.conf nginx docker: Error response from daemon: source /var/lib/docker/overlay2/8bebf42b69bb759052f4a4539c45490b13b6a65f28251c6faafa6774567f0819/merged/etc/nginx/conf.d/default.conf is not directory. udp. Получилось. Надо было полный путь указать. У меня ubuntu. У тебя IOS?
@danilovcode
@danilovcode 8 ай бұрын
Нужно так: docker container run -p 80:80 -v ./default.conf:/etc/nginx/conf.d/default.conf nginx иначе докер думает, что это именованый волюм, а не путь к файлу
@kzamirtay520
@kzamirtay520 5 ай бұрын
docker container run -d -p 80:80 -v ${PWD}/vhost.conf:/etc/nginx/conf.d/default.conf nginx На Windows так нужно делать
@danilovcode
@danilovcode 5 ай бұрын
Можно и так. Pwd возвращает путь к текущей директории. Также как и точка
@Olegcowboyoleg
@Olegcowboyoleg 2 ай бұрын
@@kzamirtay520 $PWD без скобок - у меня только так сработало. до этого гемороился по-всякому.
@andruxanik7769
@andruxanik7769 29 күн бұрын
@@Olegcowboyoleg а у меня не получается, при выполнении команды создается папка vhost.conf;C
Yii2 in Docker: setting up a web server, installing Yii in a container
14:26
DanilovCode - Уроки PHP, Yii2
Рет қаралды 3,6 М.
Docker Для Начинающих за 1 Час | Docker с Нуля
52:43
MEU IRMÃO FICOU FAMOSO
00:52
Matheus Kriwat
Рет қаралды 34 МЛН
Final muy inesperado 🥹
00:48
Juan De Dios Pantoja
Рет қаралды 19 МЛН
Docker за 20 минут
21:42
suchkov tech
Рет қаралды 63 М.
1. Настройка Docker. PHP+Nginx+MySQL
14:02
Alex Skrashuk
Рет қаралды 31 М.
Забудь про Локальный Сервер! Запускай все под Docker!
34:12
Быть Программистом
Рет қаралды 6 М.
Запуск Nginx в контейнере Docker
20:55
Поддержка Сайтов :: Метод Лаб
Рет қаралды 12 М.
Зачем нужен и как работает Docker - ликбез 🐳
12:05
Хороший программист
Рет қаралды 209 М.