Докер программа что это

Содержание

Руководство по Docker для аналитика даннных.

DOCKER — ПЛАТФОРМА С ОТКРЫТЫМ ИСХОДНЫМ КОДОМ ДЛЯ СОЗДАНИЯ, РАЗВЕРТЫВАНИЯ И УПРАВЛЕНИЯ КОНТЕЙНЕРИЗИРОВАННЫМИ ПРИЛОЖЕНИЯМИ.

Представьте, как вы устанавливаете программное обеспечение, требующее установку всех его зависимостей. Придется столкнуться со множеством ошибок, вручную выяснить и устранить все их причины. Каждый раз — попытки запустить всю систему заново, чтобы наконец-то правильно завершить установку… Именно в этот момент на помощь приходит Docker, пытаясь серьезно облегчить жизнь.

Содержание:

  1. Образы и контейнеры.
  2. Запуск первой программы в Docker.
  3. Основные команды контейнеров Docker.
  4. Командная строка Docker-контейнера.
  5. Пользовательские образы Docker.
  6. Запуск веб-приложения в Docker.
  7. Docker и сопоставление портов.
  8. Выводы.

1. Образы и контейнеры

Самые важные концепции Docker!

Образ — это файл, хранящий всю конфигурацию запуска программы в контейнере Docker. Посмотреть на список образов, созданных в системе, можно при помощи следующей команды:

DOCKER — Что такое Docker, зачем он нужен, как я использую его в работе, все основы в одном уроке!


docker images

  • Что такое “контейнер”?

Контейнер — это экземпляр образа. Docker-контейнер действует как виртуальная машина, но у него нет отдельной операционной системы. Каждый контейнер устанавливает приложения или программное обеспечение, следуя инструкциям, записанным в файлах образа.

Количество контейнеров не ограничено, все они работают на общей инфраструктуре хоста и общей операционной системе. Посмотреть на список контейнеров можно с помощью команды:

docker ps -a

2. Запуск первой программы в Docker

Первым делом нужно вывести на экран фразу “Hello, world!”.

В Docker каждому контейнеру нужен образ, поэтому, чтобы запустить hello-world , введите в консоль или терминал команду:

docker run hello-world

Попытка создания и запуска контейнера. Согласно документации API-клиента Docker, в установленном порядке выполняются следующие действия.

  1. Консоль: выполняет команду docker run hello-world .
  2. Docker client (CLI): получает команду и выполняет действия на ее основе.
  3. Сервер Docker: связывается с CLI, чтобы выдать клиенту из кэша образов (Image Cache) нужный образ с названием hello-world . Если такого образа нет, то сервер Docker связывается с хабом Docker, где скачивает образ с указанным именем.
  4. Docker Hub: хаб Docker получает запрос от сервера Docker на загрузку конкретного файла образа из общедоступного хранилища.
  5. Сервер Docker: снова ищет образ в разделе “Image Cache”, затем создает контейнер — экземпляр образа hello-world .
  6. Контейнер Docker: согласно первоначальным установкам из образа, в контейнере запускается простая программа hello-world .
  7. Консоль: в результате успешного выполнения всех вышеизложенных этапов отобразит информацию со скриншота.

Зачем нужен и как работает Docker — ликбез

3. Основные команды контейнеров Docker

Прочитайте перечень команд управления поведением контейнеров без изменения образов.

  • Удалить все неактивные контейнеры Docker:

docker system prune

  • Вывести на экран stderr и stdout от запущенных в контейнере программ, логирование контейнера Docker:

docker logs

  • Индекс активных контейнеров:

docker ps

  • Индекс всех контейнеров, включая неактивные:

docker ps -a

  • Индекс образов, установленных в системе на данный момент:

docker images

  • Деактивировать Docker-контейнер по идентификатору:

docker stop

  • Удалить неактивный контейнер по идентификатору:

docker rm

  • Удалить конкретный образ по его названию:

docker rmi

4. Командная строка Docker-контейнера

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

  • Как выполнить команду внутри контейнера Docker?

docker exec -it

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

  • Как получить доступ к командной строке контейнера Docker?

Иногда удобно напрямую взаимодействовать с командной строкой контейнера. Для поиска ошибок и отладки, или вы можете запустить там все команды Linux одновременно. Убедитесь, что нужный контейнер запущен, а потом введите следующую команду:

docker exec -it sh

sh выдаст разрешение на ввод подсказок (prompt), и вы сможете выполнять внутри контейнера различные задачи, например:

  • Как разрешить ввод при запуске контейнера из образа Docker?

