Сегодня мы рассмотрим 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, и всё, что мы делали вручную, теперь выполнится автоматически.