Что есть Docker

Чем является Docker и чем не является. Что из себя представляют образы и контейнеры. Чем контейнер отличается от виртуальной машины. В чём удобство использования Docker для продакшена и для локальной разработки.

  • 00:01:44 Классический запуск процессов
  • 00:02:09 Запуск через sudo и su
  • 00:03:06 Запускальщик с разными настройками
  • 00:04:44 Пространства имён
  • 00:05:41 Виртуальные сети
  • 00:07:34 Запуск из отдельной папки
  • 00:08:39 Образ файловой системы
  • 00:11:09 Обязательный параметр
  • 00:13:13 Запуск демона в фоне
  • 00:14:32 Просмотр процессов
  • 00:15:14 Имя для процесса
  • 00:15:47 Очистка мусора
  • 00:18:14 Иммутабельность образов
  • 00:20:01 Многослойная файловая система
  • 00:21:29 Монтирование внешних папок
  • 00:23:17 Сборка образов
  • 00:24:21 Обзор результата
  • 00:26:33 Использование Docker
  • 00:28:43 Запуск сервера в Docker
  • 00:31:04 Запуск сервера Nginx с PHP-FPM
  • 00:32:17 Запуск системы через Docker Compose
  • 00:33:39 Монтирование рабочих файлов
  • 00:36:18 Отличие от виртуальной машины
Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (160)
Никита

Сколько приблизительно будет частей? И какая частота выхода новых видео?

Ответить
Дмитрий Елисеев

Примерно два-три видео в неделю. Если длинные, то реже. Количество частей зависит от степени дробления и от того, какие у кого возникнут вопросы и что захочется рассмотреть подробнее.

Ответить
Denis Shcherbakov

Может кто использует Docker на windows. Сталкивались с ошибкой - ERROR: Service 'nginx' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder952139899/docker\nginx\conf.d: no such file or directory ?

Ответить
Aёct'ann

Денис, это никак не связано с windows - там у Вас где-то в путях/контексте ошибка, не может скопироваться файл, т.к. докер его не может найти. У меня такое было несколько раз, я неверно указывал путь. А так Docker сейчас на windows работает нормально, хотя и не так быстро, как хотелось бы.

Ответить
Denis Shcherbakov

Решил проблему с путями в Windows 10, если кому интересно. Во-первых docker-compose.yml У nginx там context - ./site/docker/nginx А значит в dockerfile будет

COPY ./conf.d ./etc/nginx/conf.d

вместо

COPY ./docker/nginx/conf.d ./etc/nginx/conf.d

и COPY ./././public ./public

вместо

COPY ./public ./public

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

Ответить
Дмитрий Елисеев

Для development окружения строка COPY ./public не нужна. Только в production.

Ответить
Aёct'ann

А как так не нужна в dev? Скопировать настройку nginx же необходимо.

Ответить
Дмитрий Елисеев

Да, COPY conf.d нужна, а COPY public нет.

Ответить
Aёct'ann

А все, это я не заметил, что именно для public идет обсуждение, пардон

Ответить
elmut

Windows 10 потом будут проблемы с ярлыками \node_modules.bin, вывод npm instal работать не будет

Ответить
elmut

Проблема решена докер игнором, хотел Дмитрия спросить, есть ли такое как git игнор, ответ узнал в новых уроках. избегайте любых ссылок линуксоидных они не работают. докер игнором, супер!!!! Нет хлама на компе бесило 20к файлов это минимум.

Ответить
Paul

Дмитрий, спасибо за урок! Очень доходчиво объясняете) Расскажите подробней про создание разных окружений (dev, stage, prod). Еще хотелось бы узнать, как работать с docker swarm (например, ссылаться из front контейнера по ссылке http ://backend и наоборот, запуск нескольких экземпляров приложения и т.д.).

Ответить
Дмитрий Елисеев

Да, это всё будет.

Ответить
Paul

Класс! :)

Ответить
Denis

Раньше приходилось ускорять видео, а теперь хочется немного замедлить))) Можно чуть - чуть помедленнее, я пытаюсь успеть запомнить)) А так, видосы крутые.

Ответить
Denis Shcherbakov

Кстати, да. Тоже заметил, что раньше ускорял видео, а сейчас смотрю на нормальной скорости. И видео более емкие стали чтоли, совсем без воды.

Ответить
Юлия Елисеева

Несколько раз зачищаю видео, чтобы убрать все повторы. После этого перед публикацией Дмитрий пересматривает и удаляет оставшееся. Поэтому, возможно, информация кажется более концентрированной.

Ответить
Aёct'ann

Отличная работа!

Ответить
Denis Shcherbakov

Юлия, спасибо Вам за работу.

Ответить
Игорь

Юлия, спасибо за весомый вклад в проект!

Ответить
Альберт

А когда будут следующие серии? )

Ответить
Юлия Елисеева

Скорее всего на выходных опубликуем.

Ответить
Ruslan

Очень оригинальное введение в докер.

Но по поводу запуска Докер под виндой, это не совсем так. Запуск в Убунте, это всёравно, что на виртуалке (так не запускал потому что не вижу в этом удобства). Официальная версия запуска это через Докер Дескоп и все будет запускаться из командной строки. Только появляется проблема запуска ВиртуалБокс, потому что такая установка потребует активации Hyper-V , я знаю способ лечения только через двойную загрузку винды (с Hyper-V и без).

Я это к тому, что если кто-то знает другой способ использования Hyper-V и ВиртуалБокса на одной виндовой машине расскажите как вы это делаете? Наверняка многие здесь будут повторять материал у себя и столкнутся с этой проблемой.

Ответить
Arunas

Win10 Pro: VirtualBox -> Vagrant -> puphpet (собираем голый Ubuntu 16) -> putty (через SSH) -> Docker-compose и др. в Ubuntu (получается виртуалка в виртуалке, медленно (сайт около 3с.) но работает)

Ответить
Aёct'ann

