Что такое докер контейнер для чайников

Основы Docker за Х часов и Y дней

0. Вступление

Цель данной статьи собрать в небольшую кучку основную информацию, минимально достаточную для того, чтобы начать работать с докер на ежедневной основе и удалить с рабочей машины локально установленные apache, mysql, virtualenv, python3, mongodb, memchaced, redis, php5, php7 и весь остальной зоопарк, который мы используем при разработке, и который зачастую еще и конфликтует между собой от версии к версии.

А еще я в автобусе и ближайшие 7 часов мне все равно делать будет нечего. Ну и вдобавок я наконец-то соберу в одном месте ссылки и команды, за которыми мне самому периодически приходится лезть в документацию, например — как на маке добавить IP алиас к локалхосту: sudo ifconfig lo0 alias 10.200.10.1/24 (зачем это надо будет сказано позже)

Статья называется так, как называется, потому что я не смог более-менее точно подсчитать сколько нужно времени на поставленную задачу. У меня на это ушло примерно 6 часов в течение 3 дней. Во многом, потому что в тот момент я работал фулл тайм в офисе и осваивал докер, так сказать, без отрыва от производства.

У вас может уйти меньше дней или больше часов, зависит от того, как интенсивно вы будете вникать.

Но мое личное мнение – лучше все же не пытаться “ворваться” за один день. Просто потому что если Вы никогда не имели с этим дело, то в конце первого дня у вас будет где-то вот такая голова

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

И лучше в этот момент остановиться, переварить информацию, может даже поспать.

1. Теория

Если Вы ранее имели дело с виртуальными машинами и такими инструментами как virtualbox, vmware, vagrant и подобными штуками – лучше забудьте о них.
Лично моей ошибкой была попытка работать с докер как с виртуальной машиной. Докер – средство виртуализации процессов, а не систем. Важное правило – каждому процессу свой виртуальный контейнер.

Контейнер следует воспринимать как отдельный процесс и наоборот. Например не следует пихать в один контейнер mysql и redis. Или еще хуже всю связку apache+php+mysql.

Основные термины

Image (образ) – собранная подсистема, необходимая для работы процесса, сохраненная в образе.
Container (контейнер) – процесс, инициализированный на базе образа. То есть контейнер существует только когда запущен. Это как экземпляр класса, а образ это типа класс. Ну я думаю идея понятна.
Host (хост) – среда, в которой запускается докер. Проще говоря – ваша локальная машина.
Volume – это дисковое пространство между хостом и контейнером. Проще – это папка на вашей локальной машине примонтированная внутрь контейнера. Меняете тут меняется там, и наоборот, миракл.
Dockerfile – файл с набором инструкций для создания образа будущего контейнера
Service (сервис) – по сути это запущенный образ (один или несколько контейнеров), дополнительно сконфигурированный такими опциями как открытие портов, маппинг папок (volume) и прочее. Обычно это делается при помощи docker-compose.yml файла.
Docker-compose (докер-композ, чаще композер, но не путать с php composer) – тулза, облегчающая сборку и запуск системы состоящей из нескольких контейнеров, связанных между собой.
Build (билд, билдить) – процесс создания образа из набора инструкций в докерфайле, или нескольких докерфайлов, если билд делается с помощью композера
В данной статье позже (завтра) я опишу процесс сборки связки nginx+mysql+php7-fpm с примерами и описаниями dockerfile и docker-compose файлов.

Вкратце о том, как работает билдинг образов

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

Обычно докерфайл начинается с инструкции FROM, которая указывает с какого пакета/образа из хаба начать.

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

Затем наиболее часто встречающиеся команды:
RUN – выполняет команду внутри образа.
ADD – берет файлы с хоста и кладет внутрь образа.
А также COPY, EXPOSE, ENTRYPOINT, CMD — обо всем этом Вы узнаете в процессе.

Сейчас внимание. Докер выполняет инструкции из докерфайла последовательно поверх предыдущего результата. Таким образом организовано хранение кеша.
Не поняли? Сейчас покажу. Вот простейший докерфайл:

