Библиотека сайта rus-linux.net
Первые шаги с Docker
Оригинал: First steps with DockerАвтор: Alex Collins
Дата публикации: 9 /03 /2014
Перевод: Н.Ромоданов
Дата перевода: март 2015 г.
В последнее время в прессе достаточно хорошо и много говорилось о Docker. Это среда легковесных контейнеров, работающих на Linux, что выглядит как очень экономная версия пакета Vagrant. Я думаю, что настало время пробовать ее собственными руками.
Примечание переводчика: Пакет Vagrant предназначен для создания и конфигурирования виртуальной среды разработки и является обёрткой, дополняющей некоторое средство виртуализации, например, VirtualBox. Поэтому справедливо сравнивать Docker с Vagrant, но только в той части, которая касается подготовки и настройки контейнерных сред.
Docker отличается от Vagrant.
Vagrant | Docker |
Предназначен только для среды разработки | Предназначен для среды разработки и эксплуатации |
Есть механизм долговременного хранения данных | Долговременное хранения данных в явном виде отсутствует |
Работа с несколькими приложениями | Работа только с одним приложением |
Язык управления - 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
Ваш первый контейнер
Шаги, которые описываются в каждом руководстве и которые я буду здесь использовать:
- Создаем базовый образ из какого-нибудь из главных образов Linux.
- Устанавливаем некоторые зависимости и ваше приложение.
- Открываем порт приложения.
- Сохраняем.
Для начала я создал простое приложение, которое может быть запущено из командной строки:
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