Краткое руководство по началу работы, которое вы ищете. Если вы следовали тенденциям развития программного обеспечения в прошлом году, то, должно быть, устали слышать термин Docker. Вероятнее всего, вы ошеломлены огромным количеством разработчиков, говорящих о контейнерах, изолированных виртуальных машинах, супервизорах и другой магии Вуду, связанной с DevOps. Сегодня мы во всем разберемся. Пора наконец понять, что такое контейнеры как услуга и зачем они нужны. Не так давно я задал себе тот же вопрос. Будучи долгое время упрямым разработчиком, я наконец сел и принял удивительность использования контейнеров. Вот мое мнение, почему вы должны попробовать их применить. Docker – программное обеспечение для создания контейнерных приложений. Контейнера должны быть небольшими, не хранящими информацию среды для запуска части программного обеспечения. Название «виртуальная машина» (VM) говорит само за себя: это виртуальная версия реальной машины, которая имитирует аппаратные средства машины внутри более крупной машины. Значит, вы можете запускать множество виртуальных машин на одном крупном сервере. Вы когда-нибудь видели фильм «Начало»? Виртуальная машина – что-то вроде «Начало». Часть программного обеспечения, позволяющая VM работать, называется Hypervisor. У вас закипает мозг от новых терминов? Потерпите минутку, на то есть причины. Виртуальные машины работают только из-за Hypervisor. Это специальное программное обеспечение, которое позволяет физической машине размещать несколько разных виртуальных машин. Со стороны кажется, что VM запускают свои собственные программы и используют аппаратное обеспечение узла. Однако это Hypervisor выделяет ресурсы виртуальной машине. Примечание: если вы когда-либо пытались установить программное обеспечение (такое как VirtualBox), но потерпели неудачу, скорее всего, это было связано с тем, что в BIOS вашего компьютера не активирована система виртуализации. Возможно, это случилось со мной больше раз, чем я помню.  нервный смех** Если вы такой же ботаник, как я, вот потрясающая запись на тему того, что такое Hypervisor.  Virtualization 101: What is a Hypervisor? Для чего действительно нужен CaaS? Мы давно используем виртуальные машины. Почему внезапно стали хороши контейнеры? Никто не говорил, что виртуальные машины плохи, с ними просто сложно справиться. DevOps, как правило, сложен, и нужно, чтобы назначенный человек все время выполнял связанную с ним работу. Виртуальные машины занимают много места и оперативной памяти, а также нуждаются в постоянной настройке. Не говоря уже о том, что требуется опыт для правильного управления ими. С Docker вы можете абстрагироваться от регулярных конфигураций и настроек среды и вместо этого сосредоточиться на кодировании. С Docker Hub вы можете взять предварительно созданные образы и запустить их в работу за короткое время. Но самым большим преимуществом является создание однородной среды. Вместо того чтобы устанавливать список различных зависимостей для запуска приложения, нужно установить только Docker. Docker – кроссплатформенный, поэтому каждый разработчик команды будет работать в той же среде. То же самое относится к разработке, постановке и производственному серверу. Это круто! Нет больше «это работает на моей машине». Начнем с установки. Удивительно: требуется всего лишь часть программного обеспечения, установленного на машине разработки, и все будет работать нормально. Docker – все, что нужно.  К счастью, процесс установки очень прост. Вот так совершается установка на Ubuntu. Это все, что нужно. Чтобы убедиться, что Docker работает, вы можете запустить другую команду. Docker должен вернуть результаты работы. Если системные службы остановлены, запустите комбо из двух команд, чтобы развернуть Docker и убедиться, что он запускается при загрузке. При базовой установке Docker нужно запустить команду docker как sudo. Но если добавить пользователя в группу docker, можно запустить команду без sudo. Запуск команд добавит пользователя в группу docker. Чтобы проверить это, запустите $ id -nG. Если вернетесь к устройству вывода с вашим именем пользователя в списке, все сделано правильно. Что насчет Mac и Windows? К счастью, установка так же проста. Скачайте простой файл, который запускает мастер установки. Нет ничего легче. Посмотрите здесь мастер установки для Mac и здесь для Windows. После развертывания и запуска Docker мы можем немного поэкспериментировать. Четыре первые команды, которые нужно поставить в работу: Начнем с малого. Возьмем образ Ubuntu из Docker Hub и создадим из него контейнер. Мы добавляем -it как опциональную функцию, чтобы дать контейнеру интегрированный терминал. Мы можем подключиться терминалу, а также запустить команду bash. Указывая ubuntu: 16.04, мы получаем образ Ubuntu с тегом версии 16.04 из Docker Hub. После запуска команды create убедитесь, что контейнер создан. Список должен выглядеть примерно так. Контейнер создан и готов к запуску. Запуск контейнера прост: задайте команду start ID контейнера. Еще раз проверьте, запущен ли контейнер, но теперь без флага -a. Если запущен, присоединяйтесь к нему. Cursor меняется. Почему? Потому что вы только что вошли в контейнер. Теперь вы можете запустить любую команду bash, к которой привыкли в Ubuntu, как будто это был экземпляр, запущенный в облаке. Попробуйте. Все будет работать хорошо, и даже $ ll. Простой контейнер Docker – все, что вам нужно. Это ваша собственная маленькая виртуальная площадка, где вы можете заниматься разработкой, тестированием или чем хотите! Нет необходимости использовать виртуальные машины или тяжелое программное обеспечение. Чтобы проверить мою точку зрения, установите что-нибудь в этом маленьком контейнере. Установка Node пройдет хорошо. Если хотите выйти из контейнера, введите exit. Контейнер остановится, и вы сможете вывести список, напечатав $ docker ps -a. Примечание. Каждый контейнер Docker работает как sudo по умолчанию, то есть команды sudo не существует. Каждая выполняемая команда автоматически запускается с полномочиями sudo. Время поработать с настоящим материалом. Это то, что вы будете использовать в реальной жизни для своих проектов и производственных приложений. Я упомянул выше, что каждый контейнер изолирован и не сохраняет состояние. Это означает, что после удаления контейнера его содержимое будет удалено навсегда. Как вы сохраняете данные в таком случае? Вы когда-нибудь слышали о томах? Тома позволяют сопоставлять каталоги на главной машине с каталогами внутри контейнера. При создании нового контейнера добавьте флаг -v, чтобы указать, какой том создать. Эта команда привяжет текущий рабочий каталог на компьютере к директории / var / www внутри контейнера. После запуска контейнера с помощью команды $ docker start <container_id> можно отредактировать код на главной машине и посмотреть изменения в контейнере. Теперь вы можете сохранять данные для различных вариантов использования – от хранения изображений до хранения файлов базы данных – и, конечно, для разработки, где нужны возможности живой перезагрузки. Примечание. Можно запускать команды create и start одновременно с командой run. Примечание. Единственным дополнением является флаг -d, который указывает контейнеру работать отдельно, в фоновом режиме. Мы можем создать простой веб-сервер nginx для размещения статического веб-сайта за пару простых шагов. Создайте новый каталог, назовите его как хотите, я назову свой myapp для удобства. Все, что вам нужно, – создать простой файл index.html в каталоге myapp и вставить его. У нас есть общая веб-страница с текстом заголовка. Осталось запустить контейнер nginx. Мы захватываем образ nginx из Docker Hub для мгновенной настройки nginx. Конфигурация томов похожа на то, что мы сделали выше. Мы указали на каталог по умолчанию, где nginx размещает HTML-файлы. Новым является параметр --name, который мы установили для webserver и -p 8080: 80. Мы сопоставили порт контейнера 80 с портом 8080 на главной машине. Не забудьте запустить команду в каталоге myapp. Проверьте, работает ли контейнер, с помощью $ docker ps и запускается окно браузера. Перейдите на http: // localhost: 8080.  У нас есть веб-сервер nginx, запускающийся всего за пару команд. Редактируйте в index.html как вам нужно. Перезагрузите страницу, и увидите, что содержимое изменилось.  Примечание. Вы можете остановить запущенный контейнер с помощью команды stop. Есть поговорка: если нужно что-то сделать дважды, автоматизируй. К счастью, Docke позаботился об этом. Вместе с файлом index.html добавьте файл Docker. Его имя Dockerfile, без каких-либо расширений. Dockerfile – конфигурация сборки для образов Docker. Основное внимание уделяется образам! Мы указываем, что хотим захватить образ nginx:alpine в качестве основы для нашего образа, создать том и выставить порт 80. Для создания образа у нас есть команда `build . . указывает, где находится файл Docker, который будет использоваться для сборки образа, а -t отмечает тег для образа. Образ будет известен как webserver:v1. С помощью этой команды мы не извлекли образ из Docker Hub, а вместо этого создали свой собственный. Чтобы посмотреть все образы, используйте команду images. Запустим созданный образ. Сила Dockerfile – надстройка, которую вы можете предоставить контейнеру. Можно предварительно создавать образы по своему вкусу, а если не нравятся повторяющиеся задачи, то совершить еще один шаг и установить docker-compose. Docker-compose позволит создавать и запускать контейнер c одной команды. Но еще важнее, что вы можете построить целый кластер контейнеров и настроить их, используя docker-compose. Перейдите на страницу установки и установите docker-compose на компьютер.  Install Docker Compose
Вернувшись в устройство, запустите $ docker-compose --version. Разберемся с некоторыми композициями.
Вместе с Dockerfile добавьте еще один файл с именем docker-compose.yml и вставьте этот фрагмент.  Будьте осторожны с отступами, иначе *docker-compose.yml** не будет работать должным образом. Осталось только запустить его. Docker будет собирать образ из Dockerfile в текущем каталоге (.), отображать порты, как мы это делали выше, а также «шарить» томы. Посмотрите, что происходит! То же самое, что мы делали с командами сборки и запуска. Теперь вместо них мы выполняем только одну команду docker-compose up.
Вернитесь в браузер, и увидите, что все работает так же, как и раньше. Единственное различие в том, что теперь нет необходимости в утомительном написании команд в терминале. Мы заменили их двумя конфигурационными файлами – Dockerfile и docker-compose.yml. Оба эти файла могут быть добавлены в ваш репозиторий Git. Почему это важно? Потому что они всегда будут работать в производстве правильно, как и ожидалось. Точно такая же сеть контейнеров будет развернута на производственном сервере!
Чтобы закончить этот раздел, перейдите обратно в консоль и просмотрите список всех контейнеров еще раз. Если вы хотите удалить контейнер, можете запустить команду rm, о которой я упоминал выше. Для удаления образов используйте команду rmi. Постарайтесь не оставлять остатки контейнеров и удалять их, если они вам больше не нужны. Убедившись, что Docker не является единственной технологией для создания контейнеров, я должен обязательно упомянуть менее популярные технологии. Docker – это всего лишь самый распространенный вариант контейнеризации. Но, похоже, rkt также отлично работает. Копая глубже, я должен упомянуть об оркестровке контейнеров. Мы говорили только о верхушке айсберга. Docker-compose – это инструмент для создания сетей контейнеров. Но, когда появляется необходимость управлять большими объемами контейнеров и обеспечивать максимальный аптайм, в игру вступает оркестровка. Управление большим кластером на основе контейнеров – вовсе не тривиальная задача. По мере роста количества контейнеров нужен способ автоматизации различных задач DevOps, которые мы обычно делаем. Оркестрация – это то, что помогает в создании хостов, создании или удалении контейнеров, когда нужно масштабировать или воссоздавать упавшие контейнеры, сетевые контейнеры и многое другое. И здесь на помощь приходят следующие инструменты: Kubernetes от Google и собственная разработка Docker – Swarm Mode. Если я не убедил вас в огромных преимуществах использования CaaS и простоты Docker, я бы настоятельно рекомендовал пересмотреть и перенести одно из ваших существующих приложений в Docker-контейнер! Однородность Docker похожа на магию для производственных сред. Это облегчит развертывание приложений и управление серверами. Потому что теперь вы точно знаете: что работает локально – будет работать и в облаке. Это то, что я называю спокойствием. Больше никто не услышит печально известного приговора, который мы все слышали слишком много раз. Источник: A crash course on Docker — Learn to swim with the big fish CEO в Southbridge