Книжный каталог

Использование Docker

Перейти в магазин

Сравнить цены

Описание

Разработка и развёртывание программного обеспечения с помощью контейнеров Контейнеры Docker предоставляют простые быстрые и надёжные методы разработки, распространения и запуска программного обеспечения, особенно в динамических и распределённых средах. Из этого практического руководства вы узнаете, почему контейнеры так важны, какие преимущества вы получите от применения Docker и как сделать Docker частью процесса разработки. Книга "Использование Docker" предназначена для разработчиков, инженеров по эксплуатации и системных администраторов, особенно для тех, кто живо интересуется практическим применением технологии DevOps, она предоставит обширный материал: от основ, необходимых для запуска десятка контейнеров, до описания сопровождения крупной системы с множеством хостов в сетевой среде со сложным режимом планирования. Книга последовательно проведёт вас по всем этапам, необходимым для разработки, тестирования и развёртывания любого веб-приложения, использующего Docker. Основные темы, рассматриваемые в книге: - начало работы с Docker - создание и развёртывание простого веб-приложения; - использование методик непрерывного развёртывания для продвижения вашего приложения к активному промышленному использованию несколько раз в день; - изучение различных возможностей и методик для регистрации в системных журналах и наблюдения за многочисленными контейнерами; - исследование сетевой среды и сетевых сервисов: как контейнеры находят друг друга и каким образом можно установить соединение между ними; - распределение и организация кластеров контейнеров с целью балансировки нагрузки, масштабирования, устранения критических сбоев и планирования; - обеспечение безопасности системы, следуя принципам "глубокой или многоуровневой защиты" и минимальных привилегий; - применение контейнеров для построения архитектуры микросервисов. "Использование Docker" - подробное практическое руководство по экосистеме Docker, представляющей собой продвижение заключённых в контейнеры приложений-микросервисов от разработки и тестирования к промышленному производству". - Эдриен Кокрофт, аспирант-исследователь компании Battery Ventures "Использование Docker" - глубокий, всеобъемлющий обзор программной среды Docker и экосистемы контейнеров. Практическая направленность книги в сочетании с большим количеством примеров упрощает применение теоретических концепций и методик в реальных проектах." - Пини Резник, главный инженер компании Container Solutions

Сравнить Цены

Предложения интернет-магазинов
Моуэт Э. Использование Docker Моуэт Э. Использование Docker 1601 р. chitai-gorod.ru В магазин >>
Docker Docker Docker Docker Docker Docker Docker Docker Docker Docker 1357 р. nazya.com В магазин >>
Использование Docker Использование Docker 1471 р. labirint.ru В магазин >>
Эдриен Моуэт Использование Docker Эдриен Моуэт Использование Docker 1089 р. ozon.ru В магазин >>
Футболка классическая Printio Docker Футболка классическая Printio Docker 1240 р. printio.ru В магазин >>
Docker Docker 1874.44 р. jd.ru В магазин >>
Docker Docker 1848.02 р. jd.ru В магазин >>

Статьи, обзоры книги, новости

Docker - руководство для начинающих

Docker – руководство для начинающих

Автор: German Jaber

Дата публикации: 28 / 01 / 2015

Дата перевода: март 2015 г.

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

Прежде чем мы продолжим, позвольте мне прояснить ситуацию. По состоянию на сейчас (4 января 2015 г.) Docker работает только на Linux, он не может нативно функционировать в Windows или в OSX. Позже я буду говорить об архитектуре Docker и все станет очевидным. Так что если вы хотите иметь Docker на платформе, которая не является системой Linux, то вы должны запустить Linux в виртуальной машине.

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

Что Docker может сделать для вас?

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

  • Изоляции зависимостей приложения
  • Создания образа приложения и его тиражирования
  • Создания готового для запуска приложения, которое легко распространять
  • Возможности легкого и быстрого масштабирования отдельных экземпляров приложения
  • Тестирования приложения и освобождения затраченных ресурсов после завершения тестирования

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

Что конкретно делает Docker?

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