Допустим, что вы хотите сразу после скачивания из хаба Docker запустить образ под названием busybox . Что вы сделаете?

docker run busybox

Теперь, чтобы ответить на вышеуказанный вопрос, выполните следующую команду:

docker run -it busybox sh

Теперь все знания о полезных командах из двух пунктов руководства помогут вам подготовиться к следующему шагу.

5. Пользовательские образы Docker

Как добавить файлы в контейнер и какую операционную систему выбрать для образа?

Основной файл, хранящий все инструкции. Каждый dockerfile одинаково структурирован. Чтобы создать dockerfile для пользовательского образа необходимо указать:

  1. Базовый образ.
  2. Все зависимости и условия запуска программы.
  3. Команду для запуска программы при старте контейнера.
  • Docker Client

После создания dockerfile вы сразу попытаетесь собрать образ. Следовательно, Dockerfile отправляется клиенту Docker.

Далее клиент Docker передает все инструкции серверу Docker, который, в свою очередь, выполняет всю грязную работу, а именно все команды внутри dockerfile , и создает образ. Затем образ запускается, в результате чего создается контейнер, экземпляр образа.

  • Как же создать образ Docker?
  1. Сначала напишите dockerfile .
  2. Затем выполните команду docker build .
  3. Теперь запустите образ командой docker run .

Рассмотрим простой dockerfile , в котором установлен сервер базы данных Redis :

Теперь, глядя на Dockerfile, у вас наверняка возникли вопросы! Ответим на них сейчас:

  • Что такое базовый образ?

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

Alpine Linux — это как Windows и macOS, где можно установить почти все, что вам нужно. Alpine занимает мало памяти, что хорошо подходит для установки Redis. Базовый образ загружается через инструкцию FROM .

  • Как установить зависимости?

Посмотрите, в dockerfile написана инструкция ‘RUN’, которая выполняет команды внутри контейнера. APK означает менеджер пакетов Alpine Linux . Команды apk применяются в любой работающей системе на базе Alpine Linux для удаления, установки, обновления программного обеспечения.

  • Как указать команду для запуска приложения в контейнере?

Инструкцией CMD задается команда по умолчанию, которая будет выполняться только при запуске контейнера без указания команды. Приведенный выше пример запустит сервер Redis.

Теперь поговорим детальнее о команде docker build . Что происходит перед тем, как результат ее выполнения появляется на экране?

  1. Загружается контейнер с образом alpine .
  2. Файловая система из образа alpine переносится во временный контейнер, в нем и выполняются инструкции по установке базы данных Redis. После завершения установки временный контейнер удаляется, а файловая система переносится обратно в образ alpine , тем самым обновляя его. Теперь в новом образе установлен Redis.
  3. По аналогии создается еще один временный контейнер для установки команды запуска сервера Redis при каждом запуске образа в контейнере. Следом временный контейнер удаляется, а обновленная файловая система устанавливается в конечном пользовательском образе.
  4. Наконец, для запуска контейнера по шаблону пользовательского образа выполняется команда docker run .
Читайте также:
Vpn master pro что это за программа

Примечание: если вы обновите dockerfile образа и попытаетесь пересобрать его, то Docker получит кэш из предыдущего образа, чтобы пропустить тот же процесс. Он обновит только вновь добавленный раздел в Dockerfile. Порядок в Dockerfile также важен. Если вы измените порядок команд, то кэш обнулится!

  • Как установить специфическое имя для образа?

6. Запуск веб-приложения в Docker

В этом разделе создадим и докеризируем простое приложение на Node.js на основе пользовательского образа. Не беспокойтесь, вам не нужны знания о Node.js для выполнения пунктов руководства.

  • Шаг 1
    Напишите файл package.json , ведь Express.js — это бэкенд-фреймворк для веб-приложений на Node.js. Укажите в нем последнюю версию при помощи символа звездочки * , а затем укажите запуск по умолчанию для команды node index.js , где index.js — это основной веб-файл.

  • Шаг 2
    Напишите простой файл index.json . Планируется, что фреймворк Express.js через / получает запросы и отправляет обратно ответ. Чтобы получить запрос и ответ, необходимо установить порт для прослушивания.

  • Шаг 3
    Напишите dockerfile . Помните все ключевые шаги? Если забыли, то поднимитесь вверх по разделам и освежите знания. Тем не менее совершенно очевидно, что для запуска приложения понадобятся установленные, готовые к работе Node.js и NPM.

  • Шаг 4
    Постройте пользовательский образ, присвойте ему теги.

  • Шаг 5
    Запустите контейнер с приложением, запомните прослушиваемый порт.

  • Шаг 5
    Проверьте, можно ли получить доступ к приложению из браузера, действительно ли оно работает?
    О, нет! Что-то пошло не так? Пришло время выяснить.

