Тёмный

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

DanilovCode - Уроки PHP, Yii2
Подписаться 1,7 тыс.
Просмотров 20 тыс.
50% 1

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/

Опубликовано:

 

11 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 104   
@danilovcode
@danilovcode Год назад
Пользовались ли вы Docker до просмотра урока и будете ли пользоваться после?
@ruden6623
@ruden6623 6 месяцев назад
Ну, смог запустить Nginx и Node.js, но было нифига не понятно, что я делаю. Сейчас тож не очень всё понятно, но некоторое понял. Скорее всего буду пользоваться, так как свой сайт на микросервисы переписываю, а там докер желателен, но пока не очень всё понятно
@user-sk1rh7yh7n
@user-sk1rh7yh7n 6 месяцев назад
До просмотра урока для развертываения окружения я просто запускал контейнеры командой `docker compose up -d` и все остальное было для меня `магией`. А когда возникала ошибка, бежал к бекендерам... Теперь я более профессионально пользуюсь этим инструментом.
@yakut54
@yakut54 5 месяцев назад
теперь я ещё больше во всём запутался.... Однозначно буду!!! 🦧
@alexdreamer11
@alexdreamer11 4 месяца назад
Имею печальный опыт пользования. Что-то не очень хочется им пользоваться, xampp для меня привычнее и удобнее
@danilovcode
@danilovcode 4 месяца назад
@user-zj1nn8zj8f докер используется не только для локальной разработки. К тому же у xampp очень ограниченные возможности и набор инструментов. Но лучше пользоваться тем, что вам удобнее, пока не понадобится что-то большее.
@anryan4509
@anryan4509 7 месяцев назад
2 года назад смотрел курс по докеру, где так же бегло пробежались, но ничего не понятно. Тут всё тоже самое, но инфа заходит сразу и понятно. Всё зависит от подачи материала и самого создателя курса) Да, годнота)
@danilovcode
@danilovcode 7 месяцев назад
Спасибо за высокую оценку!
@zakirovdamir
@zakirovdamir 2 месяца назад
Спасибо, добрый человек, теперь я ОКОНЧАТЕЛЬНО все понял
@lipetskdom
@lipetskdom 4 месяца назад
Просто невероятное видео, полное уважения и взаимопонимания! Голос, подача материала и тд. Респект вам за труд. Это настоящий обмен знаниями. Браво! 🌟
@danilovcode
@danilovcode 4 месяца назад
Спасибо за отзыв!
@donlinoleum831
@donlinoleum831 2 месяца назад
Просто концентрат полезной информации! Огромное спасибо!!!!!!!
@far_from_under
@far_from_under 5 месяцев назад
Не знаю кого благодарить, за то что я нашел это урок. Но точно благодарю вас, за этот поистине великолепный урок.
@danilovcode
@danilovcode 5 месяцев назад
Спасибо за отзыв!
@antonerogov
@antonerogov 8 месяцев назад
Это лучшее что я видел на тему докера!
@danilovcode
@danilovcode 8 месяцев назад
Спасибо за отзыв! По докеру скоро будут еще видео. Следите за новостями)
@tatianabelchik4887
@tatianabelchik4887 8 месяцев назад
отличный урок. все детально объяснено. понятно что и почему там где оно есть. куча статьей пересмотрела, но там минимум теории и просто копируй строки. спасибо огромное
@danilovcode
@danilovcode 8 месяцев назад
Спасибо за отзыв!
@DimaKuzmichev
@DimaKuzmichev 8 месяцев назад
огромное спасибо за урок! до этого пользовался gui-версией докера, но теперь знаю как управляться с ним из консоли. было несколько затыков, связанных с относительными/абсолютными путями в терминале/файле yml на osx, разобрался. теория подана отлично, скорость иногда ставил на .75, масштаб информации в кадре хороший, хотя иногда приходилось ловить кадр) еще раз благодарю. лайк! подписка!
@danilovcode
@danilovcode 8 месяцев назад
Спасибо за отзыв!
@user-gy2ji3ur4z
@user-gy2ji3ur4z 4 месяца назад
Еще, можете посмотреть Portainer - это тоже докер контейнер, но запускает сервер управления докер контейнерами. Очень удобная штука, особенно когда контейнеров становится дохрена, + возможность управления докер контейнерами на разных серверах
@HugoPCWorld
@HugoPCWorld Год назад
Спасибо большое за проделанную работу!
@danilovcode
@danilovcode Год назад
Пожалуйста! Приятного просмотра!
@sergeymarchenko4204
@sergeymarchenko4204 4 месяца назад
Спасибо за видео! Все очень хорошо объясняется.
@nedelaet
@nedelaet 5 месяцев назад
Потрясающе! Автору спасибо
@accountyoutube7298
@accountyoutube7298 8 месяцев назад
Нормальная годнота, без воды типа, как скачать и запустить 2 команды hello world - сразу рабочая связка приложения построенная на контейнерах. Круто!
@danilovcode
@danilovcode 8 месяцев назад
Спасибо! Такие отзывы мотивируют выпускать еще более крутые ролики!
@user-kz5ci7kq1k
@user-kz5ci7kq1k 8 месяцев назад
Спасибо большое, урок понятный и наглядный😁
@danilovcode
@danilovcode 8 месяцев назад
Спасибо за отзыв!
@MrFlagman777
@MrFlagman777 3 месяца назад
Большое спасибо Вам за это видео, было очень полезно!
@danilovcode
@danilovcode 3 месяца назад
Спасибо за отзыв!
@vova_dev
@vova_dev 8 месяцев назад
Классный видос, подача, голос!
@blackbirdalternativedevelo1068
@blackbirdalternativedevelo1068 3 месяца назад
Хорошее видео, очень познавательно. Спасибо.
@danilovcode
@danilovcode 3 месяца назад
Спасибо за отзыв!
@eugenklass
@eugenklass 7 месяцев назад
Подача супер! Спасибо за ваш труд. Лайк, подписка, буду смотреть. Еще бы про права доступа при записи в файлы )
@danilovcode
@danilovcode 7 месяцев назад
Спасибо за отзыв!
@danilovcode
@danilovcode 7 месяцев назад
Что вы имеете в виду про права доступа?
@user-tk7hx1jk6r
@user-tk7hx1jk6r 6 месяцев назад
Ставлю лайк, все основы в одном видео)
@danilovcode
@danilovcode 6 месяцев назад
Спасибо за отзыв!
@vladpetrov91
@vladpetrov91 10 месяцев назад
Спасибо за урок👍
@danilovcode
@danilovcode 10 месяцев назад
Пожалуйста!
@MrChestermen
@MrChestermen 8 месяцев назад
Очень полезно, благодарю
@danilovcode
@danilovcode 8 месяцев назад
Спасибо!
@sanpavlovich9726
@sanpavlovich9726 8 месяцев назад
Спасибо, отличное видео!
@danilovcode
@danilovcode 8 месяцев назад
Спасибо за отзыв!
@Sergei_Slv
@Sergei_Slv 5 месяцев назад
Красавчик, спасибо!
@akellaweb
@akellaweb 2 месяца назад
Пожалуй самый понятный вводный курс. Отдельное спасибо за чёткое пояснение про CMD и ENTRYPOINT!! Никто не объясняет этот момент. После Вашего пояснения понятно стало в чем разница. Хорошо бы ещё отдельно записать как создавать симлинки в контейнере используя volumes_from. И в целом насколько правильно выносить в отдельный сервис установку composer и создание симлинка в директории (нужен именно симлинк). понятно что можно в контейнере запустить команду но зачем если это можно автоматизировать. PS. окружение - wsl.
@danilovcode
@danilovcode 2 месяца назад
Спасибо за отзыв! По симлинкам думаю запишу видео в ближайшем будущем
@GreatOsmanSultan
@GreatOsmanSultan Год назад
Спасибо, да пользуюсь докером...
@sayces
@sayces 3 месяца назад
спс за урок!
@danilovcode
@danilovcode 3 месяца назад
Спс за просмотр!
@xoxot_shamana
@xoxot_shamana 8 месяцев назад
Годнота!
@danilovcode
@danilovcode 8 месяцев назад
Спасибо за отзыв!
@manzadey
@manzadey 5 месяцев назад
Спасибо)
@vova_dev
@vova_dev 8 месяцев назад
У меня не заработало - docker run -d -p 80:80 nginx Пробовал с разными портами. udp. Заработало, на виртуалке всё делаю. Там в настройках сети выставлено NAT. Из-за этого какая-то трабла с loopback. Сделал bridge, всё ок.
@andrejfroschgeiser7777
@andrejfroschgeiser7777 7 месяцев назад
Господи . Какой молдец . Всё просто и понятно. все остальные уроки в корзину . Вопрос: Доккер äто по сути процесс и получается что для развертывания мне надо будет копировать всü структуру файловую н соответственно все файлы . В твоём промере это файл бд, конфиги и пхп . а как упаковать всё вместе .
@danilovcode
@danilovcode 7 месяцев назад
Спасибо за отзыв! Деплой можно выполнять разными способами, в том числе и копированием всех директорий привязанных волюмами. Можно использовать git push и hook с автодеплоем на стороне сервиса. Но наиболее правильным считается упаковывание сайта в отдельный docker image. Затем его можно либо выложить в реестр (свой или какой-то из публичных), а на стороне продакшена сделать pull этого образа докером и запустить, либо просто скопировать на сервер и также снова запустить докером. Про деплой на продакшен планируется отдельный видеоурок в ближайшее время
@renatk.3829
@renatk.3829 2 месяца назад
Хороший курс, только возникла ошибка с подгрузкой index.php, в контейнере он есть, и изменения подтягиваются, вот только при попытке перейти на локалхост выдает File not found.
@danilovcode
@danilovcode 2 месяца назад
Скиньте скрины в группу телеграм t.me/danilovcodechat - конфига docker compose (либо командную строку которой создаете контейнер) и конфига nginx. Попробуем разобраться
@snikitin32
@snikitin32 2 месяца назад
Я новичок в докере, но по каким я мануалам делал, то никаких сетей не создавал. nginx обращается к php-fpm через имя контейнера и порт. Докер автоматически связывает контейнеры в одну сеть.
@danilovcode
@danilovcode 2 месяца назад
Да, докер по-умолчанию помещает контейнеры в дефолтную сеть, если не указать иное
@simonabrosimov18
@simonabrosimov18 2 месяца назад
Отличное видео, отличная подача материала. Спасибо!! Один вопрос только - со всем разобрался и почти все заработало, но нет доступа к phpmyadmin. При вводе localhost:1500 вылезает окошко с надписью о том что надо выбрать приложение для открытия этой ссылки(((
@danilovcode
@danilovcode 2 месяца назад
Спасибо за отзыв! Попробуйте вбить localhost:1500 должно сработать. Ваш браузер почему-то слово localhost воспринял как имя протокола (по типу http, ftp). Также, возможно, что вы слово localhost с ошибкой написали.
@simonabrosimov18
@simonabrosimov18 2 месяца назад
@@danilovcodeспасибо! Все заработало😊
@rosolovsky
@rosolovsky 8 месяцев назад
Отлично. Не мешало бы в php контейнер прикрутить composer!
@danilovcode
@danilovcode 8 месяцев назад
Вот в этом уроке прикручиваем compozer: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-gVGfegSLg14.html
@sayfiddinergashev4764
@sayfiddinergashev4764 8 месяцев назад
Здравствуйте, можете поделиться с исходным кодом проекта? Спасибо.
@danilovcode
@danilovcode 8 месяцев назад
Здравстуйте, к сожалению не сохранился исходник проекта
@alexdreamer11
@alexdreamer11 4 месяца назад
Спасибо, отлично, только в конце у меня Welcome to nginx! опять
@danilovcode
@danilovcode 4 месяца назад
Скорее всего у вас не сработал volume с конфигом nginx. Проверьте, правильно ли написаны пути
@paldeflex
@paldeflex 4 месяца назад
А как composer подключить? тоже в services его прописать?
@danilovcode
@danilovcode 4 месяца назад
Прописать его установку в Dokerfile. Вот пример ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-gVGfegSLg14.html
@user-sk1rh7yh7n
@user-sk1rh7yh7n 6 месяцев назад
Подача материала хорошая, спасибо! Однако, столкнулся с тем, что `docker run` каждый раз создает новый контейнер и перед очередным запуском приходится удалять старый
@danilovcode
@danilovcode 6 месяцев назад
Спасибо за отзыв! Вы можете добавлять опцию --rm к команде run, тогда остановленный контейнер будет автоматически удаляться. docker run --rm
@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 13 дней назад
Здравствуйте! Спасибо за урок. Возникла проблема при перебрасывание порта. 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 13 дней назад
Похоже, что vhost.conf либо не существует, либо это директория а не файл
@andruxanik7769
@andruxanik7769 12 дней назад
@@danilovcode у меня такая же проблема на Windows 10, файл есть, а при выполнении команды создается директория
@andruxanik7769
@andruxanik7769 12 дней назад
Нужно использовать Windows PowerShell для данной команды а нет Git Bash
@Olegcowboyoleg
@Olegcowboyoleg Месяц назад
Не понял: нетворк мы пишем в compose и всё? Всё, что делали до этого в консоли с сетью роли не играет? Просто пишем нетворк: нетворк2 и присоединяем все сервисы в одну сеть ив всё?
@danilovcode
@danilovcode Месяц назад
Да, всё верно. Но можно использовать и сеть созданную в консоли или даже в другом композе, если прописать в текщем композе у нее параметр external: true
@Olegcowboyoleg
@Olegcowboyoleg Месяц назад
@@danilovcode ++
@user-ie7og5ce7j
@user-ie7og5ce7j 7 месяцев назад
какой контейнер откуда как эти директории создавать в терминале хз нихрена не создаётся
@danilovcode
@danilovcode 7 месяцев назад
Я все по ходу видео подробно поясняю. Рекомендую посмотреть с самого начала, не пропуская важные части. Если у вас не получается что-то конкретное сделать - задавайте вопросы, на все постараюсь ответить. Но перед вопросом желательно напишите что вы делали и к каким ошибкам это привело.
@ruslanhamidulin8668
@ruslanhamidulin8668 3 месяца назад
Здравствуйте. Сколько бы я не старался, но порт 9000 phpfpm не выдает
@danilovcode
@danilovcode 3 месяца назад
Здравствуйте. Что значит не выдает? Что вы делали и что происходит? Есть сообщения об ошибках?
@ruslanhamidulin8668
@ruslanhamidulin8668 3 месяца назад
@@danilovcode нет всё запускается. Но порт нужно прописывать в ручную
@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 4 месяца назад
docker container run -d -p 80:80 -v ${PWD}/vhost.conf:/etc/nginx/conf.d/default.conf nginx На Windows так нужно делать
@danilovcode
@danilovcode 4 месяца назад
Можно и так. Pwd возвращает путь к текущей директории. Также как и точка
@Olegcowboyoleg
@Olegcowboyoleg Месяц назад
@@kzamirtay520 $PWD без скобок - у меня только так сработало. до этого гемороился по-всякому.
@andruxanik7769
@andruxanik7769 12 дней назад
@@Olegcowboyoleg а у меня не получается, при выполнении команды создается папка vhost.conf;C
Далее
А что если не умеешь играть?🥲
00:46
Napoletano Pizza w/ Vincenzo Capuano & @Lionfield
00:39
10-dars. Workspace
6:26
Просмотров 21
Что такое Nginx?
11:21
Просмотров 61 тыс.