В посте « Установка модулей Puppet — библиотекарь Puppet» мы предоставили виртуальную машину Vagrant для установки модуля Puppet из Puppet Forge с использованием библиотеки-кукол , теперь в этом посте мы будем делать то же самое, за исключением того, что мы обеспечиваем Docker- контейнер вместо Vagrant VM и развернем hello- весеннее применение в подготовленном контейнере.
Прежде чем приступить к развертыванию приложения в контейнере Docker, давайте кратко разберемся с Docker и его отличиями от виртуальной машины.
Что такое Докер?
Docker — это абстракция высокого уровня над контейнерами linux, которая управляет жизненным циклом контейнеров. Docker позволяет упаковать приложение со всеми его зависимостями в стандартизированный модуль для разработки программного обеспечения. И если это устройство работает в вашей локальной сети, мы можем гарантировать, что оно будет работать точно так же, от QA до промежуточных и производственных сред.
Docker против виртуальной машины
Технологии виртуализации, такие как VirtualBox, VMWare, KVM и т. Д., Используют полную виртуализацию машины, тогда как Docker совместно использует определенные части ядра хоста и экземпляра операционной системы, предлагая меньшие издержки за счет меньшей изоляции. Кроме того, Docker предоставляет виртуальную среду с собственным ЦП, памятью, блоком ввода-вывода, сетью и т. Д. С использованием функций Cgroups в ядре Linux на хосте LXC по сравнению с технологиями виртуализации, которые предлагают нам полную новую виртуальную машину. Теперь давайте начнем с нашего развертывания в контейнере, выполнив следующие шаги:
Шаг 1: Создайте каталог с любым именем для меня, это docker и файл с именем Dockerfile и Puppetfile внутри каталога следующим образом:
1
2
3
|
$ mkdir docker $ cd docker $ touch Dockerfile Puppetfile |
Созданный выше Dockerfile содержит все команды, которые пользователь может вызвать в командной строке для сборки образа.
Puppetfile, созданный выше, представляет собой DSL на основе Ruby, в котором указывается, где должны быть установлены модули puppet и откуда их извлекать.
Шаг 2. Скопируйте приведенный ниже контент в Puppetfile :
1
2
3
4
|
# Puppetfile Configuration for librarian-puppet. forge "http://forge.puppetlabs.com" mod "arpitaggarwal/tomcat" |
Шаг 3: Скопируйте ниже содержание в Dockerfile
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
FROM ubuntu:latest MAINTAINER arpitaggarwal "[email protected]" RUN apt-get -y update RUN apt-get -q -y install git RUN sudo apt-get install -y ruby RUN apt-get install -y ruby-dev RUN apt-get -y update RUN apt-get install -y make RUN apt-get install -y build-essential RUN apt-get install -y puppet RUN gem install librarian-puppet ADD Puppetfile / RUN librarian-puppet install RUN puppet apply --modulepath=/modules -e "include java8 class { 'tomcat':version => '7',java_home => '/usr/lib/jvm/java-8-oracle'}" RUN apt-get remove -y make puppet build-essential ruby-dev |
Шаг 4. Создайте приложение в каталоге docker, для меня это hello-spring, клонированный из github :
1
2
3
|
$ git clone https: //github.com/arpitaggarwal/hello-spring.git $ cd hello-spring $ mvn clean install |
Шаг 5: Обновите Dockerfile, добавив местоположение файла .war, используя команду Docker COPY :
1
2
|
COPY hello-spring/target/hello-spring.war /var/lib/tomcat7/webapps/ EXPOSE 8080 |
Указанная выше команда EXPOSE относится к команде Docker, которая подходит для межконтейнерной связи.
Наконец, Dockerfile должен выглядеть так :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
FROM ubuntu:latest MAINTAINER arpitaggarwal "[email protected]" RUN apt-get -y update RUN apt-get -q -y install git RUN sudo apt-get install -y ruby RUN apt-get install -y ruby-dev RUN apt-get -y update RUN apt-get install -y make RUN apt-get install -y build-essential RUN apt-get install -y puppet RUN gem install librarian-puppet ADD Puppetfile / RUN librarian-puppet install RUN puppet apply --modulepath=/modules -e "include java8 class { 'tomcat':version => '7',java_home => '/usr/lib/jvm/java-8-oracle'}" RUN apt-get remove -y make puppet build-essential ruby-dev COPY hello-spring/target/hello-spring.war /var/lib/tomcat7/webapps/ EXPOSE 8080 |
Шаг 6: Постройте контейнер Docker с помощью команды сборки Docker:
1
|
docker build --no-cache= true -t spring-application-container . |
Указанный выше spring-application-container ссылается на имя образа докера.
Шаг 7: После сборки запустите контейнер с помощью команды Docker run :
1
|
docker run -p 8080 : 8080 --cap-add SYS_PTRACE -it spring-application-container /bin/bash |
Шаг 8: Получите ваш IP-адрес контейнера Docker, используя docker-machine :
1
|
docker-machine ip your_vm_name |
Далее откройте URL-адрес http: // container-ip-address: 8080 / hello-spring
- Полный исходный код размещен на github .
Ссылка: | Dockerizing Web Application с Puppet от нашего партнера JCG |