Возможно, у вас сейчас на уме один вопрос: зачем в dockerfile написана команда WORKDIR /usr/app ?

Основная цель — разделение рабочих файлов, чтобы строго необходимые для работы приложения файлы не смешивались с другими директориями, а легко отделялись от остальных при необходимости, если возникнут проблемы. Следовательно, внутри контейнера файлы веб-приложения сохраняются в каталоге /usr/app .

7. Docker и сопоставление портов

Рассмотрим, как разобраться в настройках и правильно установить сопоставление портов!

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

Сопоставление портов позволит запросу на порт 8080 с локальной машины перенаправить запрос на порт 8080 Docker-контейнера, только для входящих запросов.

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

  • В команде запуска контейнера первый порт — это порт хост-машины или локальной машины, а второй порт — это порт контейнера:

docker run -p 8080:8080 mahedi/simpleweb

Выводы

Веб-приложение запущено и доступно при обращении к порту 8080 локальной машины.

Несмотря на успех, стоит упомянуть три распространенные ошибки, допускаемые в процессе работы с Docker Server и Docker Client.

  1. Неправильный выбор базового образа.
  2. Отсутствие в dockerfile команд ADD или COPY для переноса файлов хост-машины в контейнер.
  3. Неправильное сопоставление портов при создании контейнера.

Далее прилагаются скриншоты правильно запущенного в Docker веб-приложения Node.js, чтобы вы могли с ними свериться.

Самостоятельно ознакомьтесь с файлом dockerfile для построения пользовательского образа и запуска веб-приложения на Node.js.

Проанализируйте изображенный на скриншоте файл index.js с простым примером веб-приложения на Node.js. Данный файл запускается внутри контейнера Docker при помощи соответствующей команды из dockerfile .

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

Источник: uproger.com

Что такое «Докер» и зачем он нужен

Это как полуфабрикаты из супермаркета, только с программами.

Допустим, мы хотим запустить интернет-магазин на готовой системе управления, а если торговля пойдёт — запустить ещё несколько подобных магазинов. В магазине нам нужен движок, интерпретатор PHP, система работы с БД PHPMyAdmin и FTP-сервер для работы с файлами.

Можно настроить все эти сервисы вручную:

  1. Установить PHP и настроить его для наших задач.
  2. Установить MySQL и PHPMyAdmin.
  3. Установить движок магазина.
  4. Связать движок с базой, чтобы в ней хранились все записи о товарах.
  5. Установить тему для движка, чтобы магазин симпатично выглядел.
  6. Дописать скрипт, который подключит онлайн-кассу к нашему магазину.
  7. Установить и настроить FTP-сервер для доступа к файлам.

Что такое «Докер» и зачем он нужен

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

Ручная установка всего на сервер — это как приготовить пиццу дома полностью самому: замесить тесто, купить и нарезать овощи и колбасу и так далее. В результате мы получим вкусное блюдо, но потратим на приготовление много времени.

Docker – автоматизация рутинной работы

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

По такой технологии работает Docker — программа, которая позволяет запускать подобные скрипты и собирать разный софт в одно целое. Принцип действия Докера такой:

  1. Есть набор различных программ, которые нужно установить, настроить и запустить.
  2. Для этого набора программ пишется скрипт, в котором написано, какую программу в какой последовательности нужно ставить и как настраивать. Задача Докера — выполнить эти инструкции и запустить программы как нужно.
  3. Для каждой программы Докер создаёт виртуальную машину, в которой работает эта программа. Если в скрипте будет 5 программ, Докер сделает 5 виртуальных машин и объединит их в одну виртуальную сеть.
  4. Эта виртуальная сеть со стороны выглядит как единое целое и называется докер-контейнером.

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

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

Пример скрипта

Вот пример из реальной жизни: для тестирования новых тем вордпресса его нужно много раз ставить, скачивать и устанавливать тему, а затем смотреть, что нужно поправить или добавить. Чтобы не делать всё с нуля, программист пишет скрипт — docker-compose.yml, в котором уже всё предусмотрено:

Что такое «Докер» и зачем он нужен

