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

Что за зверь такой?

Думаю, сегодня уже все слышали про docker, но все же:
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 (как устанавливать смотреть выше!)

  • При помощи cmd

  • Через IDE

Первый запуск

Запускаем наш Docker Desktop и открываем командную строку. После запуска приложения, у Вас должна отображаться следующая иконка (в скрытых значках):

в командной сроке пишем следующую команду:

docker

и если все верно сделано, то у Вас отобразиться список всех доступных команд и их описание:

cmd
cmd
Если командная строка говорит, что не знает такой команды как "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

Тут наглядно показан принцип работы технологии 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)


  1. elusiveavenger
    26.04.2022 14:38
    +7

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


  1. Hrodvitnir
    26.04.2022 14:58
    +8

    2022 год, мы учимся устанавливать докер и скачивать образы на Хабре


    1. ohno1052
      26.04.2022 17:01
      +3

      Для 95% это какая-то непонятная магия, а хабр достаточно популярен, такие вводные статьи нужны всегда. Я сам несколько лет назад был в числе этих 95% и испытывал острую нехватку материалов по айти step-by-step. Проблема в другом, автор явно не понимает что и зачем он пишет, в итоге, как уже написали выше, это скорее вредно, чем полезно.


      1. sshikov
        26.04.2022 19:35
        +1

        >такие вводные статьи нужны всегда
        А вы серьезно думаете, что их тут нет? Докер между прочим вышел 9 лет назад, и его тут пропагандировали уже много лет — и даже уже были аргументированные посты о том, что возможно его больше не стоит использовать (т.е. он уже устарел).

        Ну т.е. очень вероятно, что автор опоздал на пару лет.

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


    1. lowkeypriority
      27.04.2022 09:23

      При том, что установка на Windows :)


    1. deadnikifor
      27.04.2022 11:00

      и нажимать Ctrl+D))


  1. vladvul
    26.04.2022 15:08
    -2

    вместо войти вайти теперь мобилизация?


  1. dendron
    26.04.2022 16:05

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

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


  1. scruff
    26.04.2022 19:49
    -4

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


    1. manyakRus
      27.04.2022 12:33

      хорошая статья :-)

      В ютубе лучше конечно, но на работе нельзя смотреть видосики

      Никто из программистов 1С и обычных сисадминов не (с)могут понять зачем оно нужно и как им пользоваться. Надо целый час объяснять человеку что это и зачем и всё равно в итоге он скажет что оно нафиг не нужно (ему)


      1. scruff
        28.04.2022 05:55

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


  1. paulstrong
    28.04.2022 02:31

    лайфхак, как заработать себе отрицательную карму