Как докер его билдит:

ID я тут написал условные, но важно помнить, что идентификаторы этих “промежуточных” образов напрямую связаны с самими инструкциями, с файлами которые добавляются инструкцией ADD и с ID родительского образа. То есть фактически перед выполнением каждого шага сначала вычисляется ID (хеш) образа, поиск такого ID в локальном кеше, и только если такого ID в кеше нет, тогда выполняется шаг и сохраняется в кеш, иначе – используется образ из кеша.

А также это значит, что если вы решите поменять команду например run apt-get install nginx на другую, то Хеш(ID) инструкции изменится и весь дальнейший кеш после этого использоваться не будет. Потому не удивляйтесь если после изменения одной буквы в имени maintainer’а у вас вся сборка будет пересобираться от самого начала.

Также исходя из описанного сценария выполнения команд становится понятно, почему не имеет смысла в инструкциях выполнять команды ничего не сохраняющие после своего выполнения – частый вопрос на stackoverflow — “я запустил что-то, а в следующей инструкции оно не запущено”. Например кто-то хочет активировать source env/bin/activate и в следующей инструкции выполнить pip install

или другой пример – запустить монгодб и в следующей инструкции создать юзера/базу или выполнить импорт базы из файла (есть причины почему лучше так не делать, но сейчас не об этом)

RUN source /app/env/bin/activate \
&& pip install something

Думаю для начала работы этой теории вполне достаточно.

2. Практика

Перед началом думаю следует пойти немного передохнуть и сделать себе чайку.
А когда вернетесь, сначала установите себе Docker и Docker Compose.

Небольшое отступление для тех, кто читает это под виндой.

Итак, на данном этапе у вас уже установлен докер, и в панели задач радостно побулькивает блоками #синийкит (извините, не удержался). Теперь сходите вот по этой ссылке и пройдите туториал Get Started.

Теперь давайте представим, что мы разрабатываем веб сайт на php и будем его публиковать связкой nginx+php7-fpm+mysql.

Вот очень примитивный dockerfile для php сервиса:

EXPOSE 9000
CMD [«php-fpm»]

Вкратце человеческим языком:

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

Директива volumes монтирует папки из хостмашины внурть контейнера, таким образом осуществляется конфигурирование nginx и сохранение данных бд при перезапуске.
Директива links связывает сервисы между собой, app связан с db, это значит что после запуска внутри контейнера app будет доступен хост “db”, и он будет указывать на соответствующий контейнер.

Есть довольно интересный темплейт yii2-starter-kit, в коробке которого можно найти неплохую реализацию описанной сборки php7-fpm nginx mysql а также mailcatcher.

Тем кому, как и мне, больше по душе python и django можно вообще не париться и все сделать по официальному туториалу от Docker — docs.docker.com/compose/django
плюс, после того как уже пришло понимание как это все работает, не составит особого труда переработать любую понравившуюся сборку под свои нужды.

Pitfalls

— MacOS. Доступ к сервису на хосте (к примеру mongo или mysql) из контейнера.
Из-за ограничений “Docker for Mac networking stack” нельзя “просто так взять и подключиться” к локалхост. Но есть два обходных пути:

а) официальный и простой (доступен в версии Docker начиная с 17.06) — использовать для подключения специальный DNS хост (доступно только в Docker for Mac) docker.for.mac.localhost. Источник.

б) добавить алиас IP к сетевому устройству lo0:
`sudo ifconfig lo0 alias 10.200.10.1/24`
и использовать этот адрес для подключения

— MongoDB. На маке нельзя монтировать внешний диск для данных. Причины описаны здесь
WARNING (Windows & OS X): The default Docker setup on Windows and OS X uses a VirtualBox VM to host the Docker daemon. Unfortunately, the mechanism VirtualBox uses to share folders between the host system and the Docker container is not compatible with the memory mapped files used by MongoDB

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

— Отличия entrypoint и command — вот тут подробно и понятно описана разница между entrypoint и command.