В этом скрипте написано, что у нас в контейнере используются два докер-файла: wordpress и mysql. Строка image отвечает за то, откуда докер возьмёт образы докер-файлов для установки. Их можно брать откуда угодно — с локальной машины, официального репозитория или из любого другого места в интернете. Как только докер доходит до такой строчки, он делает так:

  1. Находит нужный докер-файл.
  2. Смотрит, какая операционная система в нём прописана.
  3. Запускает внутри себя виртуальный образ этой системы.
  4. Устанавливает в эту виртуальную систему нужный софт, который прописан в докер-файле.
  5. Смотрит, что написано дальше в скрипте, и меняет настройки виртуальной системы или софта внутри неё.

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

Читайте также:
Программ менеджер что за программа

Чтобы получить доступ к вордпрессу, в скрипте есть такая строчка: ports: — 8888:80. Она означает, что все запросы на локальный порт 80 будут перенаправлены в эту виртуальную сеть в наш вордпресс. Если мы в адресной строке браузера введём http://localhost:80, то сразу увидим интерфейс установки вордпресса.

На картинке это можно представить так:

Что такое «Докер» и зачем он нужен

В примере с нашей замороженной пиццей докер-файлы — это начинка: колбаса, ананасы, сыр, томатная паста и специи. Каждый такой докер-файл готовится для пиццы отдельно и не зависит от других. А докер-скрипт — это рецепт приготовления всей пиццы из этих компонентов. Он отвечает за то, чтобы все продукты были в нужном количестве и в нужном месте.

Что такое докер-файл

Докер-файл — это тоже скрипт, но немного с другой задачей. Задача докер-файла такая:

  1. Сказать, какая операционная система будет виртуально запускаться при запуске.
  2. Установить и настроить какую-то программу в этой операционной системе.

Например, один докер-файл может отвечать за вордпресс, и тогда в нём будут прописаны все команды для простой установки движка. Другой докер-файл может отвечать за работу базы данных MySQL, и тогда в нём будет написано как её установить и какие ресурсы выделить.

Что такое «Докер» и зачем он нужен

Докер-файл говорит, какую выбрать операционную систему и как в ней установить нужный софт. Скрипт docker-compose.yml говорит, как между собой подружить несколько докер-файлов, чтобы они работали как единое целое.

Что такое «Докер» и зачем он нужен

Как запускать

Если у нас есть скрипт и нужные докер-файлы, то тогда запустить вордпресс на сервере — это задача на три минуты (команды для линукса):

  1. Установить докер на сервере: sudo apt install -y docker-ce .
  2. Закачать туда нужные скрипты и файлы.
  3. Запустить скрипт docker-compose.yml: docker compose up -d .

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

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

А для чего всё это?

Экономия времени при разработке — не главное, хотя Докер действительно сильно упрощает жизнь программистам.

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

Источник: thecode.media

Что такое докер?

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

В своем ядре docker позволяет запускать практически любое приложение, безопасно изолированное в контейнере. Безопасная изоляция позволяет вам запускать на одном хосте много контейнеров одновременно. Легковесная природа контейнера, который запускается без дополнительной нагрузки гипервизора, позволяет вам добиваться больше от вашего железа.

Платформа и средства контейнерной виртуализации могут быть полезны в следующих случаях:

  • упаковывание вашего приложения (и так же используемых компонент) в docker контейнеры;
  • раздача и доставка этих контейнеров вашим командам для разработки и тестирования;
  • выкладывания этих контейнеров на ваши продакшены, как в дата центры так и в облака.

Для чего я могу использовать docker?

Быстрое выкладывание ваших приложений

Docker прекрасно подходит для организации цикла разработки. Docker позволяет разработчикам использовать локальные контейнеры с приложениями и сервисами. Что в последствии позволяет интегрироваться с процессом постоянной интеграции и выкладывания (continuous integration and deployment workflow).

Например, ваши разработчики пишут код локально и делятся своим стеком разработки (набором docker образов) с коллегами. Когда они готовы, отравляют код и контейнеры на тестовую площадку и запускают любые необходимые тесты. С тестовой площадки они могут оправить код и образы на продакшен.

Более простое выкладывание и разворачивание

Основанная на контейнерах docker платформа позволят легко портировать вашу полезную нагрузку. Docker контейнеры могут работать на вашей локальной машине, как реальной так и на виртуальной машине в дата центре, так и в облаке.

Портируемость и легковесная природа docker позволяет легко динамически управлять вашей нагрузкой. Вы можете использовать docker, чтобы развернуть или погасить ваше приложение или сервисы. Скорость docker позволяет делать это почти в режиме реального времени.