Блин, но очень медленно(

Ответить
BATPYIIIKOB

Зависит от версии винды

Ответить
Ruslan

Если вы о Хомечках, то это обходится. Но из моих иследований, лучше виртуалбокс. Docker Desktop - в итоге начал разваливаться. Docker на Hyper-V предпочитмает виндоус контейнеры. Сейчас буду пытаться перейти на Docker + ВиртуалБокс

Ответить
elmut

я с Docker Quickstart Terminal перехожу Docker Desktop (wsl 2) самое сложное будет настроить Ip он меняется

Ответить
Ruslan

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

Ответить
voodooism

Отсутствует регулировка уровня звука в плеере.

Ответить
Григорий

Если у кого-то ошибка при запуске docker-compose up -d типа такой ... ERROR: Service 'nginx' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder465650860/docker/development/nginx/conf.d: no such file or directory ... Нужно проверить содержимое файла Dockerfile docker/site/docker/development/nginx/Dockerfile Например такой файл отрабатывает корректно

FROM nginx:1.17-alpine
COPY ./conf.d /etc/nginx/conf.d
WORKDIR /app
Ответить
Дмитрий Елисеев

Я понимаю, что папки conf.d нет во время сборки образа

Либо она должна там быть во время сборки, либо должна быть примонтирована через volumes.

Ответить
Григорий

Дмитрий, спасибо, разобрался и исправил своё сообщение. У меня была ошибка в файле docker/site/docker/development/nginx/Dockerfile

Ответить
Иван

Это не объяснение, что такое Docker, это рассказ "Вот, что я умею делать на компьютере".
Объяснение какой либо сущности или явления, это нечто совсем иное.
Человек незнакомый с Docker совершенно ничего не поймет из этого видео, просто ничего.

Ответить
Дмитрий Елисеев

Здесь показано, что:

Sudo - это простой запускальщик программ от имени другого пользователя.
Docker - это более продвинутый запускальщик программ в отдельной файловой системе, памяти и сети.

Это, собственно, всё, что он из себя представляет. Docker - это просто как продвинутый sudo.

Какие ещё вопросы по его пониманию могут быть?

Ответить
Иван

Вы это назвали пониманием?
У меня просто нет слов ...

Ответить
Дмитрий Елисеев

Именно. Если человек понимает, что такое sudo в консоли, то по аналогии сразу поймёт, что docker работает в консоли как sudo с дополнительными опциями.

Если же не понимает, что такое консоль и как настраивается сервер, то разрабатывать на фреймворках ему пока рано.

Ответить
Иван

Если человек понимает, что такое sudo, то он просто обязан не согласиться с вашим грубейшим обобщением/абстрагированием, которое вы применили к sudo и к Docker, а также с тем, как вы их сравнили.
Ни про sudo, ни про Docker вы не правы, боюсь, что в корне.

Конечно нельзя запретить относиться ко всему как к "черному ящику" и иметь магическое мышление, но, думаю, что к совести, я могу призвать.
Вы хоть от монетизации своих рассказов откажитесь.
На YouTube у вас и аудитория могла бы быть больше и обратная связь мощнее, что влияло бы на совокупное качество материала, а монету могли бы от рекламы получать, не возбраняется в наше время, а в целом, более честно.
А так какую-то кибер-секту тут устроили, простите за оценочное суждение.

Ответить
Дмитрий Елисеев

Ни про sudo, ни про Docker вы не правы, боюсь, что в корне.

Ну расскажите объективно и конструктивно, в чём мы не правы.

а монету могли бы от рекламы получать, не возбраняется в наше время, а в целом, более честно.

Прямая открытая монетизация честнее, чем скрытая через рекламу.

Ответить
Иван

Нет смысла в пересказывании мной справочных данных.
Все можно найти на просторах интернета, я лишь песчинка в складках бытия.
Sudo, это не "простой запускальщик программ от имени другого пользователя".
Это не "запускальщик", а целая подсистема предоставления прав суперпользователя (другого пользователя, как в частном случае).
Основная функция не запустить, а предоставить права и не такая уж она и простая, т.к. речь о безопасности.
Docker, тоже, ни разу не "запускальщик", а целая система контейнеризации.
Понимать надо начиная с технологии Linux Containers и различать виртуальные машины и виртуальные окружения.

Будьте более уважительны к смыслам, к понятиям и терминам.
Из альтруистических соображений рекомендую вам изучить, что такое содержание и объем понятий, очень полезное знание.

Обратитесь к:
Введение в логику - Сергей Поварнин
"Логика" учебник для средней школы, С.Н.Виноградов, А.Ф.Кузьмин, УЧПЕДГИЗ 1954
Георг Вильгельм Фридрих Гегель - Наука логики

Ответить
Дмитрий Елисеев

В итоге ничего из вами перечисленного не противоречит тому, что sudo запускает указанную программу или шелл, подменяя пользователя; а docker используя линуксовые инструменты контейнеризации создаёт изолированный контейнер для запуска процессов в нём.

А по терминам и смыслам ваше определение "докер – это целая система контейнеризации" не совсем корректно, так как:

Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации.

То есть сам Docker – это не система контейнеризации, а инструмент для удобного управления этой контейнеризацией. Всего лишь утилита, работающая поверх нативной системы контейнеризации. Как Vagrant всего лишь является консольной утилитой поверх систем виртуализации для автоматизации управления машинами в том же VirtualBox.

Ответить
Иван

Да что вы такое говорите, неужели не противоречит и когда это мы итоги подводили?
Вы уже ознакомились с основными положениями логики, с логическими приемами, изучили что такое понятие, его содержание и объем, другие положения?
По вашему получается, что я утверждал что-то подобное, как

sudo запускает указанную программу или шелл, подменяя идентификатор пользователя?

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

  1. Не стоит утверждать, что sudo что-то запускает и тем более - shell.
    Чуть меньше, чем все в системе запускает сама shell и пользователь.
    Чуть меньше, чем все потому, что shell сама является процессом-потомком.
    Внутри shell, как процесса, запускаются другие процессы, иногда это делает пользователь, используя sudo или su для этого или не используя.
    Sudo, скорее, это обертка процесса, чем среда выполнения сама по себе или интерпретатор команд.
    Средой и интерпретатором команд является shell.

  2. Как в деталях работает sudo (что оно подменяет), это другой разговор, мы не об этом.
    Не надо плодить сущности, держитесь в рамках своих тезисов и моих антитезисов - наша дискуссия перешла к выяснению того, что чем является и чем не является.

Итак, я отрицаю следующие ваши утверждения:

Sudo - это простой запускальщик программ от имени другого пользователя.

Docker - это более продвинутый запускальщик программ ...

Docker - это просто как продвинутый sudo.

docker работает в консоли как sudo с дополнительными опциями

Вы ошибочно классифицировали сущности, и, как следствие, провели ложное их сравнение, потому, что:
1. объединили в одно проявление sudo и Docker, когда они слабо связаны друг с другом признаками
2. выбрали ошибочную основу для сравнения - внешние проявления
3. взяли для сравнения признаки, находящиеся в разных отношениях
4. взяли первые попавшиеся признаки

Поясняю: понятия, не соответствующие объекту или явлению, ложны:

sudo somefile
su somefile

и

docker someparameters

эти проявления действительности только внешне выглядят похожими.
Sudo и Docker имеют мало общего, для того, чтобы второй из них содержал в себе все свойства первого, включал в себя дополнительные, оставался собой, был тождественен первому и при всем этом качественно превосходил его.

Sudo и Docker нетождественные сущности

Нельзя проводить какие либо обобщения и абстрагирования до того, как станут известны все свойства объекта/явления, существенные и несущественные

Кроме всего этого, не помешало бы уточнить про разницу между sudo и su.

Еще одно ложное утверждение, полностью или частично, хотя оно не относится прямо к дискуссии, но зато хорошо показывает, как вы нарушаете логику:

Если же (человек) не понимает, что такое консоль и как настраивается сервер, то разрабатывать на фреймворках ему пока рано.

Частично потому, что не только работа с фреймворками требует навыков системного администрирования, а даже запуск статического сайта из локального каталога, с парой файлов, этого требует.
Т.е. это не относится только к фреймворкам.
Полностью потому, что человек может запросить настройку у кого либо, например, у друга и заниматься разработкой хоть на фреймворках, хоть без них.

Но мы сильно отклонились от главного моего возражения.
Главное то, что вы не то рассказывали про Docker, что следовало бы и как следовало бы.
Docker, это выполнение процесса(ов) в контейнере, который содержит только те файлы, которые нужны для выполнения этого процесса(ов), вместо создания экземпляра полной операционной системы с ее ядром.
Например, для Apache или Nginx не нужны все файлы полной ОС, а достаточно только тех, от которых напрямую зависит их работа, все остальное можно взять от системы, которая содержит этот контейнер.
Это был ответ на вопрос "что это".
Так как, противопоставлены виртуализация и контейнеризация, а мышление человека основано на ассоциациях, то этого уже достаточно для получения общего представления о том, что такое Docker.
То, что контейнеры создаются на основе образов и прочие принципы его работы, это уже относится к ответу на вопрос "как это".
Так же, другой разговор, как конкретно пользоваться Docker, т.е. практика.

Ответить
Дмитрий Елисеев

Sudo и Docker нетождественные сущности
Эти проявления действительности только внешне выглядят похожими

Совершенно верно. В этом и суть видео.

В нём мы сначала рассмотрели sudo, который умеет только подменять пользователя. А потом сделали свой более продвинутый runner, который сначала был внешне похож на sudo, но потом оброс инструментами контейнеризации и в итоге стал docker-ом.

И в этом и смысл тезиса, что docker внешне выглядит как sudo, но работает более продвинуто. То есть в этом плане docker - это как продвинутый sudo. В этом противоречий нет и логика соблюдена.

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

Это вы сами придумали, что я сказал, что они тождественны. И сами теперь на это обижаетесь и старательно пытаетесь доказать, что это всё там где-то внутри не так.

Главное то, что вы не то рассказывали про Docker, что следовало бы и как следовало бы. Docker, это выполнение процесса(ов) в контейнере, который содержит только те файлы, которые нужны для выполнения этого процесса(ов), вместо создания экземпляра полной операционной системы с ее ядром. Это был ответ на вопрос "что это". То, что контейнеры создаются на основе образов и прочие принципы его работы, это уже относится к ответу на вопрос "как это"

Об этом как раз и рассказано в видео и повторено в заключении.

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

Ответить
Иван

Чушь собачья ...

Ответить
Роман

Ну ты и зануда, Иван

Ответить
Иван

А по существу?

Ответить
Роман

по существу Дмитрий показывает на практике данный софт и делает акцент на его практическом применении в первую очередь, а-ля getting started для новичков, которые его не использовали ранее. С этой точки зрения данный подход обоснован. И новичкам не до этого сейчас, как же там объективно устроен Docker, им нужно сейчас научиться применить его и идти дальше в данном мастер-классе. Следовательно, каких-то упрощенных абстракции, которые использованы здесь, вполне хватит для понимания/применения технологии. А дальше уже самостоятельно изучить технологию не составит труда, если кто-то пойдет в откровенную автоматизацию и работу с докер.

смысл вести такой холивар, придираясь к каждому слову? Здесь не мастер-класс по девопс, а в первую очередь материал для php-программистов.

Ответить
Иван

Все таки показывает на практике?
Хорошо.
Значит я был прав, утверждая то, что содержимое видео не соответствует названию - в видео показывается а'ля "смотрите как я умею", а про то, "Что такое Docker", там говорится на уровне языка средневековой магии.

Новичков таким только калечить, буду рад за каждого из них, кто пройдет мимо этого видео.
Если новичкам не до того, как объективно устроен Docker, то это означает то, что им "не до", а не то, что им надо объяснть субъективно.
Вот еще один пример ваших нарушений логики, они на каждом шагу, вы не понимаете того, что вы говорите и о чем говорите.
С этим я и борюсь.
Новичкам это видео ничего не даст, они ничего не смогут запустить после его просмотра, ну у единиц может и получится, у тех, кто все озвученное мракобесие сможет скорректировать в своих головах.

Какие-то оговорки, ошибки, шероховатости есть у всех и это понятно, но то, что в в этом видео, это за пределами добра и зла.

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

Ответить
Роман

Значит я был прав, утверждая то, что содержимое видео не соответствует названию

Нет конечно :). В данном видео просто опущены теоретические подробности Docker — libcontainer — оригинальные механизмы и функции контейнерезации Линукс. (Как то: контрольные группы и пространства имён). Вместо них, не нарушая общего представления о технологии, показана точно такая же аналогия! Вот и все.

Ответить
Иван

Здесь точно секта, техническая, но секта.
Собрались механисты по интересам и делятся обломками своих представлений об окружающем мире.

Ответить
Роман

Аргументы закончились. Удачи в лечении.

Ответить
Иван

Аргументы на вас не действуют, как и на любых других сектантов, вы вне законов мышления и логики.

Ответить
Роман

А на тебя не действует здравый смысл и объективная реальность вкупе с логикой, за которую ты так топишь. Обосрался публично? Обтекай реалистично.

Ответить
Иван

Здравый смысл, это всего лишь фигура речи и у любого мракобеса имеет свое значение.
Объективную реальность еще следует выделить из субъективного восприятия, на что вы не способны в силу текущего развития.
А уж про логику не вам и упоминать, это объективная наука, а не те зависимости между словами, которые вам мерещаться.
Вас я имею в виду, поколение, а не тебя.
Вы дискутируете, как тот голубь играет в шахматы, разбрасываете фигуры, срете на доску и улетаете в свою стайку, хвастаться тем, как лихо вы выиграли.

Ответить
Роман

Этот словоблуд, выражающийся в твоих комментариях, предварительно появившийся из того бреда (или галлюцинации) в голове, абсолютно не имеет никакого отношения к логике и аргументам, говорящим в твою пользу, а скорее раскрывает истинную клиническую картину болезни человека. Человека который верит в свой бред и пытается убедить других, несмотря на факты. Факты которыми ты умылся, но так как ты болен, то продолжаешь нести чушь - причём полнейшую. А во вторых просто ты не досмотрел видео или не понял - но это и понятно, в связи с кардинальными нарушениями нейронных связей в голове. Точнее, даже, скорее всего, с их отсутствием!

Зарылся в определениях заумных (а скорее всего заучил). В которых не понимаешь ничего и кидаешься фразами.

Ответить
Иван

А, в заумных определениях!?
Ну вот, вот и подтверждение вашей недалекости.
Чуть дальше вашего ума, и все, сушите весла.
Видео я смотрел полностью и посмотрю еще раз, по всей видимости.
Возможно сделаю видеообзор, с объяснением всей кривизны, про которую хотел сообщить здесь собравшимся.
Слова понятны не всем одинаково, т.к. уровень умственного развития разный, да еще и экспериментальное образование делает свое грязное дело.

Ответить
Роман

Делай обзор, ловлю на слове. И не забудь ссылку скинуть, я уже заказал партию попкорна!

Ответить
Иван

Добро.

Ответить
Alexey

Ну так идите дальше, мимо секты))

Ответить
Иван

Позднее у тебя зажигание, однако! )
Не могу оставаться равнодушным, есть шанс спасти разум какого нибудь заблудшего малолетнего эльфа.
Хотя, сейчас малость не до этого.

Ответить
Иван

Забыл про монетизацию.
Нет, не честнее.
Когда через рекламу, платит какой-то "дядя в вакууме" у которого денег, как у дурака фантиков, а когда напрямую - простой человек из своих кровно заработанных.

Не честно потому, что вы не преподаватель, не педагог, не профессор и так далее, вас не обучали обучать, а этому надо обучаться.
Только что-то знать, уметь, обладать компетентностью - недостаточно.

Ответить
Дмитрий Елисеев

Когда через рекламу, платит какой-то "дядя в вакууме" у которого денег, как у дурака фантиков, а когда напрямую - простой человек из своих кровно заработанных.

Нет каких-то отдельных "дядь" и отдельных "простых людей". Все зарабатывают и платят одни и те же деньги. Но это не тема для обсуждения на ресурсе о программировании.

Не честно потому, что вы не преподаватель, не педагог, не профессор и так далее, вас не обучали обучать, а этому надо обучаться.

Честно. Преподаватель.

Ответить
Иван

Вы снова подменили тезис - речь не про наличие или отсутствие дядей, а про то, что честнее, а что нет.
Еще раз скажу, что зарабатывание на рекламе в Ютубе уже никого не удивляет и не обижает, никто уже давно не считает это обманом.
За все и всех платит рекламодатель, у которого денег, как у дурака фантиков, а не обычный человек, которому цена - одна зарплата.

По какому критерию вы зачислили себя в преподаватели?

Ответить
Дмитрий Елисеев

Еще раз скажу, что зарабатывание на рекламе в Ютубе уже никого не удивляет и не обижает, никто уже давно не считает это обманом.

Считает или нет, обижает или нет, нравится или нет - это лишь объективное оценочное суждение. К реальности и логике это никак не относится.

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

За все и всех платит рекламодатель, у которого денег, как у дурака фантиков, а не обычный человек, которому цена - одна зарплата.

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

Если хотите "честности", чтобы у остальных "простых" людей не отбирали кровные чтобы ими оплачивать вам зарплату, то работайте бесплатно.

По какому критерию вы зачислили себя в преподаватели?

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

Ответить
Иван

Диплом покажите.

Ответить
Дмитрий Елисеев

Отправьте почтой России официальный письменный запрос с распиской о нераспространении персональных данных на юридический адрес компании и я ответным письмом вышлю вам ксерокопию.

Ответить
Иван

Лицо попроще сделай и займись изучением логики.

Ответить
Дмитрий Елисеев

Есть, товарищ подполковник. Займусь :)

Ответить
kashamamina

аргументированный аргумент

Ответить
Sergei

Это на ютубе мощная обратная связь? Лолчто? В русском ютубе одна половина хейторов, которым все всё должны, а другая школьники с кремлеботами. Нашли блин где обратную связь получать. Ору :)

Ответить
BATPYIIIKOB

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

Ответить
Igor

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

Ответить
Иван

"Вы смеётесь надо мной, потому что я отличаюсь от вас, а я смеюсь над вами, потому что вы не отличаетесь друг от друга!"
(с)
Вас делает одинаковыми и похожими то, что вы жертвы современной системы образования и рынка.
Первая вас научила "ходить", а вторая определила минимальный уровень вашего развития в своих интересах.
Ваше мышление еще без фундамента, не подчинено разуму, для вас еще недоступны сложные размышления и смыслы.

Ответить
Игорь

Прекрасный диалог! :) Получил эстетическое удовольствие.

Ответить
Роман

Добрый день! Вопрос.

Docker выдаёт ошибку при сборке nginx

[emerg] 1#1: unknown directive "listen:" in /etc/nginx/conf.d/default.conf:2
Ответить
Роман

вернее не ошибку. а в логах отображается это, а контейнер отображает статус Exited (1)

Ответить
Иван

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

Ответить
Роман

можете пояснить? Docker использую без sudo.

Ответить
Иван

Не могу, с этим не ко мне, а к автору, это он утверждает, что sudo и Docker одно и тоже.

Ответить
Роман

да вот пока не могу нигде найти решение, контейнер собирается но пишет статус Exited (1).

Ответить
Иван

Могу попытаться помочь, если очень надо, мой id в контаче 95536713

Ответить
Роман

отправил запрос в vk

Ответить
Роман

Иван большое спасибо за помощь!!!

Ответить
Иван

Был рад тому, что смог помочь. )

Ответить
Алексей

Если решили проблему, почему нельзя выложить решение сюда? Тоже столкнулся с этим, не понимаю как решить

Ответить
Артём

Тестовый комментарий

Ответить
Иван

