Хотелось бы поделиться "граблями", на которые успел наступить при работе с docker, интересными фишками и вообще рассказать про эту замечательную технологию.
Что за зверь такой?
Думаю, сегодня уже все слышали про docker, но все же:
Docker - контейнеризатор приложений. =) (более развернутое пояснение на вики)
А тут я собрал основные свойства технологии:
Система контейнеров
Возможность добавлять в контейнер сам проект , среду окружения , сервер и все остальное
Запуск на любой машине без установки среды
Запуск с помощью одной команды
Безопасность
Возможность тестирования новых технологий без ее установки
Установка
Установка вполне дефолтная, но все же уделю этому немного внимания
Первое, что необходимо сделать - перейти на официальный сайт (удивительно, правда?!)
далее, как показано на скриншоте выше, вбираем вашу систему, и дожидаемся загрузки.
Стандартная установка и все, поздравляю, Вы установили себе Docker Desktop.
Грабля при установке
На ОС Windows может появиться ошибка, связанная с Hyper-V (система аппаратной визуализации)
Решение:
Переходим в папку с Docker -> открыть файл start.sh ->открываем в любом текстовом редакторе -> найти следующую строку:
"${DOCKER_MACHINE}" create -d virtualbox $PROXY_ENV "${VM}"
->заменить на :
"${DOCKER_MACHINE}" create -d virtualbox --virtualbox-no-vtx-check $PROXY_ENV "${VM}«
->снова запустить процесс установки (готово)
Работа с Docker
Есть несколько способов работы с Docker :
Первый запуск
Запускаем наш Docker Desktop и открываем командную строку. После запуска приложения, у Вас должна отображаться следующая иконка (в скрытых значках):
в командной сроке пишем следующую команду:
docker
и если все верно сделано, то у Вас отобразиться список всех доступных команд и их описание:
Если командная строка говорит, что не знает такой команды как "docker"
Проверьте переменные зависимости. В переменной Patch мог не прописаться путь до docker.exe. Найдите путь до docker.exe (обычно в папке bin) и добавьте путь в переменную Patch
Надеюсь у Вас все хорошо, и команда docker заработала и описание команд появилось и погода хорошая. Теперь то можно и скопировать команду из Docker Desktop
и выполнить ее в командной строке. По идее должно получиться следующее:
И что же мы сделали? Создали и запустили контейнер docker/getting-started на порту 80.
Вернемся в наш Docker Desktop и видим следующее:
Поздравляю - мы запустили контейнер.
Перейдем во вкладку Images и увидим следующее:
Видим образ, на основе которого создался наш контейнер. (это все мы сделали командой выше)
Посмотреть информацию можно вернувшись в командную строку и прописав команду:
docker info
тогда увидим следующее
Видим всю информацию про все контейнеры и образы.
Давайте-то уже посмотрим, что у нас получилось. Переходим в Docker Desktop во вкладку Containers/Apps и нажимаем следующее:
Hello world! по docker-ски
Можем насладиться проделанной работой)
Контейнеры и образы
Контейнеры, образы - чтооооо?!
Давайте теперь немного теории(совсем чуть-чуть)
Образ – готовое решение , содержащее некий функционал(нельзя изменять), на его основе можем создать свой контейнер
Контейнер – это собранный проект , состоящий из образов: упакованное (контейнеризированное) приложение на основе образов
Посмотрим на картинку ниже:
Тут наглядно показан принцип работы технологии docker, но все же, уточним моменты:
Docker deamon – промежуточный api для нахождение и скачивания нужного image
Docker hub - место сбора различных образов
Images –образы
Containers- контейнеры
Установка образа
Давайте попробуем развернуть какой-нибудь контейнер (что-то повеселее стартовой страницы).
Заходим на сайт docker
Переходим во вкладку: Explore
В поиске вводим название нужного образа (я буду скачивать образ java- вы можете выбрать любой другой)
находим следующее
нажимаем, видим сразу готовенькую команду:
Копируем и вставляем в командную строку –> тем самым устанавливаем себе образ java:
Запуск образа
Давайте теперь создадим и запустим контейнер на основе только что скачанного образа.
docker run имя_образа
"Стоп" - скажите Вы . А откуда взять имя образа? А вот от куда:
docker images
На вас вывалится список образов, находим там нужный и вставляем в команду выше:
Что получили
Запустить образ без контейнера невозможно – противоречит принципу docker, следовательно у нас создался контейнер на основе нашего образа, который мы пытались запустить
Давайте запустим наш контейнер в интерактивном режиме и убедимся, что мы все сделали верно. Вводим команду для запуска (даем свое имя- тут я обозвал его как JavaContainer):
docker run -it --name JavaContainer openjdk
Получаем запушенный контейнер:
Видим - запустили контейнер с java (об этом нам говорит надпись jshell- java оболочка). Ну хорошо, поигрались с java, а как вернуться обратно, команды docker то уже не работают. И что делать ?
Спокойствие, только спокойствие. Нажимаем магическую комбинацию Ctrl + D:
и о чудо, можно выдохнуть)
А что еще можно запустить?
Давайте , на последок, посмотрим еще возможности docker и запустим Ubuntu.
Схема запуска не сложнее, чем мы занимались выше, все действия аналогичные:
Аналогично шагам выше , зайдем на сайт и найдем Ubuntu, после воспользуемся командой в описании на сайте
Далее запустим в интерактивном режиме:
docker run –it –name имя_контейнера имя_образа
как-то так )
Итоги
Тут я собрал некоторые полезные команды docker и их описание на русском. Может кому пригодится).
Это был краткий обзор на технологию Docker, разумеется он не претендует на полноценный гайд: не было рассказано про Dockerfile или Docker compose или про запуск контейнеров в IDE, про создание собственных образов; НО цель данной статьи - помочь ознакомиться с базой а не рассказать про все и вся). В будущем поговорим про незатронутые тут моменты в Docker. Надеюсь моя статья была для Вас полезной!
Комментарии (12)
Hrodvitnir
26.04.2022 14:58+82022 год, мы учимся устанавливать докер и скачивать образы на Хабре
ohno1052
26.04.2022 17:01+3Для 95% это какая-то непонятная магия, а хабр достаточно популярен, такие вводные статьи нужны всегда. Я сам несколько лет назад был в числе этих 95% и испытывал острую нехватку материалов по айти step-by-step. Проблема в другом, автор явно не понимает что и зачем он пишет, в итоге, как уже написали выше, это скорее вредно, чем полезно.
sshikov
26.04.2022 19:35+1>такие вводные статьи нужны всегда
А вы серьезно думаете, что их тут нет? Докер между прочим вышел 9 лет назад, и его тут пропагандировали уже много лет — и даже уже были аргументированные посты о том, что возможно его больше не стоит использовать (т.е. он уже устарел).
Ну т.е. очень вероятно, что автор опоздал на пару лет.
>это скорее вредно, чем полезно
Так это вполне предсказуемо. Автор ведь такой же, каким вы были, а писать материалы для начинающих — это совсем не просто, и для этого нужно как правило быть опытным. Ну или хотя бы изучить сначала тему в совершенстве.
dendron
26.04.2022 16:05Статья, конечно, треш, но не менее трешовым является лицензионное соглашение Docker Desktop. Оно вроде как бесплатное для частного использования "на поиграться", но на самом деле нет. Авторы в погоне за наживой понапихали туда совершенно лютых формулировок, которых я не встречал ни в одной другой EULA. Например, что вы обязаны документировать каждое ваше использование этим продуктом, включая обращение к внешним сервисам и предоставлять этот отчёт по первому требованию. И да, это для частных пользователей, не для юрлиц, для "бесплатного" использования, без каких-либо исключений.
В общем, советую внимательно почитать EULA прежде чем по российской привычке не смотря прокликивать все эти скучные и непонятные английские тексты.
scruff
26.04.2022 19:49-4Статья норм. Как раз для новичка. Сколько раз я не начинал изучать докер - целостности в знаниях так и не наблюдалось к сожалению. Вероятно недостаток практики берет своё. А всё потому что, что до сих пор я не находил рабочих образов, например простейшего почтовика или АТС-ки или 1С. Такое ощущение, что технология весьма ограниченная и далеко не всё ею можно организовать. Поэтому для меня проще развернуть полноценный сервак, поставить на него всё что нужно, без всяких прослоек в виде докера, которые могут глюкнуть в любой момент. Да, масштабирование страдает, зато просто, быстро и надежно.
manyakRus
27.04.2022 12:33хорошая статья :-)
В ютубе лучше конечно, но на работе нельзя смотреть видосики
Никто из программистов 1С и обычных сисадминов не (с)могут понять зачем оно нужно и как им пользоваться. Надо целый час объяснять человеку что это и зачем и всё равно в итоге он скажет что оно нафиг не нужно (ему)
scruff
28.04.2022 05:55в ютюбе все поверхностно, практические кейсы там не рассматриваются. А как деплоить имейджи, запускать/удалять контейнеры, мапить порты и директории я прекрасно знал еще лет 5 назад.
elusiveavenger
Если Вы, по какой-то причине, ещё не знаете, что такое docker и для чего но, то лучше не читайте эту статью. Если прочитали - забудьте. Для человека, который пытается понять, что такое docker и как он может ему пригодиться, эта статья ничего хорошего не подскажет.