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

Заметка будет о контейнеризации и о том, как начать с ней работать на OS X.

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

Установка Docker

Так как я люблю brew, устанавливал я через него.

brew install docker
brew install boot2docker

Вообще, сначала я не сразу понял как работает Docker у себя в потрохах, поэтому осознание, что нужен еще и boot2docker пришло далеко не сразу.

В двух словах, Docker – это тоже виртуализация, но контейнерная. Она легче, чем традиционные VM (гипервизоры), в которых эмулируется все, от процессора до памяти.

Имеем следующее, boot2docker – это виртуальная машина, под которой работают контейнеры, а docker – это клиент для нее.

Инициализируем и запускаем boot2docker:

boot2docker init
boot2docker up
$(boot2docker shellinit)

В последней строке boot2docker установит переменные окружения, необходимые для работы docker. В принципе, можно вполне подсмотреть эти переменные (с префиксом DOCKER_) командой env и добавить их в какой-нибудь .zshrc или в .bashrc, чтобы не запускать $(boot2docker shellinit) для каждой открытой оболочки. У меня в .zshrc эти строки выглядят так:

export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/alexey_detr/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

Небольшая справка: контейнерами называются непосредственно запущенные инстансы. А образами – отправная точная для старта контейнера.

Запускаем и пользуемся Ubuntu

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

docker run -it ubuntu

Тут придется немного подождать, когда контейнер скачается и будет готов к использованию. Когда процедура завершится, вы попадете в терминал докеризированной системы, там можно выполнить например apt-get update && apt-get install mc.

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

docker ps

Находим наш контейнер, смотрим его NAME и выполняем следующую команду:

docker commit <name>

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

docker images

найти в нем необходимый образ и воспользоваться например IMAGE ID (намеренно не стал рассказывать о repository или tag, чтобы сократить объем заметки) для запуска

docker run -it 01dbf62fda7b

В этом случае вы уже обнаружите установленный mc.

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