Статьи

Dockerizing Web-приложение с Puppet

В посте « Установка модулей 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.
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