![](https://habrastorage.org/getpro/habr/upload_files/6aa/9b8/ecc/6aa9b8ecc06e656ba814bbd43c548547.jpg)
Хотелось бы поделиться "граблями", на которые успел наступить при работе с docker, интересными фишками и вообще рассказать про эту замечательную технологию.
Что за зверь такой?
Думаю, сегодня уже все слышали про docker, но все же:
Docker - контейнеризатор приложений. =) (более развернутое пояснение на вики)
А тут я собрал основные свойства технологии:
Система контейнеров
Возможность добавлять в контейнер сам проект , среду окружения , сервер и все остальное
Запуск на любой машине без установки среды
Запуск с помощью одной команды
Безопасность
Возможность тестирования новых технологий без ее установки
Установка
Установка вполне дефолтная, но все же уделю этому немного внимания
Первое, что необходимо сделать - перейти на официальный сайт (удивительно, правда?!)
![официальный сайт docker официальный сайт docker](https://habrastorage.org/getpro/habr/upload_files/71f/eee/dd7/71feeedd72e278232ced4b0bd8b215f1.png)
далее, как показано на скриншоте выше, вбираем вашу систему, и дожидаемся загрузки.
Стандартная установка и все, поздравляю, Вы установили себе Docker Desktop.
![первый запуск первый запуск](https://habrastorage.org/getpro/habr/upload_files/353/105/ed1/353105ed14479ef81319ec07792fd987.png)
Грабля при установке
На ОС 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 и открываем командную строку. После запуска приложения, у Вас должна отображаться следующая иконка (в скрытых значках):
![](https://habrastorage.org/getpro/habr/upload_files/c02/cd0/9e4/c02cd09e43d26fb635b2cf01c1ca50e9.png)
в командной сроке пишем следующую команду:
docker
и если все верно сделано, то у Вас отобразиться список всех доступных команд и их описание:
![cmd cmd](https://habrastorage.org/getpro/habr/upload_files/e0e/c3e/c76/e0ec3ec769ecf37033e253eeb5e70201.png)
Если командная строка говорит, что не знает такой команды как "docker"
Проверьте переменные зависимости. В переменной PATH мог не прописаться путь до docker.exe. Найдите путь до docker.exe (обычно в папке bin) и добавьте путь в переменную PATH
Надеюсь у Вас все хорошо, и команда docker заработала и описание команд появилось и погода хорошая. Теперь то можно и скопировать команду из Docker Desktop
![Про это команду идет речь Про это команду идет речь](https://habrastorage.org/getpro/habr/upload_files/0da/5ba/345/0da5ba3456b0821afcecb5af1c463c7b.png)
и выполнить ее в командной строке. По идее должно получиться следующее:
![процесс создание контейнера процесс создание контейнера](https://habrastorage.org/getpro/habr/upload_files/a86/c14/f72/a86c14f7205548de00542112c2eb5753.png)
И что же мы сделали? Создали и запустили контейнер docker/getting-started на порту 80.
Вернемся в наш Docker Desktop и видим следующее:
![Запущенный контейнер Запущенный контейнер](https://habrastorage.org/getpro/habr/upload_files/910/210/bc4/910210bc499e1f323459c50e81172a92.png)
Поздравляю - мы запустили контейнер.
Перейдем во вкладку Images и увидим следующее:
![](https://habrastorage.org/getpro/habr/upload_files/516/b79/58f/516b7958ffe6dd081ebeec6ca8a9efee.png)
Видим образ, на основе которого создался наш контейнер. (это все мы сделали командой выше)
Посмотреть информацию можно вернувшись в командную строку и прописав команду:
docker info
тогда увидим следующее
![](https://habrastorage.org/getpro/habr/upload_files/ef9/cc3/36a/ef9cc336a3022206c859213ca50fdb3f.png)
Видим всю информацию про все контейнеры и образы.
Давайте-то уже посмотрим, что у нас получилось. Переходим в Docker Desktop во вкладку Containers/Apps и нажимаем следующее:
![](https://habrastorage.org/getpro/habr/upload_files/8ef/26c/42f/8ef26c42fc92567d5d33bd26057d6135.png)
Hello world! по docker-ски
![](https://habrastorage.org/getpro/habr/upload_files/d49/43a/2af/d4943a2af5851e31370fc2fd2772677c.png)
Можем насладиться проделанной работой)
Контейнеры и образы
Контейнеры, образы - чтооооо?!
Давайте теперь немного теории(совсем чуть-чуть)
Образ – готовое решение , содержащее некий функционал(нельзя изменять), на его основе можем создать свой контейнер
Контейнер – это собранный проект , состоящий из образов: упакованное (контейнеризированное) приложение на основе образов
Посмотрим на картинку ниже:
![Архитектура docker Архитектура docker](https://habrastorage.org/getpro/habr/upload_files/16f/84c/0c6/16f84c0c6e3740a14e40bf54d3dddb07.png)
Тут наглядно показан принцип работы технологии docker, но все же, уточним моменты:
Docker deamon – промежуточный api для нахождение и скачивания нужного image
Docker hub - место сбора различных образов
Images –образы
Containers- контейнеры
Установка образа
Давайте попробуем развернуть какой-нибудь контейнер (что-то повеселее стартовой страницы).
Заходим на сайт docker
Переходим во вкладку: Explore
В поиске вводим название нужного образа (я буду скачивать образ java- вы можете выбрать любой другой)
![на на](https://habrastorage.org/getpro/habr/upload_files/057/54e/618/05754e6188c4d80c7e183542b65b62de.png)
находим следующее
![](https://habrastorage.org/getpro/habr/upload_files/d2d/317/05f/d2d31705fd1a39b4112063857864fcae.png)
нажимаем, видим сразу готовенькую команду:
![](https://habrastorage.org/getpro/habr/upload_files/153/6d3/de1/1536d3de1838f4620ea3cf508d5a0913.png)
Копируем и вставляем в командную строку –> тем самым устанавливаем себе образ java:
![](https://habrastorage.org/getpro/habr/upload_files/d19/b30/132/d19b30132fe42d446ba99bad46e52a0b.png)
Запуск образа
Давайте теперь создадим и запустим контейнер на основе только что скачанного образа.
docker run имя_образа
"Стоп" - скажите Вы . А откуда взять имя образа? А вот от куда:
docker images
На вас вывалится список образов, находим там нужный и вставляем в команду выше:
![](https://habrastorage.org/getpro/habr/upload_files/60e/caf/51b/60ecaf51bfd39e87c74295a46012ab4a.png)
Что получили
Запустить образ без контейнера невозможно – противоречит принципу docker, следовательно у нас создался контейнер на основе нашего образа, который мы пытались запустить
![](https://habrastorage.org/getpro/habr/upload_files/4b2/e7e/443/4b2e7e4436cdfa113d04634f829d3f42.png)
Давайте запустим наш контейнер в интерактивном режиме и убедимся, что мы все сделали верно. Вводим команду для запуска (даем свое имя- тут я обозвал его как JavaContainer):
docker run -it --name JavaContainer openjdk
Получаем запущенный контейнер:
![](https://habrastorage.org/getpro/habr/upload_files/5eb/5f9/2ef/5eb5f92efa0211bb805157e7ae66478b.png)
Видим - запустили контейнер с java (об этом нам говорит надпись jshell- java оболочка). Ну хорошо, поигрались с java, а как вернуться обратно, команды docker то уже не работают. И что делать ?
![](https://habrastorage.org/getpro/habr/upload_files/eaa/4ce/a29/eaa4cea2940c48db218a4b09b4be6c12.png)
![](https://habrastorage.org/getpro/habr/upload_files/20b/228/612/20b2286125b8977e512c2a7a0f684569.png)
Спокойствие, только спокойствие. Нажимаем магическую комбинацию Ctrl + D:
![](https://habrastorage.org/getpro/habr/upload_files/5be/17b/275/5be17b275c101134cedb67a3a63f4217.png)
и о чудо, можно выдохнуть)
А что еще можно запустить?
Давайте , на последок, посмотрим еще возможности docker и запустим Ubuntu.
Схема запуска не сложнее, чем мы занимались выше, все действия аналогичные:
Аналогично шагам выше , зайдем на сайт и найдем Ubuntu, после воспользуемся командой в описании на сайте
Далее запустим в интерактивном режиме:
docker run –it –name имя_контейнера имя_образа
![](https://habrastorage.org/getpro/habr/upload_files/5d6/9b2/d16/5d69b2d16cf3f49d753a474d728239f7.png)
как-то так )
Итоги
Тут я собрал некоторые полезные команды docker и их описание на русском. Может кому пригодится).
Это был краткий обзор на технологию Docker, разумеется он не претендует на полноценный гайд: не было рассказано про Dockerfile или Docker compose или про запуск контейнеров в IDE, про создание собственных образов; НО цель данной статьи - помочь ознакомиться с базой а не рассказать про все и вся). В будущем поговорим про незатронутые тут моменты в Docker. Надеюсь моя статья была для Вас полезной!