Высокие нагрузки и больше полезных нагрузок

Docker легковесен и быстр. Он предоставляет устойчивую, рентабельную альтернативу виртуальным машинам на основе гипервизора. Он особенно полезен в условиях высоких нагрузок, например, при создания собственного облака или платформа-как-сервис (platform-as-service). Но он так же полезен для маленьких и средних приложений, когда вам хочется получать больше из имеющихся ресурсов.

Главные компоненты Docker

Docker состоит из двух главных компонент:

  • Docker: платформа виртуализации с открытым кодом;
  • Docker Hub: наша платформа-как-сервис для распространения и управления docker контейнерами.

Примечание! Docker распространяется по Apache 2.0 лицензии.

Архитектура Docker

Docker использует архитектуру клиент-сервер. Docker клиент общается с демоном Docker, который берет на себя тяжесть создания, запуска, распределения ваших контейнеров. Оба, клиент и сервер могут работать на одной системе, вы можете подключить клиент к удаленному демону docker. Клиент и сервер общаются через сокет или через RESTful API.

Docker-демон

Как показано на диаграмме, демон за пускается на хост-машине. Пользователь не взаимодействует с сервером на прямую, а использует для этого клиент.

Docker-клиент

Docker-клиент, программа docker — главный интерфейс к Docker. Она получает команды от пользователя и взаимодействует с docker-демоном.

Внутри docker-а

Чтобы понимать, из чего состоит docker, вам нужно знать о трех компонентах:

  • образы (images)
  • реестр (registries)
  • контейнеры

Образы

Docker-образ — это read-only шаблон. Например, образ может содержать операционку Ubuntu c Apache и приложением на ней. Образы используются для создания контейнеров. Docker позволяет легко создавать новые образы, обновлять существующие, или вы можете скачать образы созданные другими людьми. Образы — это компонента сборки docker-а.

Реестр

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

Реестры — это компонента распространения.

Контейнеры

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

Контейнеры — это компонента работы.

Так как же работает Docker?

Пока мы знаем, что:

  • можем создавать образы, в которых находятся наши приложения;
  • можем создавать контейнеры из образов, для запуска приложений;
  • можем распространять образы через Docker Hub или другой реестр образов.

Давайте посмотрим, как эти компоненты сочетаются.

Как работает образ?

Мы уже знаем, что образ — это read-only шаблон, из которого создается контейнер. Каждый образ состоит из набора уровней. Docker использует union file system для сочетания этих уровней в один образ. Union file system позволяет файлам и директориями из разных файловых систем (разным ветвям) прозрачно накладываться, создавая когерентную файловую систему.

Одна из причин, по которой docker легковесен — это использование таких уровней. Когда вы изменяете образ, например, обновляете приложение, создается новый уровень. Так, без замены всего образа или его пересборки, как вам возможно придётся сделать с виртуальной машиной, только уровень добавляется или обновляется. И вам не нужно раздавать весь новый образ, раздается только обновление, что позволяет распространять образы проще и быстрее.

Читайте также:
Программа мрт что это

В основе каждого образа находится базовый образ. Например, ubuntu, базовый образ Ubuntu, или fedora, базовый образ дистрибутива Fedora. Так же вы можете использовать образы как базу для создания новых образов. Например, если у вас есть образ apache, вы можете использовать его как базовый образ для ваших веб-приложений.

Примечание! Docker обычно берет образы из реестра Docker Hub.

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

  • запуск команды
  • добавление файла или директории
  • создание переменной окружения
  • указания что запускать когда запускается контейнер этого образа

Эти инструкции хранятся в файле Dockerfile . Docker считывает это Dockerfile , когда вы собираете образ, выполняет эти инструкции, и возвращает конечный образ.

Как работает docker реестр?

Реестр — это хранилище docker образов. После создания образа вы можете опубликовать его на публичном реестре Docker Hub или на вашем личном реестре.

С помощью docker клиента вы можете искать уже опубликованные образы и скачивать их на вашу машину с docker для создания контейнеров.

Docker Hub предоставляет публичные и приватные хранилища образов. Поиск и скачивание образов из публичных хранилищ доступно для всех. Содержимое приватных хранилищ не попадает в результат поиска. И только вы и ваши пользователи могут получать эти образы и создавать из них контейнеры.

Как работает контейнер?