Для эстрогеновых эльфа-самцов.
Вот про то, что такое Docker, не придраться: https://youtu.be/KS80Knz-1Z4

Ответить
Дмитрий Елисеев

Да уж:

Виртуалки слишком тяжеловесные... Приложение - это кусок кода с зависимостями... Можно ли добиться изоляции, которую даёт виртуализация, но без виртуализации? Оказывается можно... Смысл работы Докера в том, что вместо того, чтобы запускать приложение веб-сервер Nginx напрямую на операционной системе, Докер запускает процесс Докера, внутри которого как в Матрице выполняется этот веб-сервер Nginx. Снаружи каждый Докер-процесс выглядит просто как процесс. А внутри каждое запущенное приложение думает, что оно уникальное.

Очень понятно, научно и логично :)

Ответить
Иван

А где антитезис-то?

Ответить
Дмитрий Елисеев

А где антитезис-то?

Папа, что такое Docker?
Сынок, Docker - это Матрица, которая в своём процессе запускает процесс как процесс.
О_О


Докер запускает процесс Докера, внутри которого как в Матрице выполняется этот веб-сервер Nginx

Никакой процесс в процессе буквально не запускается. Докер запускает процесс Nginx. Почему процесс видит себя уникальным - не показано. Что это за куски кода и коробочки-матрицы - не названо. Эта Матрица (Докер-процесс), которую имеет в виду автор, называется контейнером.


Докер в отличие от виртуализации полноценной очень лёгкий

Фраза не имеет смысла, так как сравнивает утилиту и виртуализацию. Сам Докер не осуществляет контейнеризацию. Раз это делается системными возможностями, то чем именно занимается сам Docker и как это реализовывается - не сказано.


Каждый контейнер можно описать с помощью Докерфайла и запускать везде

Фраза не несёт точного смысла, так как Докерфайлом описывается образ, а не контейнер.


Докер - это всего лишь контейнер

Раз вы к этому не придираетесь, то к вам у меня вопросов больше нет.


В общем, это только лёгкий рассказ под музыку и фантастическим видео, что Докер круче виртуалок. Но не показано ни одной технической детали, как это устроено и что как происходит. Ни одного понятия что такое образ, демон и т.п. не приведено. Как работают контейнеры и образы не сказано.

Видеоролик эффектный, но в практическом плане бесполезный.

Ответить
Иван

Вместо портянки компактная ссылка на нее.

Ответить
Дмитрий Елисеев

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

Ты несешь мракобесную дичь, нарушая законы логики, путая и подменяя ее понятия, не осознавая этого, не понимая этого и упираясь, когда тебе об этом сообщают.

Понятно. У него это "просто неточность или оговорка", а у меня "мракобесная дичь с подменой понятий". Просто блещете объективностью.

А от того, что в Docker спрограммировали свой драйвер libcontainer вместо LXC суть остального софта не поменялась.

Ответить
Иван

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

Ответить
Дмитрий Елисеев

Какая суть, какого софта, что из своих утверждений ты пытаешься спасти?

Ту реальную суть, которая вам не нравится. Что Docker - это набор софта, использующего встроенные возможности контейнеризации линуксового ядра, а не самостоятельная система, которой вы его считаете.

Docker, это самостоятельная система, приложение или как тебе угодно, которая(ое) является эволюционным развитием chroot и LXC, и даже уже не обертка последнего.

Раньше он был обёрткой над LXC. Теперь он использует cgrops и namespaces через библиотеку libcontainer. Так что эволюцией LXC является только libcontainer, а не весь Docker. Суть остальной системы не поменялась: вместо обёртки над LXC она так и осталась такой же обёрткой, но над libcontainer.

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

Ответить
Иван

Ты пытаешься спасти нереальную суть. )
И не переобувайся, ты хочешь спасти наиложнейшую свою аналогию Docker и sudo.

А то, что Docker, это набор софта, это твое позднее достижение, а я, в общем-то это и не отрицал и подтверждает это то, что я приводил названия утилит входящих в его состав.
С "набором" почти порядок, соглашусь, что граница понятия автономности Docker размыта, в чем-то подросло ядро, в чем-то сам Docker, но не я считаю, что Docker сейчас больше полноценное приложение, чем раньше, когда был оберткой LXC:

>> Early versions of Docker were little more than a wrapper around LXC paired with a union filesystem, but the uptake and speed of development was shockingly fast.

(c) p.9, Docker: A History, Chapter 1: The What and Why of Containers, "Using Docker" by Adrian Mouat.

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

Ответить
Дмитрий Елисеев

Ты хочешь спасти наиложнейшую свою аналогию Docker и sudo.

Спасать её и не надо, так как всё с ней нормально, как уже обсудили выше. Можно сказать вашими же словами про матрицу с процессом в процессе:

  • sudo запускает в матрице процесс с кастомными правами
  • docker запускает в матрице процесс с кастомными неймспейсами

Вот и вся практическая разница. Вы сами придумали, что это не так - сами обиделись. Теперь вместо этого упираете на свою логику, но кидаете нам видео с перлами "докер легче виртуализации" и "докер - это контейнер". Заодно отвергаете выше тезис "докер - это продвинутый запускальщик программ", но соглашаетесь и цитируете про "запуск как в матрице процесса в процессе". Выглядит весьма забавно. С чем именно мне спорить?

Early versions of Docker were little more than a wrapper around LXC paired with a union filesystem, but the uptake and speed of development was shockingly fast.

Ну и о чём здесь речь? Раньше он был небольшой обёрткой на LXC, а теперь после долгих стараний стал чуть большей обёрткой над libcontainer, обзаведясь дополнительными надстройками. Завёл Hub и научился запускать контейнеры в Swarm Mode. Об этом я и говорю. Что вы этой цитатой хотели сказать?

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

Ответить
Иван

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

Какой источник бы не взять, любой будет против тебя, например:

https://vps.ua/blog/docker-and-linux-containers/
https://habr.com/ru/company/FastVPS/blog/209072/

ничего не подкрепляет твои утверждения.

Попрежнему получается, что Docker это самостоятельная система контейнеризации и никакой оберткой чего либо в Linux он не является.

Еще раз, отдельно: то, что Linux предоставляет поддержку контейнеризации с помощью к.л. lib и прочего, не делает Docker оберткой.

LXC, это другая система контейнеризации, которой полноценно противопоставляется Docker и они вовсю сравниваются, что делает их отдельными, разными, самостоятельными сущностями.

Ответить
Дмитрий Елисеев

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

Пардон, но процитирую, что ваш второй источник говорит:

LXC — это имя собственное, название набора утилит только для управления подсистемами ядра Linux, а вовсе не для обеспечения работы контейнеров в ядре!

Механизмы, которые обеспечивают работу контейнеров внутри ядра, называются namespaces. Кроме этого, за ограничения различных ресурсов контейнера отвечает механизм ядра — cgroups.

Если же говорить о пространстве пользователя, то такие пакеты как LXC, systemd-nspawn и даже vzctl (утилита из проекта OpenVZ) занимаются исключительно тем, что создают/удаляют namespac'ы и конфигурируют для них cgroup'ы.

Думаю, что это подкрепляет мои утверждения про утилиты и обёртки.

Так что спасибо за источник.


Еще раз, отдельно: то, что Linux предоставляет поддержку контейнеризации с помощью к.л. lib и прочего, не делает Docker оберткой.

Ещё раз, отдельно, как сказано в вашем источнике выше: и Docker, и LXC, и остальные системы являются набором утилит-обёрток над инструментами контейнеризации namespaces и cgroups ядра Linux.

Живите теперь с этим.

Ответить
Иван

Ты упертый дурак.
Источники говорят о самостоятельности LXC и Docker - Docker не обертка.

Не думаешь ты, а выдумываешь и ошибаешься, ты не понимаешь что такое думать, это от тебя ускользнуло как-то.

>> и остальные системы являются набором утилит-обёрток над инструментами контейнеризации namespaces и cgroups ядра Linux

Нет, не сказано, особенно не сказано "являются набором утилит-обёрток".

Ответить
Дмитрий Елисеев

Нет, не сказано, особенно не сказано "являются набором утилит-обёрток".

В вашем втором источнике именно так и сказано:

LXC — это имя собственное, название набора утилит только для управления подсистемами ядра Linux

То есть что LXC - это набор утилит-обёрток над подсистемами ядра Linux.

Если бы LXC и Docker были самостоятельными, то могли бы обеспечивать контейнеризацию сами без необходимости использовать инструменты ядра. Но вместо этого они так и остаются обёртками над инструментами контейнеризации ядра.

Официальный источник про версию 0.9 говорит:

First, we are introducing an execution driver API which can be used to customize the execution environment surrounding each container. This allows Docker to take advantage of the numerous isolation tools available, each with their particular tradeoffs and install base: OpenVZ, systemd-nspawn, libvirt-lxc, libvirt-sandbox, qemu/kvm, BSD Jails, Solaris Zones, and even good old chroot. This is in addition to LXC, which will continue to be available as a driver of its own.

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

Second, we are introducing a new built-in execution driver which is shipping alongside the LXC driver. This driver is based on libcontainer, a pure Go library which we developed to access the kernel’s container APIs directly, without any other dependencies.

То есть Docker всего лишь к вышеперечисленным драйверам дописал свою отдельную библиотеку libcontainer на Go (которая является тонкой обёрткой над kernel’s container APIs), чтобы к этим подсистемам ядра обращаться через неё вместо использования LXC и других.

Ответить
Иван

Ты как хочешь можешь выкручивать смыслы в защиту своего сельского мышления, это твое дело.
Ты не осиливаешь главного, противопставлений.
Чем бы не был LXC, но это делает Docker самостоятельной системой, а не оберткой.

Ты тот, кто понимает значение отдельных слов, но не в силах понимать смысл предложений, это похоже на заболевание.
Возможно, что у тебя что вроде афазии Брока.

Логика, это не твое и не для тебя.

Кривляйся дальше, паяц.

Ответить
Sergei

Странные дела получаются: У нас Dockerfile для nginx лежит в папке /site/docker/nginx/conf.d

Но внутри этого Dockerfile мы используем COPY ./docker/nginx/conf.d /etc/nginx/conf.d

а не

COPY ./conf.d /etc/nginx/conf.d

Я думал, что ./ это относительно того, где этот докефайл и лежит. Кстати phpstorm также и считает. Но писать пути надо как будто этот докерфайл лежит в корне проекта, а не далеко в подпапке

Ответить
Дмитрий Елисеев

Это пути относительно context.

Ответить
Sergei

Да, спасибо :)

Ответить
Sergei

На 35-й минуты попробовал сбилдить D:\domains\apache-server>docker-compose up -d Building nginx Step 1/4 : FROM nginx:1.17-alpine ---> 29b49a39bc47 Step 2/4 : COPY ./conf.d /etc/nginx/conf.d ---> da020a9d9c7b Step 3/4 : WORKDIR /app ---> Running in 52801d2f954f Removing intermediate container 52801d2f954f ---> bd0adee81c05 Step 4/4 : COPY ./public ./public ERROR: Service 'nginx' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder534557375/public: no such file or directory почему то COPY ./public ./public не прошло. Есть идеи? На видео именно COPY ./public ./public копируется

Ответить
Sergei

Судя по всему из-за вольюма ошибка летела

Ответить
Дмитрий Елисеев

Копирование исходников в образ через COPY ./public ./public должно быть только в priduction образах. В development код примонтируется через volume и там эта команда COPY не нужна.

Ответить
Sergei

Подскажите, как заставить php-fpm отрабатывать файлы?
При конфигурации

version: "3.7"
services:
  nginx:
    build:
      context: site/docker/nginx
    ports:
      - "8080:80"
    volumes:
      - ./site:/app
    depends_on:
      - php-fpm
  php-fpm:
    build:
      context: site/docker/php-fpm
    volumes:
      - ./site:/app

Вот это дело уходит в бесконечную загрузку:

server {
    listen 80;
    charset utf-8;
    index index.php index.html;
    root /app/public;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass api-php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_read_timeout 300;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

А с

server {
    listen 80;
    charset utf-8;
    index index.php index.html;
    root /app/public;

}

Индексный файл отдает на скачивание. Чушь полнейшая

Ответить
Дмитрий Елисеев

Возможно из за fastcgi_split_path_info. В любом случае посмотрите логи по команде

docker-compose logs nginx
Ответить
kashamamina

А Вы не показали, как выглядит Dockerfile в nginx?

Ответить
Дмитрий Елисеев

Файл development/nginx/Dockerfile:

FROM nginx:1.17-alpine
COPY ./conf.d /etc/nginx/conf.d
WORKDIR /app

Файл production/nginx/Dockerfile:

FROM nginx:1.17-alpine
COPY ./docker/production/nginx/conf.d /etc/nginx/conf.d
WORKDIR /app
COPY ./public ./public
Ответить
Дмитрий

Добрый день, а никто не использовал связку win10 + vagrant? Поднял виртуалку при помощи vagrant, установил docker и docker-composer, контейнер с nginx запускается, но получаю 403 ошибку от ngnix.... и как ни гуглил, не нашел решения....

Ответить
Дмитрий

Было бы круто, если бы про Docker сделали отдельный цикл

Ответить
Дмитрий Елисеев

А что именно там нужно рассмотреть отдельно?

Ответить
Дмитрий

в целом, как работать с ним

Ответить
Дмитрий Елисеев

В целом мы в этом проекте много чего с ним рассмотрели и ещё рассмотрим.

Ответить
Pavel N

Подскажите пожалуйста после запуска docker-compose и обращении к странице выдает ошибку

frontend_1  | 2020/07/16 18:55:51 [error] 6#6: *1 "/app/public/index.html" is not found (2: No such file or directory), client: 192.168.99.1, server: , request: "G
ET / HTTP/1.1", host: "192.168.99.100:8080"
version: "3.7"
services:
  frontend:
    build:
      context: frontend/docker/development/nginx
    ports:
    - "8080:80"
    volumes:
    - ./frontend:/app
Ответить
Павел

вам же пишется ошибка, вебсервер не видит вашего файла. покажите конфиг nginx

Ответить
Павел

Я согласен, что объяснение немного "creepy", но все же автор старается Тем более тут очень много материала для так сказать расширения кругозора

Ответить
Pavel N

Подскажите пожалуйста после запуска docker-compose и обращении к странице выдает ошибку:

server {
    listen 80;
    charset utf-8;
    index index.html;
    root /app/public;

    add_header X-Frame-Options "SAMEORIGIN";
}
Ответить
Павел

а у вас есть файл ./frontend/public/index.html относительно места в файловой структуре где вы запускаете команду docker-compose up -d ?

Ответить
Pavel N

Не монтируются папки volumes: - ./frontend:/app. У меня docker работает на win 7pro не подскажите где настройку подправить?

Ответить
Pavel N

в VirtualBox добавил путь d/ d:\ не помогает

Ответить
Артем

Встречал в интернете, что Docker в продакшне - это сложно, опасно и медленно. Однако не нашёл информации о том, насколько это критично для сайта 50к+ уникальных юзеров в сутки.

Ответить
Дмитрий Елисеев

Его боялись раньше, когда он только появлялся и был недоделан. А сейчас крупные проекты уже спокойно переходят на него с Kubernetes, так как намного большее удобство работы с ним компенсирует небольшие потери скорости.

Ответить
Олег

Удивительно, но совсем недавно была озвучена прямо противоположная точка зрения https://habr.com/ru/company/ruvds/blog/524942/

Ответить
Дмитрий Елисеев

Прочитал. Противоположной точки не увидел. Увидел только посыл, что Docker и Kubernetes плохие, но альтернатив пока особо нет. И через лет пять может быть появятся.

Docker в продакшне - это сложно, опасно и медленно

Сложна сама задача поднять полноценный отказовоуйстойчивый кластер с динамическим распределением процессов по машинам, контролем работоспособности, внутренними сетями, маршрутизацией и балансировкой. И потом организовать в него деплой с бесшовным обновлением софта.

С контейнерами через Kubernetes это сделать сложно, но можно даже за один день. Но вручную без него сделать всё это же через bash или Ansible может оказаться ещё сложнее и занять недели.

С точки зрения опасности контейнеры дают небольшой плюс, что процесы в нём более-менее изолированы и порты сами по себе наружу не прокидываются. А то, как мы настраиваем Linux и пишем софт внутри контейнера в Dockerfile почти не отличается по безопасности от работы в Linux без контейнера. Было много крупных утечек из-за того, что кто-то не закрыл паролем ElasticSearch. А сайты на CMS ломают через SQL-иньекции в плагинах. Да, иногда появляются уязвимости самого Docker. Но как написано в статье, чаще проблема не в самом Docker, а в некомпетентности программистов.

А с точки зрения скорости разница небольшая.

Ответить
Дмитрий

Лучшее объяснение докера, что я встречал. С поправкой, что я встречал не так много, и лучшее - не значит идеальное (объяснение неймспейсов через префиксы - так себе идея, вряд ли незнакомый с первыми осведомлен о вторых (хотя может я - несчастливое исключение)).

Ответить
ProMix

Добрый день!

Подскажите пожалуйста, как добавлять пользователя www-data в образ при сборке т.к. вроде работа от root в контейнере не лучшая идея - но это не точно.

На сколько я понимаю что например php-fpm и php-cli работают от www-data ну покрайней мере точно пишут в var/log/name.log файлы. Поэтому большинство людей просто дают на эти директории(log,cache ...) права 777 - что вроде тоже не очень правильно. И ещё похоже что есть разница как добавлять пользователя в alpine и "не альпиновские" образы php.

Если не затруднит, объясните пожалуйста и ещё лучше с примерами.

Ответить
ProMix

я пытался вот так, но у меня всё валится:

RUN ...
    addgroup -g 1000 -S "www-data" && \
    adduser -S -g "www-data" "www-data" -u 1000 && \
    apk del .docker-php-global-dependancies && \
    rm -rf /var/cache/apk/* /var/lib/apt/lists/* /tmp/*

USER www-data

CMD ["php-fpm", "--nodaemonize"]
Ответить
Дмитрий Елисеев

Что именно и как валится?

Ответить
Дмитрий

Дмитрий, как используя технологию Docker научить php-fpm писать логи? Где можно увидеть логи php-fpm для просмотра ошибок? Спасибо за ответ.

Ответить
Дмитрий Елисеев

Во всех популярных Docker образах уже настроено по умолчанию логирование в потоки stdout или stderr вместо файлов.

Эти логи из любого запущенного контейнера можно увидеть по команде docker logs или docker-compose logs. И эти же логи сам Docker одновременно записывает в файл /var/lib/docker/containers/*/*-json.log для каждого контейнера. Оттуда их при желании можно собирать любыми сервисами для сбора и мониторинга.

А чтобы туда же логировал сообщения наш фреймворк достаточно настроить ему вместо файла вроде app.log записывать логи в псевдофайл php://stderr. В 24-ом эпизоде мы как раз это сделаем.

Ответить
Дмитрий

Дмитрий, вопрос не по теме. Из-за чего может возникать такая ошибка PHP? Какие места проверить

Exception - Class 'core\event\base' not found

× Debug info:
Error code: generalexceptionmessage

× Stack trace:
line 44 of /lib/classes/event/course_viewed.php: Error thrown
line 118 of /lib/classes/component.php: call to include_once()
line ? of unknownfile: call to core_component::classloader()
line 3739 of /course/lib.php: call to spl_autoload_call()
line 92 of /index.php: call to course_view()

т.е. не найден класс core\event\base. Файл физически присутствует. Это установка известной LMS Moodle Поднимается проект на Docker php:7.3-fpm-alpine

Спасибо за ответ.

Ответить
Дмитрий Елисеев

Точно не могу сказать. А без Docker запускается?

Ответить
Дмитрий

да, без Docker всё работает. На openserver windows локально, и на продакшене на сервере под управлением vesta apache+nginx. Хотел перенести проект по дистанционному обучению на готовой LMS Moodle на Docker. Но вот 2 недели не могу понять почему не получается.

Ответить
Дмитрий

Хотя бы примерно, на Ваш взгляд, куда нужно посмотреть?.

Использую этот шаблон окружения, немного переделав под себя. Вот мой докерфайл.

Ответить
Дмитрий Елисеев

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

Ответить
Дмитрий

права везде максимальные стоят drwxrwxrwx

Ответить
Дядя Женя

Посмотрев и опробовав (собезьянничав) несколько уроков, решил начать заново. Решил позапускать проекты с другой структурой каталогов. С апачем более-менее получается. Но вот nginx не хочет запускаться. Сделал в корне проекта всего две папки: public и docker. В первой положил index.html, во второй nginx/conf.d/default.conf и nginx/Dockerfile и php-fpm/Dockerfile. Их содержимое: nginx/conf.d/default.conf:

server {
    listen 80;
    charset utf-8;
    index index.html;
    root /app/public;

    add_header X-Frame-Options "SAMEORIGIN";
}

nginx/Dockerfile:

FROM nginx:1.17-alpine
COPY ./conf.d /etc/nginx/conf.d
WORKDIR /app

php-fpm/Dockerfile:

FROM php:7.4-fpm-alpine
WORKDIR /app
COPY ./ ./

команды по запуску:

docker build --file=docker/nginx/Dockerfile --tag=site-nginx ./
docker build --file=docker/php-fpm/Dockerfile --tag=site-php-fpm ./
docker network create inet-site
docker run -d --network inet-site --name php-fpm site-php-fpm
docker run --network inet-site --name nginx -p 8080:80 site-nginx

В таком виде первая команда ругается на путь к [2/3] COPY ./conf.d /etc/nginx/conf.d Если поменять на COPY ./docker/nginx/conf.d /etc/nginx/conf.d то образ собирается, но сайт не запускается. Пробовал помечать папку public как рутовую, но тоже не помогает.

И вопрос не по теме. Регулярно вижу комментарии с прокруткой и прочими тегами. А вот сам их сделать не могу. Это я их не вижу или они как-то автоматом создаются? Что не так?

Ответить
Дмитрий Елисеев

В таком виде первая команда ругается на путь

В nginx тоже нужно скопировать папку public.

Регулярно вижу комментарии с прокруткой и прочими тегами. А вот сам их сделать не могу. Это я их не вижу или они как-то автоматом создаются?

Здесь используется формат Markdown. Код оборачивается тройными косыми штрихами:

Текст.

```
COPY ./ ./
```

Текст.
Ответить
kashamamina

а можно узнать, где вы приобретаете домены?

Ответить
Дмитрий Елисеев

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

Ответить
lightburst7

Использую такой докер для запуска nginx:

FROM nginx:1.17-alpine
COPY ./conf.d  /etc/nginx/conf.d
WORKDIR /app

Выдает ошибку при сборке

 > [2/3] COPY ./conf.d  /etc/nginx/conf.d:
------
failed to compute cache key: "/conf.d" not found: not found

Файлы все расположены правильно. Не понимаю в чем проблема.

Ответить
lightburst7

Разобралась!

Вместо COPY ./conf.d/ /etc/nginx/conf.d
нужно COPY ./docker/nginx/conf.d/ /etc/nginx/conf.d

Ответить
gfdgdf

здравствуйте. урок супер, но есть проблема, после запуска с апач контейнер завершает работу и статус становится Exited. При этом с nginx работает норм, статус стоит Up, в браузере открывается.

Ответить
Владимир Перепеченко

Это потому что апач не стартанул из за неверной конфигурации. Чтобы увидеть причину, попробуйте запустить этот же образ в интерактивном режиме. Например так: docker run -it --network site --name nginx -p 8080:80 site-nginx Обычно сразу на консоли появляется полезная ругань. Ну или уже запускайте диагностические команды в интерактивном режиме внутри контейнера.

Ответить
Дмитрий Елисеев

Проверьте его логи командой docker-compose logs apache

Ответить
Владимир Перепеченко

Дмитрий, отличное практическое введение в предмет. А неадекватов, которые спорят ради спора - в бан плз.

Ответить
Dilmurod9820

ERROR: pull access denied for site-php-fpm, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

Ответить
Руслан

Боже, Иваний засрал всю ветку комментариев. Дмитрий, зачем вы вообще вступаете в диалог с отбитым на голову? Комментарии читаю если проскакивают какие-то технические аспекты, а тут больной человек нарисовался. Какой-то ноунейм пришел учить уму и разуму, лол.

Ответить
Рус

Хочется побольше видео про докер, в уже 2024 году. И под виндой он лучше начал работать.

Ответить
Рус

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

Ответить
Рус

Можно исходники выложить? То что на 32 минуте автор говорит, что должно работать и при этом он сам это не проверяет, Dockerfile не показал. Я в комментах что-то нашел. И у меня в итоге консоли всё отработало, а сайт не открывается. И как проверить не понятно. Возможно index.php не скопировался или не туда.

Ответить
Рус

В итоге запустилось в таком виде. По сути проблема была в путях копирования файлов в Dockerfile Смотрим в контейнере наличие файла index.php

docker exec php-fpm ls -lsh /app/public

docker/nginx/conf.d/default.conf:

server {
    listen 80;
    charset utf-8;
    index index.php index.html;
    root /app/public;
	
	location / {
		try_files $uri $uri/ /index.php?$args;
	}
	
	location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_read_timeout 300;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
	
}
FROM php:8.3-fpm-alpine
WORKDIR /app
COPY ./public/index.php /app/public/index.php
FROM nginx:1.27.1-alpine
WORKDIR /app
COPY ./docker/nginx/conf.d /etc/nginx/conf.d
Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Yandex
MailRu
GitHub
Google