22 декабря 2016

Разворачиваем тестовую среду используя Vagrant


Сегодня мы рассмотрим Vagrant — инструмент, способный быстро развернуть тестовую среду для наших приложений.

Основные этапы:

Для того, чтобы начать работать с Vagrant'ом, необходимо скачать и установить VirtualBox. Найти его можно здесь.

Ставим Vagrant следующей командой:

$ apt-get install vagrant

И Docker, инструмент, который мы будем использовать для создания образа нашего приложения:

$ apt-get install docker

Теперь нам нужно скачать 'коробку', то есть саму среду. Мы будем использовать CentOS 7:

$ vagrant box add centos/7

Создаём папку, внутри неё запускаем терминал и выполняем:

$ vagrant init

Команда сгенерирует для нас Vagrant файл, в котором нужно поменять значение поля 'config.vm.box' на "centos/7" и добавить поле 'config.vm.network "forwarded_port", guest: 8080, host: 8080', что позволит нам получить доступ к приложению снаружи среды.

Теперь мы можем запускать Vagrant, но сначала подготовим наше приложение. Возьмём готовый проект, который мы использовали в туториале про Minikube. В папке с файлом 'Vagrant' выполняем:

$ git clone https://github.com/dimonik/spring_hello_app.git
$ cd spring_hello_app
$ mvn package

Переходим в директорию '/spring_hello_app/target' и создаём файл с названием 'Dockerfile', который должен содержать в себе следующее:

FROM java:8
MAINTAINER Letiko
ADD tutorial-0.0.1-SNAPSHOT.jar tutorial.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","tutorial.jar"]

Дальше нам нужно запустить нашу виртуальную машину. В директории с файлом 'Vagrant':

$ vagrant up

На это может уйти несколько минут. Далее, входим в консоль машины:

$ vagrant ssh

В CentOS 7 нам нужно установить Docker и дать пользователю права на его использование. Для этого выполняем следующие команды:

$ yum install docker
$ groupadd docker
$ usermod -aG docker $(whoami)
$ service docker restart

Создаём образ приложения и запускаем его в контейнере:

$ cd /vagrant/spring_hello_app/target
$ docker build -t simple-server .

$ docker run --privileged --name simple-server_CONT -p 8080:8080 -d simple-server

Где -t — название образа приложения,
--name — название контейнера,
-d — флаг, запускающий приложение в фоновом режиме. В конце пишем имя запускаемого образа.

Если наша система состоит из нескольких приложений, которые должны общаться между собой, то в команду запуска контейнера добавялем '--link название_контейнера', к которому обращаемся.

Теперь можем проверить наше приложение. Переходим по адресу localhost:8080 и видим:

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

init.sh:

git clone https://github.com/dimonik/spring_hello_app.git
cd spring_hello_app
mvn package

cd target

cat<<EOF>./Dockerfile
FROM java:8
MAINTAINER Letiko
ADD tutorial-0.0.1-SNAPSHOT.jar tutorial.jar
EXPOSE 8080
ENTRYPOINT
["java","-jar","tutorial.jar"]
EOF

cd ..
cd ..

vagrant up

Предыдущему файлу даём возможность выполнения.
bootstrap.sh:

sudo yum install docker
sudo groupadd docker
sudo usermod -aG docker $(whoami)
sudo service docker restart

cd /vagrant/spring_hello_app/target
sudo docker build -t simple-server .

sudo docker rm simple-server_CONT
sudo docker run --privileged --name simple-server_CONT -p 8080:8080 -d simple-server

Файл Vagrant должен выглядеть так:

Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provision "shell", path: "bootstrap.sh",
run: "always"
end

Готово! Теперь нам нужно лишь запустить init.sh, и всё, что мы делали вручную, теперь выполнится автоматически.




ССЫЛКИ:
  1. Основы Vagrant;
  2. Основы Docker.
  3. Про CentOS.



Автор

© Yevhenii