Контейнер состоит из операционной системы, пользовательских файлов и метаданных. Как мы знаем, каждый контейнер создается из образа. Этот образ говорит docker-у, что находится в контейнере, какой процесс запустить, когда запускается контейнер и другие конфигурационные данные. Docker образ доступен только для чтения. Когда docker запускает контейнер, он создает уровень для чтения/записи сверху образа (используя union file system, как было указано раньше), в котором может быть запущено приложение.

Что происходит, когда запускается контейнер?

Или с помощью программы docker , или с помощью RESTful API, docker клиент говорит docker демону запустить контейнер.

Давайте разберемся с этой командой. Клиент запускается с помощью команды docker , с опцией run , которая говорит, что будет запущен новый контейнер. Минимальными требованиями для запуска контейнера являются следующие атрибуты:

  • какой образ использовать для создания контейнера. В нашем случае ubuntu
  • команду которую вы хотите запустить когда контейнер будет запущен. В нашем случае /bin/bash

Что же происходит под капотом, когда мы запускаем эту команду?

Docker, по порядку, делает следующее:

  • скачивает образ ubuntu: docker проверяет наличие образа ubuntu на локальной машине, и если его нет — то скачивает его с Docker Hub. Если же образ есть, то использует его для создания контейнера;
  • создает контейнер: когда образ получен, docker использует его для создания контейнера;
  • инициализирует файловую систему и монтирует read-only уровень: контейнер создан в файловой системе и read-only уровень добавлен образ;
  • инициализирует сеть/мост: создает сетевой интерфейс, который позволяет docker-у общаться хост машиной;
  • Установка IP адреса: находит и задает адрес;
  • Запускает указанный процесс: запускает ваше приложение;
  • Обрабатывает и выдает вывод вашего приложения: подключается и логирует стандартный вход, вывод и поток ошибок вашего приложения, что бы вы могли отслеживать как работает ваше приложение.

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

Используемые технологии

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

Пространство имен(namespaces)

Docker использует технологию namespaces для организации изолированных рабочих пространств, которые мы называем контейнерами. Когда мы запускаем контейнер, docker создает набор пространств имен для данного контейнера.

Это создает изолированный уровень, каждый аспект контейнера запущен в своем простанстве имен, и не имеет доступ к внешней системе.

Список некоторых пространств имен, которые использует docker:

  • pid: для изоляции процесса;
  • net: для управления сетевыми интерфейсами;
  • ipc: для управления IPC ресурсами. (ICP: InterProccess Communication);
  • mnt: для управления точками монтирования;
  • utc: для изолирования ядра и контроля генерации версий(UTC: Unix timesharing system).

Control groups (контрольные группы)

Docker также использует технологию cgroups или контрольные группы. Ключ к работе приложения в изоляции, предоставление приложению только тех ресурсов, которые вы хотите предоставить. Это гарантирует, что контейнеры будут хорошими соседями. Контрольные группы позволяют разделять доступные ресурсы железа и если необходимо, устанавливать пределы и ограничения. Например, ограничить возможное количество памяти контейнеру.

Union File System

Union File Sysem или UnionFS — это файловая система, которая работает создавая уровни, делая ее очень легковесной и быстрой. Docker использует UnionFS для создания блоков, из которых строится контейнер. Docker может использовать несколько вариантов UnionFS включая: AUFS, btrfs, vfs и DeviceMapper.

Форматы контейнеров

Docker сочетает эти компоненты в обертку, которую мы называем форматом контейнера. Формат, используемый по умолчанию, называется libcontainer . Так же docker поддерживает традиционный формат контейнеров в Linux c помощью LXC. В будущем Docker возможно будет поддерживать другие форматы контейнеров. Например, интегрируясь с BSD Jails или Solaris Zones.

Источник: medium.com

Что такое Docker и зачем он нужен?

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

Docker — это простая программа, которую вы можете установить в свою операционную систему. Эту программу можно установить на все популярные операционные системы Windows, Mac, Linux.

Официальный сайт Docker:

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

Все это будет работать независимо от той операционной системы, где мы это будет устанавливать.

Контейнеры Docker

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

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

Каждый из этих элементов может как присутствовать в окружении, так и отсутствовать. Все будет зависеть от того, как мы его соберем.

Docker можно представить в виде программы программ. Программа, которая объединяет в себе другие программы.

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

Docker позволяет нам не заниматься какими-то сложными системными настройками. Все, что нужно сделать, в специальных текстовых файлах описать, что нужно поставить.

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

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

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

На нем можно найти различные программы, которые мы можем устанавливать с помощью Docker.

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

Вот такой интересный и полезный инструмент, который может значительно упростить вам вашу работу.

Источник: webkyrs.info

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru