Уроки Docker для начинающих / #4 - Dockerfile и свои образы
Выполнять команды в терминале не столь удобно, особенно когда речь идет про подключение образа с большим количеством настроек. В ходе урока мы с вами научимся работать с файлом Dockerfile. Он позволяет описать характеристики подключаемого образа.
✅ Полезные ссылки:
- Урок на сайте itProger: itproger.com/course/docker/4
⏰ Тайм-коды:
00:00 - Начало
00:20 - Что такое Dockerfile?
00:50 - VS Code и плагины
01:50 - Dockerfile
02:40 - Подключение OpenJDK
08:03 - Основной файл «Main.java»
09:05 - Сборка проекта
11:01 - Удаление образа
11:25 - Указываем порт
12:50 - Запуск проекта
18:00 - Заключительная часть
✔ Сообщество программистов: itproger.com/
✔ -------------
Вступай в группу Вк - vk.com/prog_life 🚀
Группа FaceBook - goo.gl/XW0aaP
Инстаграм itProger: / itproger_official
Instagram: / gosha_dudar
Telegram: t.me/itProger_official
Twitter - / goshadudar
- Уроки от #GoshaDudar 👨🏼💻
- Все уроки по хештегу #goshaLessons
Сейчас (2023) расширение для контейнеров в VSCode называется Dev Containers
Спасибо!
Спасибо тебе! Ты лучший!!
Большое спасибо!
В топ!
Я настолько преисполнился в своём познании... Всегда интересно изучать что-то новое. Я под первым уроком задавался вопросом: кто бы мне мог нормально объяснить суть контейнеров. Тогда действительно было непонятно. Но начиная с третьего урока на практике я осознал жизнь бытия. Благодарю
Спасибо, что разобрал тему на примере работы с java😂 Безмерно благодарен❤
Выдаёт ошибку, что не удалось загрузить или найти класс мейн
Совет. Если у вас при вводе команды docker build . - выдает ошибку failed to solve: the Dockerfile cannot be empty - то это значит что вы не сохранили сам файл проекта. CTRL+S или хз как в Маке, и этой ошибки не будет
Вот спасибо тебе.
Really you nice men
Спасибо тебе добрый человек! Очень интересный материал и объяснение!!
Спасибо огромнейшее!
Сейчас вроде бы Remote Containers для VScode это Dev Containers от того же Microsoft
Подтверждаю
Круто!😁😁😁
Если у вас после команды build образ показывается в консоли, но его нельзя удалить (No such container: ID), а в приложении докера образа не видно (у меня образы собранные по примеру в видео отображались только в терминале) - попробуйте удалить образ командой "docker rmi ID". После этой команды у меня образ удалился и другие созданные из Dockerfile образы стали отображаться в приложении Docker
Ты лучший!
Спасибо!
Спасибо
Помогло )
Спасибо большое!
А почему мы ввели run и контейнер не запустился в докере хотя он написал привет мир? Или если метод майн останавливается то контейнер так же завершает поток?
09:29 docker build . приводит к такой ошибке failed to solve with frontend dockerfile.v0: failed to create LLB definition: the Dockerfile cannot be empty
Нашли, как исправить?
11:20 если не удалить созданный образ и ещё раз сделать docker build. создастся ещё один образ, который будет дочерним к первому?
Второго расширения которое надо скачать нету в магазине расширений именно под тем именем, но как я понял, Dev Containers это то же самое
Какую команду писать в RUN, если образ Nodeдля JS?
Спасибо большое за такие понятные видео!) Подскажите, пожалуйста, есть ли подобные видео насчет портов? не совсем поняла откуда мы взяли 3001 и т.д.
Можно указать любой свободный порт. 3001 просто для примера был указан. Для большего понимания, нужно изучать основы сетей TCP/IP
Супер разбор, спасибо.Хотел додать что для удаления образа можно использовать "docker rmi ...." вместо "docker image rm ...."и не нужно писать всё ID образа достаточно 2-3 первых символа.
Молодец, хороший курс по докеру для новичков, резануло только слух "порядок команд не важен" исполняться будет но порядок все-таки важен, от менее часто изменяющегося состояния команд к более частым сверху вниз
Да, я тут недавно несколько часов голову ломал, почему у меня не запускался Apache, а всего лишь не в том порядке.
Столкнулся с проблемой при команде БИЛД failed to solve with frontend dockerfile.v0: failed to create LLB definition: the Dockerfile cannot be empty Далее перепробовал все. Ничего не помогает. И в терминале заметил у вас стоит кодировка Bash, а у меня только powershell. Можете подсказать как это все исправить? Спасибо за уроки
У меня такая же проблема, ждём пояснения🤔
откройте файл в блокноте из проводника, он будет пустой, чтобы все хорошо запустилось, нужно нажать "сохранить", это как для докер файла, так и для java
Я в VScode нажал файл , автосохранение , и все сработало
нужно включить автосохранение
Remote containers похоже теперь Dev Containers называется
Всем привет. Подскажите, все делал как по уроку, а в репозитории у меня так не появился файл с таким же весом, как и openjdk. Какие либо расширения дополнительно нужно было устанавливать?
в процессе выполнения 'docker build .' никаких ошибок не вылезало?
нонче Remote - Containers называется Dev Containers
Интереснооо .-.
У меня вообще интересная ситуация получается: "failed to solve with frontend dockerfile.v0: failed to create LLB definition: the Dockerfile cannot be empty"
Нужно сохранить докер-файл и заново запустить build
если нужно снести образ то можно командой docker rmi hash ТЕ для кондейнера rm а для образа rmi
минут 15 искал где в Visual Studio Code приложения, оказалось что у меня Visual Studio (без Code) и такое бывает)
лайк+подписка+коммент)))) Нужно по Kubernetes, Ansible, Terraform, Azure,GCP, AWS. Знаю - не треснет
расширение для VisualStudio - Remote Containers не найдено, ближайшее это Dev Containers (по описанию совпадает 100%)
Ставки на спорт 50 на 50 👍
Можете, пожалуйста, написать такой же код только для питона. Не понимаю, что нужно прописывать в run и cmd.
узнали?
На 14:40 образ по итогу не удаляется, сначала нужно rm контейнеры, которые он использует
Добрый день, не пойму у меня после команды docker run -p 3001:8001 b3b05af661be пишет что /bin/sh: [java,: command not found :((
CMD ["java", "Main"] java и Main должны бить в двойных кавычках
Итого не удалялся образ как в команде, даже остановка контейнера не помогла который его использует, помогло удалить контейнер и затем удалить образ
Обязательно нажмите сохранить файл докер и отдельно файл джава, только после собирайте и запускайте!
А можно допустим написать игру на каком-то языке для виндовс и запустить его на линукс с помощью докера?
Засунь винду в докер
Привет. Хочу дать небольшой совет, как обычный зритель. Юскейс: мне понравилось видео, я включил весь плейлист. Смотрю очередное видео, мне очень нравится, думаю что досмотрю и обязательно поставлю лайк. А может и коммент напишу. Видео заканчивается(что понятно по предложению подписаться), я беру в руку телефон, чтоб поставить лайк, а там уже включилось следующее видео. Теперь, чтоб поставить лайк тому видео, мне надо свернуть это, где уже началось что-то интересное, открыть плейлист, найти предыдущее видео, включить его, поставить лайк и вернуться обратно на новое видео. Многие ли станут так париться? Просто поставят лайк новому видео, а старое останется без него. К чему я веду, нужна финальная заставка. 3, а лучше 5 секунд. Не слишком длинная, но чтоб можно было успеть схватить телефон и влепить класс 👍
Когда он говорит около 20 секунд в конце "подписываемся, ставим лайки блаблабла" можно спокойно успеть поставить лайк и переключиться на следующее видео
@@nakamasama я смотрю и другие каналы, на многих из них подписаться предлагают в середине, а то и несколько раз за видео. Потому эти фразы для меня не являются признаком конца видео. В любом случае, я не говорю, что все тормозят, как и я. Только описал свой случай и предположил, что я такой не один.
@@liosha2007 Я Вас понимаю. Про себя расскажу. Я тоже подписан на 125+ каналов и на всех подписаться просят и в начале, и в середине, и в конце видео. Поэтому это действительно не показатель. Однако лично у меня есть чуйка, когда видео заканчивается. Я не знаю, сколько длится видео, но по фразам типа "мы просмотрели", "мы проверили", "остальное будет в следующей серии" и т.д. (таких шаблонных фраз, если мозги поднапрячь, можно с три десятка вспомнить), я понимаю, что видео почти закончилось, ставлю лайк и перехожу на следующее видео, при чём до завершения видео остаётся от 10 до 60 секунд. Это столько авторы обсуждают после ролика, что они сделали в этом ролике и что планируют дальше. Я всегда это пропускаю. Но я сам так не всегда делаю. Например, если видео открыто на фоне и я его слушаю, но при этом я занимаюсь ещё чем-то другим (играю в игры, что-то пишу), то я слушаю и окончание видео и только после того, как оно завершится, ставлю лайк и перехожу на следующее видео.
И ещё по поводу плей-листов. Можно просто выключить авто-воспроизведение. Тогда видео не будет переключаться. Вы спокойно успеваете поставить лайк и включить следующее видео. Мне легче и удобнее так, а когда видео само переключается - меня это бесит и раздражает. Кому-то одно нравится, кому-то второе. Это вкусовщина.
Изображение ??
Вот не понял, зачем здесь папка java указывается в COPY и WORKDIR. Она ведь не используется в итоге.
Команда WORKDIRиспользуется для определения рабочего каталога контейнера Docker в любой момент времени. Команда указана в Dockerfile. Любая RUN, CMD, ADD, COPYили ENTRYPOINTкоманда будет выполняться в указанном рабочем каталоге.
если образ это blueprint, а контейнер непосредственно окружение в которой все работает. так может файлы будут скопированы в контейнер, а не в образ. а то я путаюсь.
похоже все же образ
тоесть image это файлы кода, разного кода, в том числе хоть операционки, если это убунту. грубо говоря файлы и папки на выключенном компе., конгтейнер всетаки среда исполнения, и если контейнер запущен это всеравно что включить комп.
да. название зря не указали)) погуглил docker build -t myapp - myapp собственно название.
где-то ж услашал что образ blueprint так и засело в голову. что-то важно пять дней подряд не можешь запомнить, а что-то мимолетное прям глубоко закапывается.
нажми на кнопку, получишь результат.
c 0:54 от куда те приложения скачивать? Ты обьясни нормально!
это редактор, можно notepad++ использовать вместо него
максимально не удобно натягивать это видео на питон, если делаешь первый раз
Весь этот курс - издевательство какое-то. Клиент: я хочу построить спорткар своими руками. Помощник: - обучает как сделать деревянную повозку. Так и эти видеоуроки. Они бессмысленны. Никто не занимается докером ради приложения уровня "хелло ворлд". Человек который изучает докер - это программист который написал проект с кучей зависимостей, и хочет его запустить в докере. Соответственно у него млн вопросов из-за ошибок которые он получает но не знает что с ними делать. Например: я юзаю мавен, мне уже не подходит простой openjdk, который к тому же отказывается компилить проекты которые юзают java 21. Как вообще работать с зависимостями Spring? Selenium? как докеру понять что мне нужно не просто запустить javac main а мне нужно сраный мавен стартануть а тот должен запустить спринг, ну или наоборот, хер знает как оно там под капотом работает. И потом где эти директории которые прописываются типо /usr/src/app ....Где они? Их нет ни в докере, ни в его директории хранилища, ни в проекте... А после пары неудачных запусков докерфайла у меня - 9гб места на диске С, а докер показывает просто полурабочий образ весом 500мб. Что с этим делать? Почему докер жрет гигабайты быстрее чем я обучаюсь? ВОт на эти вопросы я хочу получить ответы изучая докер. А не вот это вот все....
Читаешь мои мысли дружище
ну неудвивтельно, что ты не можешь решить все эти проблемы, ведь ты даже прочитать текст внимательно не можешь, куда уже там докер. Курс называется "для начинающих". Что ты хочешь от него? С твоими вопросами только гуглить и искать инфу самостоятельно, а не курсы для начинающих смотреть.
@@user-zd7qv9iw9t Докер априори начинающим не нужен. Все равно что в детском саду преподавать высшую математику, назвав курс - высшая математика для начинающих....
Хреновый ты программист, если даже не знаешь как все под капотом работает и не можешь понять для чего мавен и ботинок
@@user-tx8br4zn1s Видимо я лучше тебя, раз я первым разобрался с докером и со всем остальным мусором который никак не влияет на мой заработок. А ты только ща посмотрел видос и отписал. Я уже проект успел доделать, задеплоить и получить деньги, пока ты тошнотворно изучал то, что в принципе не важно. 99.9% программистов не понимают почему компьютер понимает исключительно бинарный код, но как-то ж программируют... А я знаю, и дальше че? Мне кто-то заплатил хоть раз за эти знания? Нет. Вот и знание мавена и прочего шлака элементарно можно пропускать потому что за это не платят. Платят по факту конечного результата. Лучший айтишник это тот кто добивается результата так же как игроки спидраннеры. А все остальное вкусовщина. Хочешь знать - учи. Дело каждого.
первый
второй
Четвёртый
Спасибо . Сними еще про Кали линукс
Тупейшее объяснение докерфайла. Ничего не понятно. Зачем указать везде корневую папку. Покажи как работать, когда файл находится глубоко в проекте. На винде можно запутаться со слэшами, но урок конечно записан на макОС, которого у большинства нет и никогда не будет, а под винду никаких оговорок не сказано. Переслушал объяснение про RUN и CMD. Объяснено на отвали, каким то кривым языком. Попытка объяснить разницу выглядела как скорее попытка объяснить схожесть.
Как по мне так неудачный пример для урока...
Блин, ну не джавак же, мои ушиииии, как же режет😂 Это же простой английский 1 класса - алфавит 😮 Мы же не говорим к++, мы говорим си++, поэтому джаваси))))
Английский первого класса тут не причем. Если javac и читается как джаваси, то только потому что "C" это коращение второго слова. Вы же не будете читать слова aztec, comic, Mac, как атстеси, комиси, маси. С точки зрения английского, он произнес как раз-таки правильно.