Двумя наиболее важными сущностями в Docker являются образы (images) и контейнеры (containers). Помимо них, также важны ссылки (links) и тома (volumes). Давайте начнем с образов.

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

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

Чтобы создать образ, вы берете некоторый образ и изменяете его таким образом, чтобы получился образ-потомок. Это можно сделать либо с помощью файла, в котором определяется базовый образ и изменения, которые должны быть выполнены, либо в живую "запускаете" образ, изменяете его и сохраняете в нем изменения. У каждого способа есть свои преимущества, но обычно для внесения изменений предпочитают использовать файл.

У образов есть уникальный идентификатор и уникальная пара параметров - уникальное удобочитаемое название и тег. Образы могут назваться, например, ubuntu:latest, ubuntu:precise, django:1.6, django:1.7 и т.д.

Контейнеры

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

Давайте перейдем к примеру: вы можете загрузить образ ubuntu (есть общедоступный репозиторий, который называется реестром docker registry), модифицировать его, установив Gunicorn и ваше приложение Django со всеми его зависимостями, а затем из этого образа создать контейнер, при запуске которого будет запускаться ваше приложение.

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

У контейнеров есть одна особенность, которая существенно отличает их от виртуальных машин; они спроектированы так, что запускают только один процесс, они также не полностью эмулируют среду (если это то, что вам требуется, то воспользуйтесь LXC). Вы можете запустить экземпляр runit или экземпляр supervisord и в результате получить несколько процессов, но в действительности это не нужно (по моему скромному мнению).

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

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

Тома (volumes) представляют собой механизм, позволяющий сохранять ваши данные между отдельными запусками вашего контейнера. Они представляют собой пространство внутри контейнера, но данные хранятся за его пределами, что позволяет уничтожать, заново собирать, изменять или отключать на лету ваш контейнер, сохраняя ваши данные не измененными. В Docker есть возможность определить, какие части являются вашим приложением и какие части являются вашими данными, и предоставляются инструментальные средства, позволяющие хранить их раздельно. Одна из самых больших особенностей состоит в том, что когда вы работаете с Docker, то нужно делать так, чтобы контейнеры были одноразовыми и их можно было уничтожать.

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

Ссылки (links) являются еще одной очень важной частью Docker.

Всякий раз, когда контейнер запущен, ему назначается случайный приватный адрес IP, а другие контейнеры могут пользоваться этим адресом IP для соединения с данным контейнером. Это важно по двум причинам: во-первых, контейнерам предоставляется возможность обращаться друг к другу, во-вторых, у контейнеров есть общая локальная сеть. У меня однажды возникла проблема, когда я на одной и той же машине запустил два контейнера elasticsearch для двух различных клиентов, но не поменял имя кластера, задаваемое по умолчанию, и два сервера elasticsearch быстро создали непредусмотренный кластер. Есть некоторые ограниченные возможности межконтейнерного взаимодействия; подробности смотрите в документации Docker, описывающей сетевое взаимодействие

Чтобы обеспечить межконтейнерное взаимодействие, Docker при запуске нового контейнера позволяет делать ссылки на другие уже существующие контейнеры, причем контейнерам, на которые делаются ссылки, назначаются алиасы (которые указываете вы) внутри контейнера, который вы только что создали. Мы говорим, что эти контейнеры связаны с помощью ссылок.

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

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

Переносимость образов Docker

Есть еще один нюанс при создании образов. Docker позволяет в образе указывать тома и порты. Контейнеры, созданные из этого образа, наследуют эти настройки. Тем не менее, Docker не позволяют указать что-либо в образе, который не является переносимым.

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

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

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

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

Как Docker делает то, что он должен делать?

Два понятия: группы управления ( cgroups ) и объединяемые файловые системы ( union filesystems ). Docker использует группы управления для изоляции контейнеров, а объединяемую файловую систему - для хранения образов и создания практически эфемерных контейнеров.

Эта особенность ядра Linux, которая позволяет выполнять следующие два действия:

  1. Ограничивать использование ресурсов (оперативная память, процессор) отдельными группами процессов в Linux ( process groups )
  2. Для групп процессов создавать идентификаторы PID, ОТС, IPC, сеть, пользователя и монтировать пространства имен

Ключевым понятием здесь является пространство имен (namespace). Например, пространство имен идентификаторам PID позволяет процессам в нем использовать идентификаторы PID, изолированные и независимые от основного пространства имен PID, поэтому у вас в пространстве имен PID может быть свой собственный процесс init с PID, равным 1. Аналогично для всех остальных пространств имен. Вы можете использовать группы управления cgroups для того, чтобы создать среду, в которой процессы могут быть выполняться изолированно от остальной части ОС, но ключевой особенностью здесь является то, что процессы в этой среде используют уже загруженное и работающее ядро, поэтому накладные расходы в значительной степени такие же, как и при запуске другого процесса. Chroot для групп управления cgroups, как я это вижу, является нечто общим, что объединяет Халка , Бейна и Веном а.

Объединяемые файловые системы

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

Когда вы загружаете образ, изменяете его и сохраняете новую версию, вы всего лишь создаете новую объединенную файловую систему, которая монтируется поверх исходных слоев, соответствующих вашему базовому образу. Это делает образы Docker очень легковесными, например: ваши образы DB, Nginx и Syslog могут пользоваться одной и той же базовой системой Ubuntu, поскольку в каждом из них запоминаются только изменения, отличающие их от этой базы, которые должны функционировать.

По состоянию на 4 января 2015, в Docker можно в объединенных файловых системах пользоваться aufs , btrfs и средствами отображения устройств ( device mappe r).

Позвольте мне представить вам образ postgresql:

Т.е. образы представляют собой запись в формате json, в который определяется характеристика контейнеров, которые будут запускаться при помощи этого образа, указывается, где хранятся точки монтирования объединенной файловой системы, какие порты открываются и т.д. Каждый образ ассоциируется с объединяемой файловой системой, каждая объединяемая файловая система в Docker имеет своего собственного предка, поэтому образы имеют иерархию. Из одного и того базового образа может быть создано несколько образов Docker, но каждый образ может иметь только одного предка точно также, как и деревья, изучаемые на занятиях информатики ( в отличие от других деревьев, которые относятся к гораздо большей группе ). Не беспокойтесь, если все выглядит сложно или некоторые вещи вам не очень понятны, вы не будете работать с этими файлами напрямую, он приведен только для образовательных целей.

Контейнеры

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

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

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

Ниже показан контейнер для bestwebappever:

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

Совсем кратко пошаговые действия

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

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

В этом общедоступном реестре есть образы почти для всего, что вам, возможно, потребуется: Ubuntu, Fedora, Postgresql, MySQL, Jenkins, Elasticsearch, Redis и т.д. Разработчики Docker поддерживают в общедоступном реестре лишь несколько образов, но большая часть того, что вы можете получить оттуда, поступают от пользователей, которые публикуют там свои творения.

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

Третий шаг: смотрим список ваших образов:

Четвертый шаг: создаем контейнер из этого образа.

Краткий список того, что вы сделали с помощью этой последней команды:

  • --rm: сообщает Docker-у удалять контейнер каждый раз, как только произойдет выход из процесса. Хорошая возможность при тестировании, позволяющая избежать беспорядка
  • -ti: указывает Dockerу создать псевдотерминал и предоставить его для использования в интерактивном режиме. Это возможность для доступа к контейнеру и она хорошо подходит для быстрого прототипирования и различных игр, но при использовании контейнера в производственных условиях вы не должны включать эти флаги.
  • ubuntu: это образ, на основе котором мы будем создавать контейнер
  • /bin/bash: команда запуска контейнера, и поскольку мы начали работу в интерактивном режиме, то будет выдано приглашение для работы с контейнером

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

Теперь давайте запустим контейнер в фоновом режиме:

Будет выдан ID контейнера, который назначается некоторым случайным образом. Давайте проверим, что с нашим контейнером:

Он существует, ему автоматически присвоено удобное для восприятия имя. Теперь давайте посмотрим, что происходит внутри контейнера:

То, что мы только что сделали, это выполнили программу внутри контейнера и в данном случае это была программа /bin/bash. Флаги -ti служит той же цели, что при запуске docker, так что мы просто переходим в контейнере во внутрь оболочки.

Подведем итог

Подведем итог. Есть много другого, что мы здесь не рассмотрели, но это выходит за рамки данной статьи.

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

Источник:

rus-linux.net

Зачем нужен Docker и практика работы с ним, Записки программиста

Записки программиста Зачем нужен Docker и практика работы с ним

16 февраля 2015

Docker — это инструмент, предоставляющий удобный интерфейс для работы с LXC. С помощью Docker вы можете запускать процессы в изолированном окружении. Процессу, запущенному под Docker, кажется, что он работает в минимальном окружении, где помимо него есть только его дети. Хотя при этом процесс работает в той же операционной системе, что и остальные, нормальные, процессы, он просто их не видит, ровно как не видит файлов и всего остального за пределами своей «песочницы». Можно думать о Docker, как о прокачанном chroot или аналоге FreeBSD Jails для Linux. Ну и в добавок вокруг всего этого накручена тонна маркетинговой лапши, дескать «Docker является платформой для распределенных приложений» и прочее в таком духе.

Зачем нужен Docker, если есть тот же Vagrant? Главным образом, просто потому что виртуализация в Docker дешевле. Используя Vagrant, вы эмулируете работу целой операционной системы, тогда как Docker позволяет изолировать просто один процесс. Соответственно, используя одно и то же железо, с помощью Docker вы можете создать больше виртуальных окружений, чем при помощи Vagrant. Более того, LXC контейнеры запускаются (и останавливаются тоже) практически моментально, так как в них не происходит загрузка отдельной ОС. К тому же, Docker использует «слоеную» файловую систему AuFS, благодаря которой контейнеры могут совместно использовать одинаковые части файловой системы, доступные только на чтение. Если образ файловой системы занимает 5 Гб и вы запускаете 100 виртуальных окружений, то Vagrant потребуется 500 Гб места, а Docker — на порядок меньше.

Ну понятно, то есть, Docker во всем лучше Vagrant? На самом деле — нет. Docker не позволит вам запустить Windows, если вы сидите под Ubuntu. Слои AuFS накапливаются, из-за чего приходится время от времени их «схлопывать», а также прибегать к другим трюкам. Отмечаются проблемы в безопасности и общая сложность Docker, из-за которых даже начались работы над альтернативным проектом Rocket. Наконец, в Docker есть целый ряд косяков, которые приходится либо обходить какими-то хаками, либо находить образы, в которых эти хаки уже расставили за тебя.

В общем и целом, если вас всем устраивает Vagrant, скорее всего, вам нужен Vagrant, а не Docker.

Прежде, чем мы перейдем к основам работы с Docker, нужно отметить еще один момент. Есть как минимум два способа запуска приложений в Docker. Первый — просто запустить с тонной флагов, указывающих, куда писать логи, где брать конфиг, какой порт слушать и так далее (поскольку это просто запуск процесса, а не sudo service ololo start ), скрестить пальчики и надеяться, что все будет хорошо, даже при условии, что в окружении нет корректного initd, syslog, crond, и так далее. Второй — использовать специальный образ, например, baseimage, в котором решены эти и многие другие проблемы, тупо зайти в окружение по ssh, настроить все по-человечески и запускать приложение в полном соответствии с ожиданиями его разработчиков.

Я лично всегда был сторонником второго способа, хотя находятся толпы людей, доказывающие с пеной у рта, что второй способ, видите ли, не идиоматичный, и единственным правильным способом является первый. Мне кажется, в этом вопросе Umputun’у можно поверить на слово, поэтому далее будет описан второй подход.

Установка Docker. В Ubuntu 14.04 поставить Docker можно, воспользовавшись пакетом docker.io, но Docker вы в результате получите доисторический. Предпочтительнее воспользоваться следующей последовательностью действий:

sudo sh -c "echo deb https://get.docker.com/ubuntu docker main \

sudo apt-get update

sudo apt-get install lxc-docker

Аналогами боксов из мира Vagrant в мире Docker являются образы (image). Множество готовых образов с предустановленными MongoDB, WordPress и много чем еще можно найти в официальном реестре. Мы с вами, как уже отмечалось, воспользуемся baseimage:

Прописываем свой ключик в

/.ssh/authorized_keys. Теперь важный момент. Если остановить контейнер, все сделанные в нем изменения откатятся. Поэтому нужно сохранить состояние контейнера в новый образ. В соседнем терминале смотрим список запущенных контейнеров:

Из списка нас сейчас интересует container id. Сохраняем образ и останавливаем контейнер:

sudo docker stop 2fd

Теперь запускаем новый образ ( -d означает «демонизировать»):

По умолчанию контейнеры как бы находятся за NAT — они могут свободно ходить в сеть, но из сети нельзя так просто попасть в контейнеры. При этом с точки зрения хост-системы контейнеры находятся в сети 172.17.42.0/16. Узнать IP конкретного контейнера можно командой:

Насколько я могу судить, на данный момент нет простого способа присвоить контейнеру заранее известный IP адрес. Однако можно забиндить порты контейнера на интерфейсы-порты хост-системы, а также заставить контейнеры видеть друг друга при помощи файлов /etc/hosts. Подробности описаны здесь.

Давайте прибьем контейнер, затем запустим его снова, пробросив порт 22 контейнера на 127.0.0.1:222, и зайдем внутрь контейнера по ssh:

sudo docker run --dns 192.168.0.1 -p 127.0.0.1: 222 : 22 \

-d -i -t baseimage-ssh / sbin / my_init

ssh -p 222 root @ localhost

Адрес DNS-сервера, используемого хост-системой, можно узнать, сказав:

Вообще, я помню, что с Docker из пакета docker.io все хорошо работало без параметра --dns . Либо что-то сломали, либо это как-то зависит от конкретной сети, ибо при написании заметки без этого параметра из контейнера не получалось резолвить домены. К вопросу о косяках в Docker.

Итак, мы в системе! Теперь можно настраивать все и вся привычными нам средствами. Давайте, например, поднимем Nginx:

apt-get install nginx

service nginx start

<title>Welcome to nginx!</title>

Поскольку мы используем образ baseimage, а не совсем честную Ubuntu, для того, чтобы Nginx запускался при старте контейнера, нужно дополнительно отредактировать файл /etc/my_init.d/01_services.sh:

А затем сказать:

Теперь открываем терминал в хост-системе и сохраняем образ:

sudo docker commit 25f baseimage-nginx

sudo docker stop 25f

Запускаем получившийся образ и проверяем:

--name docker-nginx --dns 192.168.0.1 \

-p 127.0.0.1: 222 : 22 -p 127.0.0.1: 8080 : 80 \

-d -i -t baseimage-nginx / sbin / my_init

Заметьте, что здесь мы присвоили контейнеру имя, а то сколько уже можно пользоваться этими хэшами? Остановить контейнер теперь можно так:

Если вдруг вы ошиблись во время настройки контейнера, то можете либо откатиться к последней рабочей версии, либо починить текущую как-то так:

--skip-startup-files -- bash -l

Наконец, образы можно экспортировать:

Кстати, экспортированные образы неплохо gzip’уются.

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

А для каких целей вы используете Docker и используете ли его вообще?

Подпишись через RSS, Google+, Facebook, ВКонтакте или Twitter! Понравился пост? Поделись с другими: Коротко о себе

и временами — просто о жизни.

Обратите внимание! Облако меток

Копирование представленных на данном сайте материалов любыми способами не возбраняется.

Указание ссылки на оригинал приветствуется. © 2009–2018 Записки программиста

Источник:

eax.me

Использование Docker в городе Челябинск

В нашем интернет каталоге вы имеете возможность найти Использование Docker по разумной стоимости, сравнить цены, а также найти другие предложения в категории Компьютеры и интернет. Ознакомиться с свойствами, ценами и рецензиями товара. Доставка товара производится в любой город РФ, например: Челябинск, Пермь, Калининград.