UPD дополнение от saskasa: На маке скорость записи из контейнера на диск хоста (добавленный как VOLUME) очень медленная, для понимания масштабов — примерно в 50-100 раз.

Источник

Образы и контейнеры Docker в картинках

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Перевод поста Visualizing Docker Containers and Images, от новичка к новичкам, автор на простых примерах объясняет базовые сущности и процессы в использовании docker.

Если вы не знаете, что такое Docker или не понимаете, как он соотносится с виртуальными машинами или с инструментами configuration management, то этот пост может показаться немного сложным.

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

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

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

Хорошим примером является Git. Я не мог понять Git, пока не понял его базовую модель, включая trees, blobs, commits, tags, tree-ish и прочее. Я думаю, что люди, не понимающие внутренности Git, не могут мастерски использовать этот инструмент.

Определение образа (Image)

Визуализация образа представлена ниже в двух видах. Образ можно определить как «сущность» или «общий вид» (union view) стека слоев только для чтения.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Слева мы видим стек слоев для чтения. Они показаны только для понимания внутреннего устройства, они доступны вне запущенного контейнера на хост-системе. Важно то, что они доступны только для чтения (иммутабельны), а все изменения происходят в верхнем слое стека. Каждый слой может иметь одного родителя, родитель тоже имеет родителя и т.д. Слой верхнего уровня может быть использован как UnionFS (AUFS в моем случае с docker) и представлен в виде единой read-only файловой системы, в которой отражены все слои. Мы видим эту «сущность» образа на рисунке справа.

Если вы захотите посмотреть на эти слои в первозданном виде, вы можете найти их в файловой системе на хост-машине. Они не видны напрямую из запущенного контейнера. На моей хост-машине я могу найти образы в /var/lib/docker/aufs.

Определение контейнера (Container)

Контейнер можно назвать «сущностью» стека слоев с верхним слоем для записи.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

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

Контейнер определяет лишь слой для записи наверху образа (стека слоев для чтения). Он не запущен.

Определение запущенного контейнера

Запущенный контейнер — это «общий вид» контейнера для чтения-записи и его изолированного пространства процессов. Ниже изображен контейнер в своем пространстве процессов.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Изоляция файловой системы обеспечивается технологиями уровня ядра, cgroups, namespaces и другие, позволяют докеру быть такой перспективной технологией. Процессы в пространстве контейнера могут изменять, удалять или создавать файлы, которые сохраняются в верхнем слое для записи. Смотрите изображение:

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Чтобы проверить это, выполните команду на хост-машине:

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

Определение слоя образа (Image layer)

Наконец, мы определим слой образа. Изображение ниже представляет слой образа и дает нам понять, что слой — это не просто изменения в файловой системе.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Метаданные — дополнительная информация о слое, которая позволяет докеру сохранять информацию во время выполнения и во время сборки. Оба вида слоев (для чтения и для записи) содержат метаданные.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

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

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Расположение метаданных

На данный момент (я понимаю, что разработчики docker могут позже сменить реализацию), метаданные слоев образов (для чтения) находятся в файле с именем «json» в папке /var/lib/docker/graph/id_слоя:

где «e809f156dc985. » — урезанный id слоя.

Свяжем все вместе

Теперь, давайте посмотрим на команды, иллюстрированные понятными картинками.

docker create

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

docker start

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker start’ создает пространство процессов вокруг слоев контейнера. Может быть только одно пространство процессов на один контейнер.

docker run

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Один из первых вопросов, который задают люди (я тоже задавал): «В чем разница между ‘docker start’ и ‘docker run’?» Одна из первоначальных целей этого поста — объяснить эту тонкость.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Как мы видим, команда ‘docker run’ находит образ, создает контейнер поверх него и запускает контейнер. Это сделано для удобства и скрывает детали двух команд.

Продолжая сравнение с освоением Git, я скажу, что ‘docker run’ очень похожа на ‘git pull’. Так же, как и ‘git pull’ (который объединяет ‘git fetch’ и ‘git merge’), команда ‘docker run’ объединяет две команды, которые могут использоваться и независимо. Это удобно, но поначалу может ввести в заблуждение.

docker ps

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker ps’ выводит список запущенных контейнеров на вашей хост-машине. Важно понимать, что в этот список входят только запущенные контейнеры, не запущенные контейнеры скрыты. Чтобы посмотреть список всех контейнеров, нужно использовать следующую команду.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

docker images

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker images’ выводит список образов верхнего уровня (top-level images). Фактически, ничего особенного не отличает образ от слоя для чтения. Только те образы, которые имеют присоединенные контейнеры или те, что были получены с помощью pull, считаются образами верхнего уровня. Это различие нужно для удобства, так как за каждым образом верхнего уровня может быть множество слоев.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

docker stop

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker stop’ посылает сигнал SIGTERM запущенному контейнеру, что мягко останавливает все процессы в пространстве процессов контейнера. В результате мы получаем не запущенный контейнер.

docker kill

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker kill’ посылает сигнал SIGKILL, что немедленно завершает все процессы в текущем контейнере. Это почти то же самое, что нажать Ctrl+\ в терминале.

docker pause

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

В отличие от ‘docker stop’ и ‘docker kill’, которые посылают настоящие UNIX сигналы процессам контейнера, команда ‘docker pause’ используют специальную возможность cgroups для заморозки запущенного пространства процессов. Подробности можно прочитать здесь, если вкратце, отправки сигнала Ctrl+Z (SIGTSTP) не достаточно, чтобы заморозить все процессы в пространстве контейнера.

docker rm

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker rm’ удаляет слой для записи, который определяет контейнер на хост-системе. Должна быть запущена на остановленном контейнерах. Удаляет файлы.

docker rmi

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

docker commit

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайниковили Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker commit’ берет верхний уровень контейнера, тот, что для записи и превращает его в слой для чтения. Это фактически превращает контейнер (вне зависимости от того, запущен ли он) в неизменяемый образ.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

docker build

До:
Dockerfile Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайникови Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников
Со многими другими слоями.

Команда ‘docker build’ интересна тем, что запускает целый ряд команд:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

На изображении выше мы видим, как команда build использует значение инструкции FROM из файла Dockerfile как базовый образ после чего:

1) запускает контейнер (create и start)
2) изменяет слой для записи
3) делает commit
На каждой итерации создается новый слой. При исполнении ‘docker build’ может создаваться множество слоев.

docker exec

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker exec’ применяется к запущенному контейнеру, запускает новый процесс внутри пространства процессов контейнера.

docker inspect |

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайниковили Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker inspect’ получает метаданные верхнего слоя контейнера или образа.

docker save

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker save’ создает один файл, который может быть использован для импорта образа на другую хост-систему. В отличие от команды ‘export’, она сохраняет все слои и их метаданные. Может быть применена только к образам.

docker export

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker export’ создает tar архив с содержимым файлов контейнера, в результате получается папка, пригодная для использования вне docker. Команда убирает слои и их метаданные. Может быть применена только для контейнеров.

docker history

До:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

После:
Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Команда ‘docker history’ принимает и рекурсивно выводит список всех слоев-родителей образа (которые тоже могут быть образами)

Источник

Что такое Docker и как его использовать в разработке

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Содержание

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

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

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

Что такое Docker

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

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Разработка Docker была начата в 2008 году, а в 2013 году он был опубликован как свободно распространяемое ПО под лицензией Apache 2.0. В качестве тестового приложения Docker был включен в дистрибутив Red Hat Enterprise Linux 6.5. В 2017 году была выпущена коммерческая версия Docker с расширенными возможностями.

Docker работает в Linux, ядро которых поддерживает cgroups, а также изоляцию пространства имен. Для инсталляции и использования на платформах, отличных от Linux, существуют специальные утилиты Kitematic или Docker Machine.

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

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Docker-контейнеры работают в разных средах: локальном центре обработки информации, облаке, персональных компьютерах и т. д.

Преимущества использования Docker

Компоненты Docker

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

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Что такое Docker Engine

