Что есть Docker

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

Комментарии (61)
Никита
2019-12-14 20:58

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

Ответить
Deworker Pro
2019-12-15 09:57

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

Ответить
Denis Shcherbakov
2019-12-15 09:01

Может кто использует 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 ?

Ответить
<Котейка />
2019-12-16 11:51

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

Ответить
Denis Shcherbakov
2019-12-16 16:15

Решил проблему с путями в 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

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

Ответить
Deworker Pro
2019-12-17 16:09

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

Ответить
<Котейка />
2019-12-17 21:53

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

Ответить
Deworker Pro
2019-12-17 22:38

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

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

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

Ответить
Paul
2019-12-16 19:31

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

Ответить
Deworker Pro
2019-12-18 06:45

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

Ответить
Paul
2019-12-18 06:50

Класс! :)

Ответить
Denis
2019-12-16 20:12

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

Ответить
Denis Shcherbakov
2019-12-17 09:25

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

Ответить
Юлия Елисеева
2019-12-17 14:23

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

Ответить
<Котейка />
2019-12-17 21:54

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

Ответить
Denis Shcherbakov
2019-12-18 14:03

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

Ответить
Игорь
2020-02-09 15:59

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

Ответить
Альберт
2019-12-18 10:25

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

Ответить
Юлия Елисеева
2019-12-18 10:43

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

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

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

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

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

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

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

Ответить
<Котейка />
2019-12-20 22:00

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

Ответить
BATPYIIIKOB
2020-02-17 12:53

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

Ответить
Ruslan
2020-02-17 15:20

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

Ответить
voodooism
2019-12-29 16:28

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

Ответить
Григорий
2020-01-09 14:18

Если у кого-то ошибка при запуске 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
Ответить
Deworker Pro
2020-01-10 09:03

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

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

Ответить
Григорий
2020-01-10 09:51

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

Ответить
Иван
2020-01-23 18:21

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

Ответить
Deworker Pro
2020-01-24 07:48

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

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

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

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

Ответить
Иван
2020-01-24 13:32

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

Ответить
Deworker Pro
2020-01-24 13:46

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

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

Ответить
Иван
2020-01-24 14:03

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

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

Ответить
Deworker Pro
2020-01-24 19:25

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

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

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

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

Ответить
Иван
2020-01-25 15:34

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

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

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

Ответить
Deworker Pro
2020-01-25 18:15

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

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

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

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

Ответить
Иван
2020-01-26 13:09

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

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, т.е. практика.

Ответить
Deworker Pro
2020-01-26 14:37

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

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

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

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

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

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

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

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

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

Ответить
Иван
2020-01-26 18:54

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

Ответить
Иван
2020-01-25 15:46

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

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

Ответить
Deworker Pro
2020-01-25 18:19

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

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

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

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

Ответить
Иван
2020-01-26 13:21

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

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

Ответить
Deworker Pro
2020-01-26 15:13

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

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

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

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

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

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

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

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

Ответить
Иван
2020-01-26 18:56

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

Ответить
Deworker Pro
2020-01-26 20:39

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

Ответить
Иван
2020-01-26 22:52

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

Ответить
Deworker Pro
2020-01-27 07:24

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

Ответить
BATPYIIIKOB
2020-02-17 12:55

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

Ответить
Игорь
2020-02-09 15:57

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

Ответить
Роман
2020-02-11 18:22

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

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

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

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

Ответить
Иван
2020-02-17 13:04

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

Ответить
Роман
2020-02-18 14:02

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

Ответить
Иван
2020-02-18 15:57

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

Ответить
Роман
2020-02-18 16:00

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

Ответить
Иван
2020-02-18 16:07

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

Ответить
Роман
2020-02-18 16:13

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

Ответить
Роман
2020-02-18 20:16

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

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