Статьи

Докер на OS X

кит
В настоящее время в мире виртуализации Docker — новый ребёнок. Это почти тривиально, чтобы настроить и играть с ним, когда вы работаете в Linux. Что если, как и многие гики, вы используете OS X в качестве основной системы разработки? Здесь обсуждаются два возможных решения: использование boot2docker или запуск его через виртуальную машину Linux.

Давайте возьмем простой HTTP-сервер на основе Go и запустим его в контейнере. Я подготовил демо на bitbucket.org/ariya/docker-hellogo, за которым вы можете следить. Чтобы начать, начните с:

git clone https://bitbucket.org/ariya/docker-hellogo.git
cd docker-hellogo

Содержание Dockerfileэтого репо выглядит следующим образом (упрощенно):

FROM centos:centos6
ADD . /src
RUN yum -y install golang
EXPOSE  8200
CMD ["go", "run", "/src/serve.go"]

Он устанавливает CentOS 6 в качестве базового образа, устанавливает Go и, наконец, открывает порт 8200 (где будет работать HTTP-сервер). Последняя CMDстрока указывает, что делать при выполнении контейнера, то есть запускать указанный HTTP-сервер.

Предполагая, что Docker доступен (например, правильно установлен в Ubuntu ), мы можем построить контейнер:

sudo docker build -t hellogo .

Точка ссылается на текущий каталог (т.е. Git checkout), а встроенный образ будет называться hellogo. Обратите внимание, что при этом будет извлечено базовое изображение для CentOS 6, если оно еще не доступно локально.

После завершения процесса сборки запустить образ так же просто, как:

sudo docker run -p 8200:8200 -t hellogo

Аргумент -p 8200:8200указывает переадресацию порта. Откройте браузер и перейдите по адресу http: // localhost: 8200, и вы увидите знаменитый Hello world! сообщение.

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

Первый вариант — использовать boot2docker , сверхлегкий дистрибутив Linux, чтобы запустить Docker. После boot2docker будет установлен , установка , как это (заметим , что нам нужно второй линии , чтобы обеспечить правильное перенаправление портов):

boot2docker init
vboxmanage modifyvm boot2docker-vm --natpf1 "http,tcp,127.0.0.1,8200,,8200"
boot2docker up
export DOCKER_HOST=tcp://localhost:4243

Вот и все! Теперь вы можете запустить docker buildи docker runкак описано ранее (пропустите часть sudo). Скорее просто, не так ли?

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

Чтобы проиллюстрировать это, Vagrantfileв репозитории Git есть:

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "forwarded_port", guest: 8200, host: 8200
  config.vm.provision "shell",
    inline: "apt-get -y update && apt-get -y install docker.io"
end

Он основан на недавней версии Ubuntu 14.04 ( Trusty ). Сценарий инициализации очень прост, его задача — установить Docker. Обратите также внимание на переадресацию порта 8200. Инициализируйте эту виртуальную машину, запустив:

vagrant up

Дайте минуту или две, и теперь виртуальная машина должна быть готова. Вы можете убедиться в этом, запустив VirtualBox Manager. Если проблем нет, мы можем подключиться к этой виртуальной машине:

vagrant ssh

В этом сеансе SSH вы можете запустить docker buildи, docker runкак описано ранее. Поскольку порт 8200 переадресован правильно, вы также можете посетить http: // localhost: 8200, используя, например, Safari, работающий на OS X (хост-система).

Для этой установки вы можете убедиться в силе виртуализации. Ваша машина OS X работает под управлением системы Ubuntu 14.04 в виртуальной машине на основе VirtualBox. Теперь внутри этой системы Ubuntu в контейнере работает другая система CentOS 6.5. В этом контейнере выполняется простой HTTP-сервер на основе Go. Веселье, не правда ли?

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

Содержите все вещи!