Docker Engine («Движок» Docker) — ядро механизма Докера. «Движок» отвечает за функционирование и обеспечение связи между основными Docker-объектами (реестром, образами и контейнерами).

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Элементы Docker Engine

Как работает Docker

Работа Docker основана на принципах клиент-серверной архитектуры, которая основана на взаимодействии клиента с веб-сервером (хостом). Первый отправляет запросы на получение данных, а второй их предоставляет.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Схема работы

Как работают образы

Docker-image — шаблон только для чтения (read-only) с набором некоторых инструкций, предназначенных для создания контейнера. Он состоит из слоев, которые Docker комбинирует в один образ при помощи вспомогательной файловой системы UnionFS. Так решается проблема нерационального использования дисковой памяти. Параметры образа определяются в Docker-file.

Для многократного применения Docker-image следует пользоваться реестром образов или Докер-реестром (Docker-registry), позволяющим закачивать готовые образы с внешнего репозитория сервиса и хранить их в реестре Докер-хоста. Рекомендуемый вариант — официальный реестр компании Docker Trusted Registry (DTR).

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

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

Как работают контейнеры

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

Изоляция рабочей среды осуществляется при помощи технологии namespace. Для каждого изолированного пространства (контейнера) создается уникальное пространство имен, которое и обеспечивает к нему доступ. Любой процесс, выполняемый внутри контейнера, ограничивается namespace.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

В ОС Linux посредством Docker Engine используется немного другая технология — контрольные группы (cgroups). При этом приложение ограничивается некоторым набором ресурсов. Сgroups осуществляют обмен доступных аппаратных ресурсов с контейнерами, на которые дополнительно устанавливаются необходимые ограничения (использование памяти, прав доступа к другому ресурсу и т. д.).

Движок Docker объединяет пространство имен (namespace), контрольные группы (cgroups) и файловую систему (UnionFS) в формат контейнера. В будущем планируется поддержка других форматов посредством интеграции технологий BSD Jails или Solaris Zones.

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

Docker Compose

Для управления несколькими контейнерами, из которых состоит проект, используют пакетный менеджер — Docker Compose.

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

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

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

Docker Swarm

При преобразовании хостов в кластер нужно воспользоваться утилитой кластеризации Docker Swarm («Docker в режиме роя). Хост, находящийся в его составе, называется «узлом» (node), который бывает управляющим или рабочим. Один кластер содержит только один управляющий «узел».

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Некоторые возможности утилиты

Для оркестрации контейнеров Doсker, наряду с Docker Swarm, применяют сторонний инструмент — опенсорсную платформу Kubernetes. Однако, в 2021 году в Kubernetes заявили об отказе от использования Doker в новых версиях. Поэтому связка Kubernetes и Docker будет постепенно терять актуальность.

Примеры применения

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

Что такое докер контейнер для чайников. Смотреть фото Что такое докер контейнер для чайников. Смотреть картинку Что такое докер контейнер для чайников. Картинка про Что такое докер контейнер для чайников. Фото Что такое докер контейнер для чайников

Чтобы понять, как можно применять Докер на практике, разберем основные примеры использования для чайников.

Заключение

Docker является важным инструментом для каждого современного разработчика, как основа аппаратной виртуализации приложений. Эта технология обладает широким функционалом и возможностями для контроля процессов. Докер позволяет не только развертывать контейнеры, но и оперативно масштабировать их экземпляры, работать с многоконтейнерными приложениями (Docker Compose), а также объединять несколько Докер-хостов в единый кластер (Docker Swarm).

Докер характеризуется достаточно простым синтаксисом. Поэтому он довольно прост в освоении как для опытных IT-специалистов, так и для новичков. Программное обеспечение совместимо со всеми версиями операционных систем Linux и Windows, поэтому область применения Docker практически не ограничена.

Чтобы использовать возможности контейнеризации на 100%, Docker нужна подходящая рабочая среда. Правильное решение — VPS от Eternalhost. Мощные виртуальные сервера с возможностью быстрого масштабирования ресурсов!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *