Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Первые шаги с Docker

Оригинал: First steps with Docker
Автор: Alex Collins
Дата публикации: 9 /03 /2014
Перевод: Н.Ромоданов
Дата перевода: март 2015 г.

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

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

Docker отличается от Vagrant.

VagrantDocker

Предназначен только для среды разработки

Предназначен для среды разработки и эксплуатации

Есть механизм долговременного хранения данных

Долговременное хранения данных в явном виде отсутствует

Работа с несколькими приложениями

Работа только с одним приложением

Язык управления - Ruby

Язык управления - Bash

Установка

В Linux это выполняется онлайновой командой yum/apt. Но, я работаю на Mac. В некоторых руководствах для Mac для установки Docker используется Vagrant.

Но Docker может работать более прозрачно при помощи boot2docker:

brew install boot2docker
boot2docker init
boot2docker up
export DOCKER_HOST=tcp://localhost:4243

Теперь вы должны иметь возможность проверить версию:

docker version

Ваш первый контейнер

Шаги, которые описываются в каждом руководстве и которые я буду здесь использовать:

  1. Создаем базовый образ из какого-нибудь из главных образов Linux.
  2. Устанавливаем некоторые зависимости и ваше приложение.
  3. Открываем порт приложения.
  4. Сохраняем.

Для начала я создал простое приложение, которое может быть запущено из командной строки:

git clone https://github.com/alexec/dropwizard-helloworld.git
mvm package

Создаем файл Dockerfile в каталоге проекта:

FROM centos

RUN yum -y install java-1.7.0-openjdk-devel.x86_64 

ADD target/dropwizard-helloworld-1.0-SNAPSHOT.jar /
ADD hello-world.yml /

CMD ["java", "-jar", "dropwizard-helloworld-1.0-SNAPSHOT.jar", "server", "hello-world.yml"]

EXPOSE 8080

Файл Dockerfile - это все в одном рецепте, все шаги будут выполнены следующем образом:

docker build .

Когда работа будет завершена, то будет выдан хэш образа, который был построен:

Successfully built a3e6a912822c

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

Запускаем:

docker run -i -P a3e6a912822c

Обратите внимание на параметр -P, с помощью которого осуществляется проброс порта из хостовой ОС в контейнер. Какой это порт? Это не тот порт (8080), который вы бы могли бы ожидать. Docker выбирает для вас случайный порт, и вы можете посмотреть, что это за порт:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                     NAMES
67079fc70d31        a3e6a912822c        java -jar dropwizard   9 days ago          Up About a minute   0.0.0.0:49155->8080/tcp   compassionate_tesla 

Поскольку я запускаю Docker внутри виртуальной машины (поскольку нахожусь на OS-X), мне нужно настроить проброс порта из моего компьютера в VirtualBox, для этого используется boot2docker:

VBoxManage controlvm boot2docker-vm natpf1 "49155,tcp,127.0.0.1,49155,,49155"

Но это несколько сложнее! И нам каждый раз нужно выяснить, какой используется порт! Давайте сделаем это по-другому.

docker run -i -p 8080:8080 a3e6a912822c

Параметр -p отображает порт контейнера в порт хост-системы.

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
c975a2628b03        a3e6a912822c        java -jar dropwizard   2 weeks ago         Up 5 seconds        0.0.0.0:8080->8080/tcp   condescending_bardeen 

Теперь он работает на порту 8080. Мы можем легко настроить проброс порта, если мы находимся на OS-X:

VBoxManage controlvm boot2docker-vm natpf1 "8080,tcp,127.0.0.1,8080,,8080"

Вы можете проверить это в вашем браузере по ссылке http://localhost:8080/hello-world

Совет: Действительно полезная команда отладки (похожа на команду vagrant ssh):

docker run -i -t a3e6a912822c bash